循环内循环 [重复]

Looping inside a loop [duplicate]

提问人:EM284 提问时间:10/29/2023 最后编辑:John GordonEM284 更新时间:10/30/2023 访问量:54

问:

我正在练习我的 while 循环和一般循环技能,遇到了一个让我感到困惑的问题。

我正在尝试编写一个程序,根据用户的年龄给出电影票的价格。外部循环和第一个输入语句处理年龄与价格部分。在用户输入他们的年龄并返回第一个输入的价格后,在外部循环中,系统会使用内部循环中的第二个输入询问他们是否有其他人参加。如果用户回答“否”,我预计整个程序都会中断。如果用户的回答是肯定的,我预计只有内部循环中断,第一个循环再次启动。如果用户输入除“否”或“是”以外的任何内容,我希望内部循环再次启动。

问题出在我输入“no”时内部循环中的第二个输入语句中。我希望整个程序会像“否”一样中断,但是,只有内部循环中断,重新启动第一个循环。

while True:
    
    age = input("Enter your age and the price of the movie will be displayed: ")
    if age == 'quit':
        break
    elif int(age) < 3:
        print("You're ticket price today is free.")
       
    elif int(age) < 12:
        print("You're ticket price today is $10. ")
    elif int(age) <= 150:
        print("You're ticket price today is $15")
    elif int(age) > 150:
        print("You've entered an invalid input. Please enter a valid age or type 'quit' to exit.")
    else:
        print("You've entered an invalid input. Please enter a valid age or type 'quit' to exit.")
        
    while True:
        repeat = input("Do you have someone else who's attending this movie? (yes/no): ")
        if repeat.lower() == 'no':
            break
        elif repeat.lower() == 'yes':
            break
        else:
            print("You've entered an invalid input. Please enter 'yes' to add someone or 'no' to quit.")

##Update 2

flag = True
while flag:   

  
    while True:
        
        age = input("Enter your age and the price of the movie will be displayed: ")
        if age == 'quit':
            break
        elif int(age) < 3:
            print("You're ticket price today is free.")
           
        elif int(age) < 12:
            print("You're ticket price today is $10. ")
        elif int(age) <= 150:
            print("You're ticket price today is $15")
        elif int(age) > 150:
            print("You've entered an invalid input. Please enter a valid age or type 'quit' to exit.")
        else:
            print("You've entered an invalid input. Please enter a valid age or type 'quit' to exit.")
        
        
        while True:
            repeat = input("Do you have someone else who's attending this movie? (yes/no): ")
            if repeat.lower() == 'no':
                flag = False 
                break
            elif repeat.lower() == 'yes':
                break
            else:
                print("You've entered an invalid input. Please enter 'yes' to add someone or 'no' to quit.")
python 循环 while-loop

评论

0赞 roganjosh 10/29/2023
没有外循环
0赞 John Gordon 10/29/2023
修复代码缩进,以便实际显示外部循环。目前,它位于代码上方,包含在问题文本中。
0赞 John Gordon 10/29/2023
break仅停止最近的周围环路。它不会停止每个循环。
0赞 John Bayko 10/29/2023
如果可以将循环移动到函数,则可以使用 a 作为内部循环的中断。return

答:

0赞 John Gordon 10/29/2023 #1

使用标志变量作为最外层的 while 条件,而不是 .while True

flag = True
while flag:
    # do stuff
    while True:
        # do stuff
        if somecondition:
            # set flag=False so the outer loop will stop
            flag = False
            break

评论

0赞 EM284 10/30/2023
不幸的是,这也没有奏效。当我编辑代码时,flag = false 后面的中断会导致整个程序重新启动。当我只有 flag = false 而没有中断时,我能够让整个程序不重复。但是,它只是不断重复第二个输入。
0赞 John Gordon 10/30/2023
@EM284“导致整个程序重新启动” 这听起来像是您的代码有一些额外的外部循环或函数调用,您没有向我们展示。
0赞 EM284 10/30/2023
请参阅原始帖子中的##Update 2,了解我所做的更改。我还是stackoverflow的新手,所以请原谅我无法在代码中放置Update 2注释,标志= True块和while标志:块。
0赞 John Gordon 10/30/2023
@EM284 您应该将现有的最外层循环更改为 ,而不是添加为全新的最外层循环。因为现在你有三个嵌套循环,而不是两个。while Truewhile flag:while flag:
0赞 EM284 10/30/2023
啊,我明白了。我没有意识到我有三个嵌套循环,但这很有意义,为什么它不起作用。非常感谢,新的更改现在可以工作了!