我在打破这些循环方面遇到了一些麻烦:
done = False
while not done:
while True:
print("Hello driver. You are travelling at 100km/h. Please enter the current time:")
starttime = input("")
try:
stime = int(starttime)
break
except ValueError:
print("Please enter a number!")
x = len(starttime)
while True:
if x < 4:
print("Your input time is smaller than 4-digits. Please enter a proper time.")
break
if x > 4:
print("Your input time is greater than 4-digits. Please enter a proper time.")
break
else:
break
它识别该数字是否&lt; 4或&gt; 4但是即使输入的数字是4位数长,它也会返回到程序的开头而不是继续到下一段代码,而不是这里。
答案 0 :(得分:0)
它“返回到程序开头”的原因是因为你在while循环中嵌套了while循环。 break语句非常简单:它结束程序当前正在执行的(for或while)循环。这与特定循环范围之外的任何内容无关。在嵌套循环中调用break将不可避免地在同一点上结束。
如果您想要的是在任何特定的代码块中结束所有执行,无论您嵌套的深度(以及您遇到的是深层嵌套代码问题的症状),您应该移动将该代码转换为单独的函数。此时,您可以使用return来结束整个方法。
以下是一个例子:
def breakNestedWhile():
while (True):
while (True):
print("This only prints once.")
return
所有这一切都是次要的事实,你没有真正的理由让你按照你上面的方式做事 - 嵌套while循环几乎不是一个好主意,你有两个while循环具有相同的条件,似乎没有意义,你有一个布尔标志,完成,你从来不打扰使用。如果你实际上在嵌套的while中将done设置为True,那么在你中断后父while循环将不会执行。
答案 1 :(得分:0)
您显然希望将变量done
用作标志。所以你必须在最后一次休息之前(当你完成时)设置它。
...
else:
done = 1
break
答案 2 :(得分:0)
input()
可以使用可选的提示字符串。我试图在这里清理一下流程,我希望它有助于作为参考。
x = 0
print("Hello driver. You are travelling at 100km/h.")
while x != 4:
starttime = input("Please enter the current time: ")
try:
stime = int(starttime)
x = len(starttime)
if x != 4:
print("You input ({}) digits, 4-digits are required. Please enter a proper time.".format(x))
except ValueError:
print("Please enter a number!")