Python 在“连接四条蟒蛇”游戏中的玩家之间交替

Python 在“连接四条蟒蛇”游戏中的玩家之间交替,python,python-3.x,Python,Python 3.x,我目前正在编写一个函数来在Python3中播放connectfour。我在很多方面都取得了很好的进步,但是我在两名球员之间的轮换上遇到了困难 我想做的是运行一个函数,将芯片放置在适当的位置,作为当前玩家playturn(curr)的函数。所以我想说的是,虽然没有平局,也没有赢家,但这场比赛将继续下去,两名球员交替进行 如果轮到玩家1,curr=1,如果轮到玩家2,curr=2 我目前的代码不起作用,因为它不允许我在没有平局或没有赢家的情况下,在每个回合后在玩家之间切换。我的逻辑是,如果curr=

我目前正在编写一个函数来在Python3中播放connectfour。我在很多方面都取得了很好的进步,但是我在两名球员之间的轮换上遇到了困难

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

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

我目前的代码不起作用,因为它不允许我在没有平局或没有赢家的情况下,在每个回合后在玩家之间切换。我的逻辑是,如果
curr=1
最初是1,那么我必须在第一次移动后设置
curr=2
。然后,当curr=2时,我必须将curr equal切换回1。在下面的代码中,
checkforwinner
checkfortie
是两个函数,如果没有赢家和平局,它们将返回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))

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

curr==2
是一个比较。您可能需要
curr=2
。第二个
if
应该是
elif

curr==2
是一个比较。您可能需要
curr=2
。第二个
if
应该是
elif

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

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

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

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

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

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

有几种方法可以使这更精确

要使原始代码正常工作,应使用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))
您还可以稍微清理一下代码:

def switch_player(current_player):
    if current_player == 1:
        return 2
    elif current_player == 2:
        return 1

while not (checkforwinner() or checkfortie()):
    print(playerturn(curr))
    curr = switch_player(curr)
您可能使用的最后一个版本是最短的,但阅读起来有点困难:

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

有两种方法可以让它变得更好

要使原始代码正常工作,应使用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))
您还可以稍微清理一下代码:

def switch_player(current_player):
    if current_player == 1:
        return 2
    elif current_player == 2:
        return 1

while not (checkforwinner() or checkfortie()):
    print(playerturn(curr))
    curr = switch_player(curr)
您可能使用的最后一个版本是最短的,但阅读起来有点困难:

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

仅供参考:宁愿使用
非条件
而不是
条件==False
。@Julien谢谢你让我知道。为什么首选
非条件
的原因是什么?仅供参考:更喜欢使用
非条件
而不是
条件==False
。@Julien谢谢你让我知道。为什么
not condition
是首选的原因是什么?我将第4行和第7行分别更改为
curr=1
curr=2
,但我遇到了相同的问题。Hmmm。我已将
if
更改为
elif
,但问题仍然存在。我将第4行和第7行分别更改为
curr=1
curr=2
,但我遇到了相同的问题。Hmmm。我已将
if
更改为
elif
,但问题仍然存在。