Python 在“连接四条蟒蛇”游戏中的玩家之间交替
我目前正在编写一个函数来在Python3中播放connectfour。我在很多方面都取得了很好的进步,但是我在两名球员之间的轮换上遇到了困难 我想做的是运行一个函数,将芯片放置在适当的位置,作为当前玩家playturn(curr)的函数。所以我想说的是,虽然没有平局,也没有赢家,但这场比赛将继续下去,两名球员交替进行 如果轮到玩家1,Python 在“连接四条蟒蛇”游戏中的玩家之间交替,python,python-3.x,Python,Python 3.x,我目前正在编写一个函数来在Python3中播放connectfour。我在很多方面都取得了很好的进步,但是我在两名球员之间的轮换上遇到了困难 我想做的是运行一个函数,将芯片放置在适当的位置,作为当前玩家playturn(curr)的函数。所以我想说的是,虽然没有平局,也没有赢家,但这场比赛将继续下去,两名球员交替进行 如果轮到玩家1,curr=1,如果轮到玩家2,curr=2 我目前的代码不起作用,因为它不允许我在没有平局或没有赢家的情况下,在每个回合后在玩家之间切换。我的逻辑是,如果curr=
curr=1
,如果轮到玩家2,curr=2
我目前的代码不起作用,因为它不允许我在没有平局或没有赢家的情况下,在每个回合后在玩家之间切换。我的逻辑是,如果curr=1
最初是1,那么我必须在第一次移动后设置curr=2
。然后,当curr=2时,我必须将curr equal切换回1。在下面的代码中,checkforwinner
和checkfortie
是两个函数,如果没有赢家和平局,它们将返回Falseplayturn(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
应该是elifcurr==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
,但问题仍然存在。