【问题标题】:Try to code a simple Tic Tac Toe from a Udemy course. What did I do wrong?尝试从 Udemy 课程中编写一个简单的井字棋。我做错了什么?
【发布时间】:2023-02-10 03:28:13
【问题描述】:

下面是我用于我的简单井字游戏的代码。我收到以下错误我不知道如何解决。该程序在 Jupyter notebook 中确实有效,但是当我尝试在 VScode 中运行该脚本时,出现错误。我需要有关如何修复此错误的指导。

***错误如下:***


Traceback (most recent call last):
  File "x:\Python\Python_Bootcamp\Complete-Python-3-Bootcamp-master\04-Milestone Project - 1\TIC_TAC_TOE.py", line 105, in <module>   
    display_board(board)
  File "x:\Python\Python_Bootcamp\Complete-Python-3-Bootcamp-master\04-Milestone Project - 1\TIC_TAC_TOE.py", line 8, in display_board
    print(board[1] + '|' + board[2] + '|' + board[3])
          ~~~~~^^^
IndexError: list index out of range

井字游戏

`
import random
`

显示游戏板

`def display_board(board):
    # print('\n'*100) # Lets you only see one version of the board
    print(board[1] + '|' + board[2] + '|' + board[3])
    print('-----')
    print(board[4] + '|' + board[5] + '|' + board[6])
    print('-----')
    print(board[7] + '|' + board[8] + '|' + board[9])`

选择玩家 1 是 X 还是 O

`def player_input():
    marker = ''

    while marker != 'X' and marker != 'O':
        marker = input('Player 1 choose X or O: ')
        
        player1 = marker.upper()

        if player1 == 'X':
            player2 = 'O'
        else:
            player2 = 'X'

    return(player1, player2)`

在棋盘上占据一个位置并在位置上放置一个标记

`def place_marker(board,marker,position):
    board[position] = marker`

检查是否获胜

`def win_check(board, mark):
    return ((board[7] == mark and board[8] == mark and board[9] == mark) or # across the bottom
    (board[4] == mark and board[5] == mark and board[6] == mark) or # across the middle
    (board[1] == mark and board[2] == mark and board[3] == mark) or # across the top
    (board[7] == mark and board[4] == mark and board[1] == mark) or # down the left column
    (board[2] == mark and board[5] == mark and board[8] == mark) or # down the middle
    (board[3] == mark and board[6] == mark and board[9] == mark) or # down the right side
    (board[3] == mark and board[5] == mark and board[7] == mark) or # diagonal
    (board[9] == mark and board[5] == mark and board[1] == mark)) # diagonal`

随机翻转看玩家 1 或玩家 2 先走

`def choose_first():
    flip = random.randint(0,1)

    if flip == 0:
        return ('Player 1')
    else:
        return ('Player 2')`

检查职位是否空缺

`def space_check(board, position):
    return board[position] == ' ' # If space is empty the return value will be True`

检查看板是否已满

`def full_board_check(board):
    for i in range(1,10):
        if space_check(board,i):
            return False # Fales meaning the space is empty of marker
        else:
            return True # True meaning the board is full`

玩家选择他们在棋盘上的下一个位置的功能

`def player_choice(board):
    position = 0

    while position not in [1,2,3,4,5,6,7,8,9]:
        position = int(input('Choose your position: '))

    return position

def replay():
    
    choice = input('Do you want to play again?')

    return choice == 'Yes'`

游戏设置

`print('Welcome to Tic Tac Toe!')

while True:
    board = [' '*10]
    player1_marker,player2_marker = player_input()
    turn = choose_first()
    print(turn + ' will go first')
    game_on = ''
    
    play_game = input('Are you ready to play Yes or No?: ')

    if play_game.lower()[0] == 'y':
        game_on == True
    else:
        game_on == False

        # Player 1 Turn
    if turn == 'Player 1':

        # Show board

        display_board(board)

        # Choose a position

        position = player_choice(board)

        # Place marker on choosen position

        place_marker(board,player1_marker,position)

        # Check if they won

        if win_check(board,player1_marker) == True:
            display_board(board)
            print('Player 1 has won the game!')
            game_on = False

        # Check to see if Tie
        else: 
            if full_board_check(board):
                display_board(board)
                print('TIE GAME')
                break

    # If there's no tie turn to Player 2        
    else:
        turn = 'Player 2'

        # Player2's turn.
    if turn == 'Player 2':

        # Show board
        # display_board(board)

        # Show position
        position = player_choice(board)

        #Place marker on position
        place_marker(board,player2_marker,position)

        # Check to see if win
        if win_check(board,player2_marker) == True:
            display_board(board)
            print('Player 2 has won the game!')
            game_on = False
        
        # Check to see if Tie
        else:
            full_board_check(board)
            display_board(board)
            print('TIE GAME')
            break
    else:
        turn = 'Player 1'
    
    # If players do not want to play again, quit
    if not replay():
        break`

我试图注释掉不同的代码行来测试一些电路板配置。我可以让棋盘显示,但是一旦我尝试玩完整的游戏,我就会出错。

【问题讨论】:

  • 你的董事会是一个字符串,但我认为你想要的是board = [' ' for _ in range(10)]

标签: python python-3.x list


【解决方案1】:

你有初始化

board = [' '*10]

所以 board 是一个只有一个元素的列表。所以索引 1 不存在。

也许你想写:

board = ''*10 

所以你有一个包含 10 个元素的字符串

【讨论】:

    【解决方案2】:

    你应该指出你得到的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多