Цикл 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\": ")
Другие вопросы по тегам