用变量打破循环 - Python

Mad*_*ham 2 python loops tuples break

我想以更紧凑的形式编写循环.当我有这种形式的代码时,一切正常:

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")
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用这种形式的代码时,我的循环不会中断:

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")
Run Code Online (Sandbox Code Playgroud)

为什么我的循环在第二种情况下不会破坏nastede[]内部y

更改后(所有代码):

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")
Run Code Online (Sandbox Code Playgroud)

Net*_*ave 5

你的条件y=(nastede[1] and nastede[2] and nastede[3])将绑定yTrue,除非XTrue也不会被评估为你期待.

更好的使用all结合map:

...
if all(map(lambda x: x == X, nestede))
...
Run Code Online (Sandbox Code Playgroud)

这里有一个最小的例子

编辑:既然all检查这些代码会失败,因为你只从索引查询13,对于使用slice:

...
if all(map(lambda x: x == X, nestede[1:4]))
...
Run Code Online (Sandbox Code Playgroud)

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