如何在Python的tic-tac-toe游戏中切换两个玩家?

如何在Python的tic-tac-toe游戏中切换两个玩家?,python,turn,Python,Turn,我是Python的初学者,正在尝试创建一个tic-tac-toe游戏。 但我有两个问题。一个问题是我无法切换这两名球员。另一个问题是我无法打印“你赢了!”。我找不出是怎么回事 如果你给我一个提示,我会很高兴的。 提前谢谢你 box = {'1': ' ' , '2': ' ' , '3': ' ' ,'4': ' ' , '5': ' ' , '6': ' ' ,'7': ' ' , '8': ' ' , '9': ' ' } list = [] for i in box: list

我是Python的初学者,正在尝试创建一个tic-tac-toe游戏。 但我有两个问题。一个问题是我无法切换这两名球员。另一个问题是我无法打印“你赢了!”。我找不出是怎么回事

如果你给我一个提示,我会很高兴的。 提前谢谢你

box = {'1': ' ' , '2': ' ' , '3': ' ' ,'4': ' ' , '5': ' ' , '6': ' ' ,'7': ' ' , '8': ' ' , '9': ' ' }

list = []

for i in box:
    list.append(i)

def printbox(box):
    print(box['1'] + box['2'] + box['3'])
    print(box['4'] + box['5'] + box['6'])
    print(box['7'] + box['8'] + box['9'])

#Game setting
def game():

    turn = 'O'
    count = 0

    for i in range(9):
        printbox(box)
        print("Select the number!")

        a = input()

        if box[a] == ' ':
            box[a] = turn
            count += 1
        else:
            print("Pls select another number.")
            continue

        if count >= 8:
            if box['1'] == box['2'] == box['3']:
                printbox(box)
                print("You won!")
                break
            elif box['4'] == box['5'] == box['6']:
                printbox(box)
                print("You won!")
                break
            elif box['7'] == box['8'] == box['9']:
                printbox(box)
                print("You won!")
                break
            elif box['1'] == box['5'] == box['9']:
                printbox(box)
                print("You won!")
                break
            elif box['3'] == box['5'] == box['7']:
                printbox(box)
                print("You won!")
                break
            elif box['1'] == box['4'] == box['7']:
                printbox(box)
                print("You won!")
                break
            elif box['2'] == box['5'] == box['8']:
                printbox(box)
                print("You won!")
                break
            elif box['3'] == box['6'] == box['9']:
                printbox(box)
                print("You won!")
                break

        #in case of tie match.
        if count == 9:
                print("It's a Tie!")

        # Changing the two players.
        if turn =='O':
            turn = 'X'
        else:
            turn = 'O'
 
        game()

if __name__ == "__main__":
    game()


所以我坐下来,让你的程序为我自己工作,并注意到一些问题。所以第一个问题是你要检查

if turn == 'O':
回合不是“O”,而是“0”。您在指定回合时使用了数字0,而不是字母“O”。这种比较从来都不是真的

下一个大问题是你在每一场比赛结束时都称之为“比赛”。因此,游戏(1)正常运行,然后到达末尾并堆栈一个新的game()调用。在这个新的游戏调用中,您将回合设置为“0”,计数设置为0

如果在结束时删除对game()的调用,这将修复堆叠调用问题

最后,在游戏结束时() 更改:

哦,还有最后一件事,如果计数>=8,我会将
更改为
如果计数>=4,并添加
!=“
添加到每个框组合检查中,以避免在一行中有3个空格时“获胜”

编辑:

既然您更新了上面的代码,那么我想指出的是,修复方法是从游戏函数本身内部删除对“game()”的调用,或者减少缩进(因为每次for循环运行时都调用一个新游戏),如果您希望它“再次玩”。你还需要像我建议的那样更改计数>=8检查,或者强制玩家玩至少8回合,即使他们在5回合中获胜(这是可能的)

我刚才在玩脚本的时候注意到了另外两个问题

在第一场比赛中,全局声明框效果良好,但在第二场比赛中,它永远不会重置。将长方体移动到game()函数中,最后

这没用

list = []

for i in box:
    list.append(i)

你的代码没有说你赢了是因为你只在
count>=8
时检查赢的条件。这意味着只有在超过8圈后,它才能进入该块。您可能希望每次都检查这一点,而不是基于某个条件


如果总是检查,实际上会遇到另一个bug,因为字典的起始值总是匹配的。这是因为您只检查值是否相等,而不是它们是否为“O”或“X”。我不会建议如何解决这个问题,因为你正在学习,可能会喜欢这个练习

您可以尝试将turn作为参数传递给
game
函数。您可以在侧边打印框函数中打印(“您赢了”)。切勿将内置关键字用作变量。它损害了功能。谢谢你的评论,@Sujay!我可以解决我的两个问题。谢谢你的快速和友好的答复!在发布我的问题后,我意识到了我的错误,所以我改变了话题○' 到“O”。对不起!!我深入研究了“列表”的部分,它是有效的。所以你是对的。非常感谢。我将
如果计数>=8
修改为
如果计数>=4
,并添加了
!=在每一端插入“”
,以检查酿酒器。但它不起作用…不不不不!!它有效!!!!忘记更换
game()
谢谢,@ladyfile!!!♡o♡/@我很高兴它现在起作用了。很乐意帮忙。谢谢你的推荐!多亏了@ladyfile,我可以解决我的问题。我很高兴。但我明白你说的话。是的,我刚开始学习Python。我会一步一步地继续练习!!
# Changing the two players.
    if turn =='0':
        turn = 'X'
    else:
        turn = '0'
list = []

for i in box:
    list.append(i)