簡體   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