Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tic Tac脚趾/零和交叉-游戏最终结果打印两次_Python_Python 3.x - Fatal编程技术网

Python Tic Tac脚趾/零和交叉-游戏最终结果打印两次

Python Tic Tac脚趾/零和交叉-游戏最终结果打印两次,python,python-3.x,Python,Python 3.x,这是我尝试制作的第一个程序。这是一个简单的零和十字架游戏。它是用Python 3.6编写的 我已经测试过了,当比赛结束时,平局/胜利信息会被打印两次,但我不明白为什么 任何关于这方面或任何其他改进的帮助都将不胜感激。非常感谢 我只包含了玩家1的代码,所以我可以发布问题 #Grid grid = [0, 1, 2, 3, 4, 5, 6, 7, 8] print("Welcome to Noughts and Crosses Game") p1_name = input("What is name

这是我尝试制作的第一个程序。这是一个简单的零和十字架游戏。它是用Python 3.6编写的

我已经测试过了,当比赛结束时,平局/胜利信息会被打印两次,但我不明白为什么

任何关于这方面或任何其他改进的帮助都将不胜感激。非常感谢

我只包含了玩家1的代码,所以我可以发布问题

#Grid
grid = [0, 1, 2, 3, 4, 5, 6, 7, 8]
print("Welcome to Noughts and Crosses Game")
p1_name = input("What is name of Player 1? Player 1 is 'x': ")

#Draw Grid
def draw_grid():
    print("-------------")
    print('|', grid[0], '|', grid[1], '|', grid[2], '|')
    print("-------------")
    print('|', grid[3], '|', grid[4], '|', grid[5], '|')
    print("-------------")
    print('|', grid[6], '|', grid[7], '|', grid[8], '|')
    print("-------------")

#Move input for player 1 
def p1():
        try:
            p1_input = int(input(p1_name + " select a space on the grid by entering a \
number to place an 'x': "))
        except ValueError:
            print("Error: Please enter a number, not a letter or symbol")
            p1()
        else:
            if p1_input not in range(9):
                print("Error: Please select a number on the grid 0-8 to place an 'x'")
                p1()
            elif grid[p1_input] == "x" or grid[p1_input] == "o":
                print("Error: This spot has been taken.")
                p1()
            else:
                grid[p1_input] = "x"
                draw_grid()

#Check for three x in a row
def p1_check():
    if grid[0] == "x" and grid[1] == "x" and grid[2] == "x" or \
        grid[3] == "x" and grid[4] == "x" and grid[5] == "x" or \
        grid[6] == "x" and grid[7] == "x" and grid[8] == "x" or \
        grid[0] == "x" and grid[3] == "x" and grid[6] == "x" or \
        grid[1] == "x" and grid[4] == "x" and grid[7] == "x" or \
        grid[2] == "x" and grid[5] == "x" and grid[8] == "x" or \
        grid[6] == "x" and grid[4] == "x" and grid[2] == "x" or \
        grid[0] == "x" and grid[4] == "x" and grid[8] == "x":
            print(p1_name + " Wins!")
            return "End Game"      

#Check for a tie
def tie_check():
    if grid.count("x") + grid.count("o") == len(grid):
        print("Game is a tie")
        return "End Game"

def play():
    draw_grid()
    while True:
        p1()
        p1_check()
        if p1_check() == "End Game":
            break
        tie_check()
        if tie_check() == "End Game":
            break

play()
您正在运行p1_check()和tie_check()两次。将p1_check()和tie_check()的输出存储在变量中,以避免重复打印

    ended = p1_check()
    if ended == "End Game":
        break
    tied = tie_check()
    if tied == "End Game":
        break

因为p1_检查和tie_检查执行两次。 在if语句之前一次,然后在if语句中再次


我建议在if语句之前删除调用,把它放在一边:下面是一个绘制网格的好方法:
    ended = p1_check()
    if ended == "End Game":
        break
    tied = tie_check()
    if tied == "End Game":
        break