Python while循环混乱

时间:2020-08-18 15:56:37

标签: python python-3.x

即使输入为0,为什么while循环执行try套件? 我认为根据文档,中断应该是即时的吗?

level = 1

while level != 0:
    level = int(input("Enter level (1, 2, 3)\n")) % 4

    try:
        g = ply.level_high(level)
        print("Player with highest level", level, "score is", g[0][0], "with", g[0][level])
    except:
        print("Invalid level")

4 个答案:

答案 0 :(得分:2)

while循环开始后,您将收到输入。因此,即使输入为0,循环的其余部分也将执行。

答案 1 :(得分:1)

在每次迭代开始时检查while循环的条件。因此,发生的情况是该级别仅在之后被检查为0,并且不会立即退出。 事件的顺序:

level is set to 1
while loop entered
    start of first iteration: exit if level is not 0
    set level to (0 in this case)
    do your try-except

您可以看到,检查while条件时,级别不为0,因此仍然执行第一次迭代。

解决此问题的好方法显示在https://wiki.python.org/moin/WhileLoop

在这种情况下,您可以

level = 1

while True: #exiting of the loop is handled with the break
    level = int(input("Enter level (1, 2, 3)\n")) % 4
    if level==0: #the loop condition is inverted and moved here
        break
    try:
        g = ply.level_high(level)
        print("Player with highest level", level, "score is", g[0][0], "with", g[0][level])
    except:
        print("Invalid level")

答案 2 :(得分:1)

如果仅在用户未输入0时才执行try块,则在while循环之外需要try块:

级别= 1

git pull

尽管裸身除外不是一个好习惯-您确实需要能够准确地确定您感兴趣的异常。

答案 3 :(得分:0)

排序!!!谢谢你们!很大的帮助。

level = 1

while True:
    try:
        level = int(input("Enter level (1, 2, 3)\n"))
        if level == 0:
            break
        g = ply.level_high(level)
        print("Player with highest level", level, "score is", g[0][0], "with", g[0][level])
    except ValueError:
        print("Invalid value")
    except IndexError:
        print("Invalid level")
相关问题