首页 > 解决方案 > Python while 循环未按预期执行

问题描述

我正在努力完成我的任务并且一直在苦苦挣扎。这个想法是您选择报告类型,A 或 T。从那里您输入继续输入整数,直到您退出。一旦你退出,它应该打印出报告'T'相加的整数总数;或者对于报告“A”,它应该打印总数,加上输入的整数列表。

我目前遇到的问题来自报告“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\": ")

标签: pythonwhile-loopnested-if

解决方案


你的第一个问题是在这一行:

    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这样可以节省您每次访问该信件时的麻烦和打电话的时间。

请查看您的代码是否有重复的项目和拼写错误;从长远来看,你会省去头疼的问题——我从个人经验中知道。


推荐阅读