Python 当给定所需输入时,如何结束while循环?

Python 当给定所需输入时,如何结束while循环?,python,while-loop,Python,While Loop,我的程序从用户那里获取他们想要添加的内容。这很好,但问题出现在嵌套while循环中,如果用户希望添加更多项,它会提示用户(y/n)。我希望y从开始开始启动循环,n退出循环并继续程序,任何其他输入在重新启动y/n提示符时给出错误。 我似乎不知道如何退出嵌套的while循环,也不知道如果输入既不是y也不是n,如何抛出错误。我该如何着手解决这个问题 elif user_input == "a": while True: try: ad

我的程序从用户那里获取他们想要添加的内容。这很好,但问题出现在嵌套while循环中,如果用户希望添加更多项,它会提示用户(y/n)。我希望y从开始开始启动循环,n退出循环并继续程序,任何其他输入在重新启动y/n提示符时给出错误。 我似乎不知道如何退出嵌套的while循环,也不知道如果输入既不是y也不是n,如何抛出错误。我该如何着手解决这个问题

elif user_input == "a":
    while True:
        try:
            add_item = input("What item would you like to add? ").lower()
            if not re.match("^[a-z, A-Z]*$", add_item):
                print("ERROR: Only letters A-Z are allowed!")
                continue
            elif len(add_item) < 1 or len(add_item) > 20:
                print("Item name is too long, only a maximum of 20 characters are allowed!")
                continue
            else:
                item_amount = int(input("How many of these would you like to add? "))
                shopping_list[add_item] = item_amount
                print(f"{item_amount}x {add_item.title()} added to the shopping list.\n")
            while True:
                try:
                    add_more = input("Would you like to add more items? (y/n): ").lower()
                    if add_more == "y":
                        break
                    elif add_more == "n":
                        break
                except TypeError:
                    print("ERROR: Expected y or n in return! Try again!.\n")
                    break
        except ValueError:
            print("\nERROR: Amount must be an integer! Try adding an item again!\n")
elif user\u input==“a”:
尽管如此:
尝试:
add_item=input(“您想添加什么项目?”)。lower()
如果没有重新匹配(“^[a-z,a-z]*$”,则添加项目):
打印(“错误:只允许字母A-Z!”)
持续
elif len(添加项)<1或len(添加项)>20:
打印(“项目名称太长,最多允许20个字符!”)
持续
其他:
item_amount=int(输入(“您想添加多少?”)
购物清单[添加物品]=物品金额
打印(f“{item\u amount}x{add\u item.title()}已添加到购物列表。\n”)
尽管如此:
尝试:
add_more=input(“您想添加更多项目吗?(y/n):”)。lower()
如果add_more==“y”:
打破
elif add_more==“n”:
打破
除类型错误外:
打印(“错误:应返回y或n!重试”。\n”)
打破
除值错误外:
打印(“\n错误:金额必须是整数!请再次尝试添加项目!\n”)
  • 使用布尔变量(
    keep_adding
    表示下面的代码)来决定while循环的终止条件。它将被设置为
    False
    iff
    add_more==“n”

  • 如果用户输入既不是“y”也不是“n”,请使用
    raise TypeError

  • 如果输入无效,您应该从
    中删除
    break
    ,除了TypeError
    ,以便继续询问“是否要添加更多项目?(y/n):”

  • elif user\u input==“a”:
    继续添加=真
    在继续添加的同时:
    尝试:
    add_item=input(“您想添加什么项目?”)。lower()
    如果没有重新匹配(“^[a-z,a-z]*$”,则添加项目):
    打印(“错误:只允许字母A-Z!”)
    持续
    elif len(添加项)<1或len(添加项)>20:
    打印(“项目名称太长,最多允许20个字符!”)
    持续
    其他:
    item_amount=int(输入(“您想添加多少?”)
    购物清单[添加物品]=物品金额
    打印(f“{item\u amount}x{add\u item.title()}已添加到购物列表。\n”)
    尽管如此:
    尝试:
    add_more=input(“您想添加更多项目吗?(y/n):”)。lower()
    如果add_more==“y”:
    打破
    elif add_more==“n”:
    继续添加=False
    打破
    其他:
    提高打字错误
    除类型错误外:
    打印(“错误:应返回y或n!重试”。\n”)
    除值错误外:
    打印(“\n错误:金额必须是整数!请再次尝试添加项目!\n”)
    
  • 使用布尔变量(
    keep_adding
    表示下面的代码)来决定while循环的终止条件。它将被设置为
    False
    iff
    add_more==“n”

  • 如果用户输入既不是“y”也不是“n”,请使用
    raise TypeError

  • 如果输入无效,您应该从
    中删除
    break
    ,除了TypeError
    ,以便继续询问“是否要添加更多项目?(y/n):”

  • elif user\u input==“a”:
    继续添加=真
    在继续添加的同时:
    尝试:
    add_item=input(“您想添加什么项目?”)。lower()
    如果没有重新匹配(“^[a-z,a-z]*$”,则添加项目):
    打印(“错误:只允许字母A-Z!”)
    持续
    elif len(添加项)<1或len(添加项)>20:
    打印(“项目名称太长,最多允许20个字符!”)
    持续
    其他:
    item_amount=int(输入(“您想添加多少?”)
    购物清单[添加物品]=物品金额
    打印(f“{item\u amount}x{add\u item.title()}已添加到购物列表。\n”)
    尽管如此:
    尝试:
    add_more=input(“您想添加更多项目吗?(y/n):”)。lower()
    如果add_more==“y”:
    打破
    elif add_more==“n”:
    继续添加=False
    打破
    其他:
    提高打字错误
    除类型错误外:
    打印(“错误:应返回y或n!重试”。\n”)
    除值错误外:
    打印(“\n错误:金额必须是整数!请再次尝试添加项目!\n”)
    
    您可以将第一个while True替换为while someVar,并在嵌套循环中更改someVar这是否回答了您的问题?您可以将第一个while True替换为while someVar,并在嵌套循环中更改someVar。这是否回答了您的问题?这太完美了,非常感谢你的解释!这太完美了,非常感谢你的解释!
    elif user_input == "a":
        keep_adding = True
        while keep_adding:
            try:
                add_item = input("What item would you like to add? ").lower()
                if not re.match("^[a-z, A-Z]*$", add_item):
                    print("ERROR: Only letters A-Z are allowed!")
                    continue
                elif len(add_item) < 1 or len(add_item) > 20:
                    print("Item name is too long, only a maximum of 20 characters are allowed!")
                    continue
                else:
                    item_amount = int(input("How many of these would you like to add? "))
                    shopping_list[add_item] = item_amount
                    print(f"{item_amount}x {add_item.title()} added to the shopping list.\n")
                while True:
                    try:
                        add_more = input("Would you like to add more items? (y/n): ").lower()
                        if add_more == "y":
                            break
                        elif add_more == "n":
                            keep_adding = False
                            break
                        else:
                            raise TypeError
                    except TypeError:
                        print("ERROR: Expected y or n in return! Try again!.\n")
            except ValueError:
                print("\nERROR: Amount must be an integer! Try adding an item again!\n")