首页 > 解决方案 > 在第 4 , 113 , 130 行制作井字游戏时输入错误

问题描述

我正在尝试制作井字游戏,但出现这些错误,我不知道为什么会出现这些错误。我检查了所有内容,但找不到任何东西。这就是我帮助你的原因。请告诉我发生这种情况的原因如果你知道的话。我会为此感谢你的。

在此处输入代码

    Exception has occurred: TypeError
    list indices must be integers or slices, not NoneType
    line 4, in insertLetter
    board[pos] = letter
    line 113, in main
    insertLetter('O' , move)
    line 130, in <module>
    main()

这些是行中的错误,下面是我为这个程序编写的代码。请帮助我。

board = [' ' for x in range(10)]

def insertLetter(letter,pos):
    board[pos] = letter

def spaceIsFree(pos):
    return board[pos] == ' '

def printBoard(board):
    print('   |   |   ')
    print(' ' + board[1] + ' | ' + board[2] + ' | '+ board[3])
    print('   |   |   ')
    print('------------')
    print('   |   |   ')
    print(' ' + board[4] + ' | ' + board[5] + ' | '+ board[6])
    print('   |   |   ')
    print('------------')
    print('   |   |   ')
    print(' ' + board[7] + ' | ' + board[8] + ' | '+ board[9])
    print('   |   |   ')

def isBoardFull(board):
    if board.count(' ') > 1:
       return False
   else:
       return True

def IsWinner(b,l):
    return (b[1] == l and b[2] == l and b[3] == l)
    (b[4] == l and b[5] == l and b[6] == l)
    (b[7] == l and b[8] == l and b[9] == l)
    (b[1] == l and b[4] == l and b[7] == l)
    (b[2] == l and b[5] == l and b[8] == l)
    (b[3] == l and b[6] == l and b[9] == l)
    (b[1] == l and b[5] == l and b[9] == l)
    (b[3] == l and b[5] == l and b[7] == l)

def playerMove():
    run = True
    while run:
             move = input("Please select a position to enter the X between 1 to 9")
             try:
                move = int(move)
                if move > 0 and move < 10:
                    if spaceIsFree(move):
                        run = False
                        insertLetter('X' , move)
                    else:
                        print("Sorry this space is occupied")
                else:
                    print("Please type a number between 1 to 9")

            except:
                  print('Please type a number')

def computerMove():
    possibleMoves = [x for x , letter in enumerate(board) if letter == ' ' and x != 0  ]
    move = 0

    for let in ['O' , 'X']:
        for i in possibleMoves:
            boardcopy = board[:]
            boardcopy[i] = let
            if IsWinner(boardcopy , let):
                move = i
                return move

    cornersOpen = []
    for i in possibleMoves:
        if i in [1 , 3 , 7 , 9]:
            cornersOpen.append(i)

    if len(cornersOpen) > 0:
        move = selectRandom(cornersOpen)
        return move

    if 5 in possibleMoves:
        move = 5
        return move

    edgesOpen = []
    for i in possibleMoves:
        if i in [2 , 4 , 6 , 8]:
            edgesOpen.append(i)

    if len(edgesOpen) > 0:
        move = selectRandom(edgesOpen)
        return move

def selectRandom(li):
    import random
    ln = len(li)
    r = random.randrange(0,ln)
    return li[r]

def main():
    print("Welcome to the Game!")
    printBoard(board)

    while not(isBoardFull(board)):
        if not(IsWinner(board , 'O')):
            playerMove()
            printBoard(board)
        else:
            print("Sorry you Loose!")
            break

        if not(IsWinner(board , 'X')):
            move = computerMove()
            if move == 0:
                print(" ")
            else:
                insertLetter('O' , move)
                print('computer placed an O on position' , move , ':')
                printBoard(board)
        else:
            print("You Win!")
            break

    if isBoardFull(board):
        print("Tie Game")

while True:
    x = input("Do you want to play again? (y/n)")
    if x.lower() == 'y':
        board = [' ' for x in range(10)]
        print('---------------------')
        main()
    else:
        break

标签: python-3.9

解决方案


如果正在编辑板,python 将其视为局部变量。你想改变你的功能是


def insert_letters(letter,pos):
    global board
    board[x] = y
    Some_other_stuff()

推荐阅读