在一个连接四个Python游戏玩家之间交替

2024-09-23 22:26:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个函数来在Python3中播放connect4。我已经进步了很多,但在两个球员之间的交替出现了问题。在

我要做的是运行一个函数,将一个芯片作为当前播放器playturn(curr)的函数放在适当的位置。所以我想说的是,虽然没有平局,也没有赢家,但比赛将继续,在两名球员之间交替进行。在

如果轮到玩家1,curr=1,如果轮到玩家2,curr=2。在

我现在的代码不起作用,因为如果没有平局或者没有赢家的话,它将不允许我在每回合之后在玩家之间切换。我的逻辑是,如果curr=1最初是1,那么我必须在第一次移动之后设置curr=2。然后,当curr=2时,我必须将curr equal切换回1。在下面的代码中,checkforwinnercheckfortie是两个函数,如果没有赢家,如果没有平局,则返回False。playturn(curr)将根据Player1或Player2选择的列将芯片放入正确的列中。在

curr=1
while checkforwinner==False and checkfortie==False:
    if curr==1:
        curr==2
        print(playturn(curr))
    if curr==2:
        curr==1
        print(playturn(curr))

有人能解释一下为什么这段代码不起作用,以及可以做些什么来修复它吗?在


Tags: 函数代码falseif玩家芯片python3print
3条回答

有几种方法可以让它变得更好!在

要使原始代码正常工作,应该使用jspcal的建议将比较运算符(==)转换为赋值运算符(=)。在

您还需要使用一个elif进行第二次比较,否则每个循环将切换播放器两次。在

curr=1
while not (checkforwinner() or checkfortie()):
    if curr==1:
        curr=2
        print(playturn(curr))
    elif curr==2:
        curr=1
        print(playturn(curr))

您也可以稍微清理一下代码:

^{pr2}$

最后一个版本可能是最短的,但有点难读:

while not (checkforwinner() or checkfortie()):
    print(playerturn(curr))
    curr = 1 if curr == 2 else 2

curr==2是一个比较。你可能想要curr=2。第二个if应该是elif。在

如果checkforwinnercheckfortie是函数,则需要在它们后面加上括号:

while checkforwinner()==False and checkfortie()==False:

另外,正如@jspcal所指出的,您希望用一个“=”来赋值,并且只使用“==”进行布尔比较。在

相关问题 更多 >