#loops #if-statement
Вопрос:
Я пытаюсь запустить интерактивный сеанс, в котором пользователь может выбрать из выбора, что делать. После того, как пользователь выберет нужный модуль, выбранный модуль запустится и вернется на страницу выбора. Однако, если пользователь снова выберет тот же модуль, цикл IF пойдет не так. Кто-нибудь знает, что пошло не так с моим кодом? Пожалуйста, обратитесь к приведенному ниже коду для получения более подробной информации.
def comparison_select():
global month1, month2
while True:
try:
comparison_menu()
compare_input = int(input("Enter selected comparison: "))
if compare_input == 1:
print("Selected comparison period is: Daily")
from compare_exp_daily import command_daily
elif compare_input == 2:
print("Selected comparison period is: Monthly")
from compare_exp_monthly import command_monthly
elif compare_input == 0:
print("Thank you amp; Goodbye!")
break
else:
print("Error, please enter a number from the menu.n"
"Thank you!")
except:
print("Error, please enter a valid selection.")
Первый вывод работает нормально, но впоследствии, когда пользователь выбирает тот же самый выбор, он идет не так.
выход:
Comparison Available:
1. Daily
2. Monthly
0. Exit
Enter selected comparison: 1
Selected comparison period is: Daily
Enter Date (DD/MM/YYYY): 12/07/2021
Enter Date (DD/MM/YYYY): 16/07/2021
-------------------------------------------------------------------------------
Expense for 2021-07-12 is 15.0 dollars.
Expense for 2021-07-16 is 21.0 dollars.
-------------------------------------------------------------------------------
You have spent 6.0 dollars more on 2021-07-16 than on 2021-07-12
Comparison Available:
1. Daily
2. Monthly
0. Exit
Enter selected comparison: 1
Selected comparison period is: Daily
Comparison Available:
1. Daily
2. Monthly
0. Exit
Enter selected comparison: 1
Selected comparison period is: Daily
Comparison Available:
1. Daily
2. Monthly
0. Exit
Enter selected comparison: 0
Thank you amp; Goodbye!
Ответ №1:
Для того, что я вижу в вашем коде, единственное объяснение, которое я вижу, заключается в том, что вы всегда импортируете функцию вместо того, чтобы импортировать ее раньше(где это должно быть сделано), а затем всегда запускаете ее в операторе if. Поскольку импорт выполняется только один раз, он запускает его только один раз(что странно, что он даже работает с момента импорта).
Я бы изменил импорт на перед функцией(поскольку они являются глобальными) и вызвал функции в операторе if как таковые:
#imports
from compare_exp_daily import command_daily
from compare_exp_monthly import command_monthly
def comparison_select():
global month1, month2
while True:
try:
comparison_menu()
compare_input = int(input("Enter selected comparison: "))
if compare_input == 1:
print("Selected comparison period is: Daily")
command_daily()
elif compare_input == 2:
print("Selected comparison period is: Monthly")
command_monthly
elif compare_input == 0:
print("Thank you amp; Goodbye!")
break
else:
print("Error, please enter a number from the menu.n"
"Thank you!")
except:
print("Error, please enter a valid selection.")
Кроме того, я чувствую, что есть лучший способ проверить, есть ли правильный выбор в вашем меню, используя оператор if вместо попытки, за исключением:
#imports
from compare_exp_daily import command_daily
from compare_exp_monthly import command_monthly
def comparison_select():
global month1, month2
while True:
comparison_menu()
compare_input = int(input("Enter selected comparison: "))
if compare_input == 1:
print("Selected comparison period is: Daily")
command_daily()
elif compare_input == 2:
print("Selected comparison period is: Monthly")
command_monthly
elif compare_input == 0:
print("Thank you amp; Goodbye!")
break
elif compare_input !=0 amp;amp; compare_input!= 1 amp;amp; compare_input!=2:
print("Error, please enter a number from the menu.n Thank you!")
И еще кое-что. Хотя, хотя True работает, я бы использовал выход while !=1, потому что он более эффективен для памяти и не всегда является лучшим способом выполнения задач. Вы должны обновить эту переменную выхода до 1 в условии if compare_input == 0, например:
elif compare_input == 0:
print("Thank you amp; Goodbye!")
exit = 1
Если вы хотите перейти к этому решению, пожалуйста, убедитесь, что переменная exit находится вне цикла while, и поместите ее с любым другим значением, отличным от 1.
Любые вопросы о моем ответе, пожалуйста, задавайте, я здесь, чтобы помочь 🙂
Комментарии:
1. Большое вам за это спасибо! Мне удалось решить свою проблему с помощью вашего решения.
2. Не за что ! Рад, что смог помочь