簡體   English   中英

用變量打破循環 - Python

[英]Break loop with variable - Python

我想以更緊湊的形式編寫循環。 當我有這種形式的代碼時,一切正常:

a=-1
while a <0:
    user_move()
    if (nastede[1]==X) and (nastede[2]==X) and (nastede[3]==X):
        print("Game Over")
        break

print("END")

但是當我嘗試使用這種形式的代碼時,我的循環不會中斷:

y=(nastede[1] and nastede[2] and nastede[3])

a=-1
while a <0:
    user_move()
    if y == X:
        print("Game Over")
        break

print("END")

為什么我的循環在第二種情況下不會與y nastede[]打破?

更改后(所有代碼):

nastede=[" ", " ", " ", " ", " ", " ", " ", " ", " "]
X="X"

def list_global():
    global nastede
    print(" ",nastede[0],"| ",nastede[1]," | ",nastede[2]," ")
    print("---------------")
    print(" ",nastede[3],"| ",nastede[4]," | ",nastede[5]," ")
    print("---------------")
    print(" ",nastede[6],"| ",nastede[7]," | ",nastede[8]," ")

def user_move():
    a=-1
    while a<0:
        move_hum=int(input("Write a number from 1 to 8 ?\n"))
        if (nastede[move_hum] != X) and (nastede[move_hum] != O):
            nastede[move_hum] = "X"
            list_global()
            break
        else:
            print("Write different number")


a=-1
while a <0:
    user_move()
    if all(map(lambda x: x == X, nastede)):
        print("Game Over")
        break

print("END")

您的條件y=(nastede[1] and nastede[2] and nastede[3])y綁定到True ,除非XTrue ,否則將無法按照您的預期進行評估。

更好地使用all結合map

...
if all(map(lambda x: x == X, nestede))
...

這里有一個最小的例子

編輯 :由於all檢查所有這些代碼都會失敗,因為您只檢查索引13 ,為此使用slice

...
if all(map(lambda x: x == X, nestede[1:4]))
...

記住python切片不是尾部包含[x,y)

(nastede[1]==X) and (nastede[2]==X) and (nastede[3]==X)(nastede[1] and nastede[2] and nastede[3])不相同。 在第一個語句中,每個值都需要等於X才能獲得真值。 但是在第二個代碼中,如果所有值都是真的,即使它們不等於X那么表達式將返回True

還好:

....
if all(i == X for i in nestede):
...
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM