使用变量Python中断循环

2024-05-18 05:12:24 发布

您现在位置: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")

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

^{pr2}$

为什么在第二种情况下我的循环不会在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")

Tags: and代码gamemoveifglobal形式over
3条回答

(nastede[1]==X) and (nastede[2]==X) and (nastede[3]==X)和{}不相同。在第一个语句中,每个值都需要等于X才能得到真实值。但是在第二段代码中,如果所有值都是真实的,即使它们不等于X,那么表达式将返回True。在

您的条件y=(nastede[1] and nastede[2] and nastede[3])将把y绑定到True,除非X是{},否则它也不会像您预期的那样进行计算。在

最好将^{}map结合使用:

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

这里有一个minimal example

编辑: 由于all检查,所有这些代码都将失败,因为您只检查从索引1到{},因此使用slice

^{pr2}$

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

也更好:

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

相关问题 更多 >