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是最后一行),因为您最终需要一些容器来获取这些信息