打破循环?

时间:2014-10-29 01:42:50

标签: python loops

我在打破这些循环方面遇到了一些麻烦:

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位数长,它也会返回到程序的开头而不是继续到下一段代码,而不是这里。

3 个答案:

答案 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!")