Цикл Python while работает не так, как ожидалось
Я пытаюсь выполнить свое задание и изо всех сил. Идея состоит в том, что вы выбираете тип отчета, A или T. Оттуда вы продолжаете вводить целые числа, пока не выйдете. Как только вы выйдете, он должен распечатать сумму целых чисел, сложенных вместе для отчета "T"; или для отчета "А" следует напечатать сумму плюс список введенных целых чисел.
Проблема, с которой я сталкиваюсь в данный момент, связана с отчетом 'T', когда я ввожу целые числа, ничто не вызовет ошибки или выхода. Он просто постоянно просит меня ввести еще одно целое число. Затем из отчета "A" каждое целое число, которое я ввожу в него, просто появляется с "неверным вводом". Я уверен, что в моем коде, возможно, еще много проблем, но в настоящий момент я не могу их обойти. Любые указатели будут по достоинству оценены. Спасибо
def adding_report(report):
total = 0
items = []
while True:
user_number = input("Enter an ingteger to add to the total or \"Q\" to quit: ")
if report.upper == "A":
if user_number.isdigit():
total += int(user_number)
items.append(user_number)
elif user_number.upper() == "Q":
break
else:
print("Invalid input\n")
elif report.upper() == "T":
if user_number.isdigit():
total += int(user_number)
elif user_number.upper() == "Q":
break
else:
print("Invalid input\n")
report = input("Report types include All Items (\"A\") or Total Only (\"T\")\nPlease select report type \"A\" or \"T\": ")
while True:
if report.upper() in "A T":
adding_report(report)
else:
print ("Invalid input")
report = input("Please select report type \"A\" or \"T\": ")
3 ответа
in
Оператору нужен набор возможных значений. использование
if report.upper() in ("A", "T")
или (ближе к тому, что у вас есть)
if report.upper() in "A T".split()
Ваша первая проблема в этой строке:
if report.upper == "A":
Это всегда оценивается как False
, так как report.upper
является функциональным объектом, а не значением. Тебе нужно
if report.upper() == "A":
вернуть значение. Вам также следует переименовать входную переменную и заменить ее на внутреннее значение, которое вы хотите:
report = input("Report types include All Items (\"A\") or Total Only (\"T\")\nPlease select report type \"A\" or \"T\": ")
report = report.upper()
Это экономит беспорядок и время звонка upper
каждый раз, когда вы получаете доступ к этому письму.
Пожалуйста, просмотрите ваш код для повторяющихся предметов и опечаток; Вы спасете головную боль в конечном счете - я знаю из личного опыта.
Попробуй это
def adding_report(report):
total = 0
items = []
while True:
user_number = input("Enter an integer to add to the total or \"Q\" to quit: ")
#You used "report.upper" instead of "report.upper()"
if report.upper() == "A":
if user_number.isdigit():
total += int(user_number)
items.append(user_number)
elif user_number.upper() == "Q":
break
else:
print("Invalid input\n")
elif report.upper() == "T":
if user_number.isdigit():
total += int(user_number)
#You forgot ot add this : "items.append(user_number)"
items.append(user_number)
elif user_number.upper() == "Q":
break
else:
print("Invalid input\n")
break
#Add this for loop termination: "or 0 to quit: "
report = input("Report types include All Items (\"A\") or Total Only (\"T\")\nPlease select report type \"A\" or \"T\" Or 0 to quit: ")
while True:
#it should be this ""if report.upper() in "A" or "T":"" not this ""if report.upper() in "A T":""
if report.upper() in "A" or "T":
adding_report(report)
#The condition below terminates the program
elif report == '0':
break
else:
print("Invalid input")
report = input("Please select report type \"A\" or \"T\": ")