Python 我想在两个玩家之间交替进行一场井字游戏。为什么赢了';这个代码不起作用吗?
为什么这个代码不起作用?如果这不是最佳解决方案,请解释为什么这不起作用,以及最佳解决方案是什么。这是我的第一场比赛Python 我想在两个玩家之间交替进行一场井字游戏。为什么赢了';这个代码不起作用吗?,python,tic-tac-toe,Python,Tic Tac Toe,为什么这个代码不起作用?如果这不是最佳解决方案,请解释为什么这不起作用,以及最佳解决方案是什么。这是我的第一场比赛 def players(): marks = 'o', 'x' player1 = None player2 = None mark = input("Who are you? ").lower() if mark == 'o': player1 = 'o' player2 = 'x' else:
def players():
marks = 'o', 'x'
player1 = None
player2 = None
mark = input("Who are you? ").lower()
if mark == 'o':
player1 = 'o'
player2 = 'x'
else:
player1 = 'x'
player2 = 'o'
for i in range(21):
if player1 == True:
print(player1)
player1 = False
else:
print(player2)
player1 = True
代码的范围(21)行只是为了测试它是否有效。事实并非如此。当我输入“x”时,它只会一次又一次地返回“o”,然后返回True。我希望它一遍又一遍地说“x”和“o”。您正在将
player1
改写为True
或False
,这就是为什么您没有看到打印的'x'
您应该添加第三个变量来存储轮到谁玩。尝试使用一个简单的布尔变量是可以的,但让我向您展示一种方法,通过在一个玩家列表上循环,可以轻松扩展到具有多个玩家的游戏
还请注意,函数的前三行未使用,因此可以删除它们
def players():
mark = input("Who are you? ").lower()
if mark == 'o':
player1 = 'o'
player2 = 'x'
else:
player1 = 'x'
player2 = 'o'
# We keep both a list of players and the index of the next to play
players = [player1, player2]
turn = 0
for i in range(21):
print(players[turn])
# The modulo operator allows us to cycle over our list
turn = (turn + 1) % len(players)
players()
这是我截断的输出,因为我们在几行之后得到了这个想法
Who are you? x
x
o
x
o
...
您正在用循环中的
True
覆盖player1
(其中存储字母“x”)。您需要使用不同的变量。您希望for循环最终做什么?如果你需要检查轮到谁了,我会用另一个字段。例如,您可以使用playernsturn=player1=='o'
初始化,然后使用if循环<代码>如果播放者是斯图恩:#做点什么;在每个步骤中,设置playerOnesTurn=not playerOnesTurn
,以便玩家切换。我还建议使用长度为9的数组来存储tic-tac趾板的状态。(0-2是第一行,3-5是第二行,6-8是最后一行),因为您最终需要一些容器来获取这些信息