繁体   English   中英

虽然循环不会中断?

[英]While Loop Won't Break?

这只是学校的一个快速小代码任务,但我一直在测试和更改条件的所有可能方式,但没有任何效果。 while 循环只是继续运行超过 9 圈,这是它不应该做的。 这是一个如此简单的 while 循环,但它并没有中断,这让我很困惑。 我可能超级笨,但请帮忙。

def main():
    turns=0
    while turns<9:
        print("Turns:",turns)
        print_grid()
        p1()
        turns+=1
        print("Turns:",turns)
        print_grid()
        p2()
        turns+=1
    print("done")
main()

显然有不必要的打印语句,它们只是我用来检查转弯以确保我没有愚蠢的那些。 这是我可以告诉它继续循环直到轮数等于 9 的最基本的方法,当代码运行时,它在 IDLE 中直接告诉我 - “轮数:9”,这只会进一步激怒我。 由于其余代码不允许进一步输入,我无法输入超过 9。

缺少一个函数print_grid但从你的描述中我认为你需要的是这个

def main():
    turns=0
    while turns<9:
        print("Turns:",turns)
        turns+=1 # to iterate and print turns, it should be after **print**
    print("done")
main()

输出

Turns: 0
Turns: 1
Turns: 2
Turns: 3
Turns: 4
Turns: 5
Turns: 6
Turns: 7
Turns: 8
done

仅在每次迭代运行之前检查while循环的条件。 如果在循环中间的某个点turns大于9 ,则循环不会在迭代中途中断。 如果您希望它在中间break ,则需要手动检查:

while turns<9:
    print("Turns:",turns)
    print_grid()
    p1()
    turns+=1
    if turns >= 9:  # Check here
        break
    print("Turns:",turns)
    print_grid()
    p2()
    turns+=1

不过这很乱。 该循环的大部分内容都是重复的。 唯一改变的是对p1p2的调用。 我只是在两个函数之间切换,然后从一段while更改为range

func = p1
for turn in range(9):
    print("Turns:", turn)
    print_grid()
    func()  # Call p1 or p2 depending

    if func is p1:  # Toggle
        func = p2
    else:
        func = p1

结束部分也可以更改为:

func = p2 if func is p1 else p1

您可能应该将该while循环转换为for循环,因为它更适合您的用例,但让我解释一下无论如何会发生什么。

在循环过程中,循环开始后增加turns ,所以它会上升到 9,然后中断。 你可以做些什么来解决这个问题是将代码从while turns < 9更改为while turns != 8或引入 if 语句

if turns == 8:
    break

再说一次,我建议您将其更改为for循环:

def main():
    turns=0
    for _ in range(8):
        print("Turns:",turns)
        print_grid()
        p1()
        turns+=1
        print("Turns:",turns)
        print_grid()
        p2()
        turns+=1
    print("done")
main()

编辑:就像@CYREX 所说的,你也应该在打印之前而不是之后增加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM