提问人:EM284 提问时间:10/29/2023 最后编辑:John GordonEM284 更新时间:10/30/2023 访问量:54
循环内循环 [重复]
Looping inside a loop [duplicate]
问:
我正在练习我的 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.")
答:
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 True
while flag:
while flag:
0赞
EM284
10/30/2023
啊,我明白了。我没有意识到我有三个嵌套循环,但这很有意义,为什么它不起作用。非常感谢,新的更改现在可以工作了!
评论
break
仅停止最近的周围环路。它不会停止每个循环。return