我看了其他答案,但它们似乎对我不起作用,或者我可能只是做错了什么,或者不理解在这个代码的上下文中我应该做什么.在第78行,它讨论了如何存在非类型值,即使我为这两个变量分配了一个值.

下面是一个类似问题的链接(我认为):

我认为错误代码就在这里:

def check_win(turn, gamestate):
    if turn == 1:
        if gamestate[0] == gamestate[1] == gamestate[2] != '-' or gamestate[3] == gamestate[4] == gamestate[5] != '-' or gamestate[6] == gamestate[7] == gamestate[8] != '-':
            winner = 1
            win = True
            return winner, win
        elif gamestate[0] == gamestate[3] == gamestate[6] != '-' or gamestate[1] == gamestate[4] == gamestate[7] != '-' or gamestate[2] == gamestate[5] == gamestate[8] != '-':
            winner = 1
            win = True
            return winner, win
        elif gamestate[0] == gamestate[4] == gamestate[8] != '-' or gamestate[2] == gamestate[4] == gamestate[6] != '-':
            winner = 1
            win = True
            return winner, win
    elif turn == 2:
        if gamestate[0] == gamestate[1] == gamestate[2] or gamestate[3] == gamestate[4] == gamestate[5] or gamestate[6] == gamestate[7] == gamestate[8]:
            winner = 2
            win = True
            return winner, win
        elif gamestate[0] == gamestate[3] == gamestate[6] or gamestate[1] == gamestate[4] == gamestate[7] or gamestate[2] == gamestate[5] == gamestate[8]:
            winner = 2
            win = True
            return winner, win
        elif gamestate[0] == gamestate[4] == gamestate[8] or gamestate[2] == gamestate[4] == gamestate[6]:
            winner = 2
            win = True
            return winner, win
    else:
        winner = 'None' 
        win = False
        return winner, win

稍后,当我try 在另一个函数中更改这些值时:

winner, win = check_win(turn, gamestate) <--- Where error was found

以下是完整的代码:

print('Tic Tac Toe:')
pos = 0
turn = 1
gamestate = ['-', '-', '-', '-', '-', '-', '-', '-', '-']

def display_board(gamestate):
    print(gamestate[0:3])
    print(gamestate[3:6])
    print(gamestate[6:9])
def move_validity(pos, gamestate):
    if str(gamestate[int(pos)]) != '-':
        print('Invalid move.')
        valid = False
        return valid
    else:
        valid = True
        return valid
def update(gamestate, pos):
        if turn == 1:
            gamestate[int(pos)] = 'X'
        if turn == 2:
            gamestate[int(pos)] = 'O'
        else:
            print('ERROR')
def check_win(turn, gamestate):
    if turn == 1:
        if gamestate[0] == gamestate[1] == gamestate[2] != '-' or gamestate[3] == gamestate[4] == gamestate[5] != '-' or gamestate[6] == gamestate[7] == gamestate[8] != '-':
            winner = 1
            win = True
            return winner, win
        elif gamestate[0] == gamestate[3] == gamestate[6] != '-' or gamestate[1] == gamestate[4] == gamestate[7] != '-' or gamestate[2] == gamestate[5] == gamestate[8] != '-':
            winner = 1
            win = True
            return winner, win
        elif gamestate[0] == gamestate[4] == gamestate[8] != '-' or gamestate[2] == gamestate[4] == gamestate[6] != '-':
            winner = 1
            win = True
            return winner, win
    elif turn == 2:
        if gamestate[0] == gamestate[1] == gamestate[2] or gamestate[3] == gamestate[4] == gamestate[5] or gamestate[6] == gamestate[7] == gamestate[8]:
            winner = 2
            win = True
            return winner, win
        elif gamestate[0] == gamestate[3] == gamestate[6] or gamestate[1] == gamestate[4] == gamestate[7] or gamestate[2] == gamestate[5] == gamestate[8]:
            winner = 2
            win = True
            return winner, win
        elif gamestate[0] == gamestate[4] == gamestate[8] or gamestate[2] == gamestate[4] == gamestate[6]:
            winner = 2
            win = True
            return winner, win
    else:
        winner = 'None'
        win = False
        return winner, win
def restart():
    gamestate = ['-', '-', '-', '-', '-', '-', '-', '-', '-']
    turn = 1
    win = False
    return gamestate, turn, win
def choose_position():
    pos = input('Player ' + str(turn) + ': ')
    if int(pos) < 0 or int(pos) > 8:
        print('Invalid move')
    else:
        return pos
def Tic_Tac_Toe():
    while True:
        global pos
        global turn
        if turn == 1:
            pos = choose_position()
            valid = move_validity(pos, gamestate)
            if valid == True:
                update(gamestate, pos)
            if valid == False:
                break
            winner, win = check_win(turn, gamestate)
            if win == True:
                print(str(winner) + ' wins!')
                break
            if '-' not in gamestate:
                print('Tie game.')
                break
        if turn == 2:
            pos = choose_position()
            if move_validity(pos, gamestate) == True:
                continue
            if move_validity(pos, gamestate) == False:
                break
            update(gamestate, pos)
            winner, win = check_win(turn, gamestate)
            if win == True:
                print(str(winner) + ' wins!')
                break
            turn = 1
            if '-' not in gamestate:
                print('Tie game.')
                break

        display_board(gamestate)
display_board(gamestate)
Tic_Tac_Toe()
restart_case = input('y/n Would you like to play? ')
if restart_case == 'y':
    gameboard, turn, win = restart()

非常感谢,如果这个解决方案是一个小的拼写错误,那么很抱歉,我对这个问题真的很陌生,在这个问题上花了太多时间D

推荐答案

在某些情况下,您不会在函数check_win中返回任何内容.

例如,当turn == 1时,其中有一个ifelifelif块,但else没有.因此,当turn == 1时,如果该块中的if条语句中没有一条是真的,则函数将不返回任何结果.turn == 2也有类似的问题.您可能希望将该函数的else块中的代码添加为turn == 1turn == 2else块,因为这将解决您的问题.

Python相关问答推荐

如何根据日期和时间将状态更新为已过期或活动?

Pythind 11无法弄清楚如何访问tuple元素

具有多个选项的计数_匹配

try 在树叶 map 上应用覆盖磁贴

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

在Python中动态计算范围

为什么抓取的HTML与浏览器判断的元素不同?

Pandas—在数据透视表中占总数的百分比

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

如何从需要点击/切换的网页中提取表格?

如何在达到end_time时自动将状态字段从1更改为0

* 动态地 * 修饰Python中的递归函数

处理具有多个独立头的CSV文件

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

如何在Python中使用Iscolc迭代器实现观察者模式?

数据框,如果值在范围内,则获取范围和

如何在Python中将超链接添加到PDF中每个页面的顶部?

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

比较两个有条件的数据帧并删除所有不合格的数据帧

在round函数中使用列值