我目前正在编写一个在Python3中播放Connect Four的函数。我在很大程度上取得了很好的进步,但在两名球员之间交替出现了问题。
我尝试做的是运行一个功能,将芯片放在适当的位置,作为当前播放器的函数,播放(curr)。所以我想说的是,虽然没有平局,虽然没有赢家,但比赛将继续并在两位球员之间交替进行。
如果是玩家1轮,curr=1
,如果是玩家2轮,curr=2
。
我目前的代码不起作用,因为如果没有平局或没有赢家,我不会允许我在每次转弯后在玩家之间切换。我的逻辑是,如果curr=1
最初是1,那么我必须在第一次移动后设置curr=2
。然后,当curr=2
时,我必须将curr等于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))
有人可以解释为什么这段代码不起作用以及可以采取哪些措施来修复它?
答案 0 :(得分:2)
curr==2
是一个比较。你可能想要curr=2
。第二个if
应为elif
。
答案 1 :(得分: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
答案 2 :(得分:1)
如果checkforwinner
和checkfortie
是函数,则需要在它们后面加括号:
while checkforwinner()==False and checkfortie()==False:
另外,正如@jspcal指出的那样,你想要用一个'='分配值,并且只使用'=='进行布尔比较。