如何修复python中未定义的错误?

2024-04-26 18:49:14 发布

您现在位置:Python中文网/ 问答频道 /正文

Hy,我在最后一部分被卡住了,我必须写位置标记(place\u marker(the\u Board,player2\u marker,position)),它不认识这个标记,它说它是一个未定义的变量,有什么想法吗?你知道吗

这是我的剧本:(因为那个问题还没完成)

def display_board(board):
    print('\n'*3)
    print(board[7]+'|'+board[8]+'|'+board[9])
    print(board[4]+'|'+board[5]+'|'+board[6])
    print(board[1]+'|'+board[2]+'|'+board[3])

#test_board = ['#','X','O','X','O','X','O','X','O','X'] #test
#display_board(test_board) #test

def player_input():
    print('\n'*3)
    Player1_name=input('What is your name player1 ? : ')
    Player2_name=input('What is your name player2 ? : ')
    marker = ''
    while marker != 'X' and marker != '0' :
        Player1=marker = input('{}, please chose X or 0 : '.format(Player1_name))

    if Player1 == 'X':
        Player2 = '0'
    else:
        Player2= 'X'


    return ('OK, {} is : {}\nAnd {} is : {} ' .format(Player1_name,Player1,Player2_name,Player2))

#print(player_input()) #test

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

#print(place_marker(test_board,'2',8))
#print(display_board(test_board))

def win_check(board, mark):
    return ((board[7] == mark and board[8] == mark and board[9] == mark) or (board[4] == mark and board[5] == mark and board[6] == mark) or (board[1] == mark and board[2] == mark and board[3] == mark) or (board[7] == mark and board[4] == mark and board[1] == mark) or (board[8] == mark and board[5] == mark and board[2] == mark) or (board[9] == mark and board[6] == mark and board[3] == mark) or (board[7] == mark and board[5] == mark and board[3] == mark) or (board[9] == mark and board[5] == mark and board[1] == mark))

#print(win_check(test_board,'X')) #test

import random 

def choose_first():
    flip = random.randint(0,1)
    if flip == 0 :
        return 'Player1'
    else:
        return 'Player2'

def space_check(board, position):
    return board[position] == ''

def full_board_check(board):
    for i in range(1, 10) :
        if space_check(board, i):
            return False
    return True

def player_choice(board):
    print('\n'*3)
    position = 0
    while position not in [1,2,3,4,5,6,7,8,9] or not space_check(board,position):
        position = int(input('Please chose a position from 1 to 9 : '))
    return position

def replay():
    choise = input('Do you wnat to play again, yes or no ? : ')
    return choise == 'yes'

print('Welcome to Tic Tac Toe!')
while True:
    the_board=[' '] *10
    player_input()
    turn=choose_first()
    print(turn+'will go first')

    play_game=input('Ready to play ? y or n ? : ')
    if play_game == 'y' :
        game_on = True
    else:
        game_on = False 

    while game_on :
        if turn == 'Player1' :
            display_board(the_board)
            position=player_choice(the_board)
            place_marker(the_Board, player2_marker, position)   ### HERE

            if win_check (the_board ,Player1) :
                display_board(the_board)
                print('{} has Won !!')
                game_on = False

        if not replay() :
            break

这是我运行代码后的控制台,它无法识别我的数字,因为最后的脚本还没有完成

Welcome to Tic Tac Toe!
What is your name player1 ? : SALLY
What is your name player2 ? : Sammy
Player1will go first
Ready to play ? y or n ? : y
 | | 
 | | 
 | | 
Please chose a position from 1 to 9 : 1
Please chose a position from 1 to 9 : 2
Please chose a position from 1 to 9 : 3

它还在问我一个号码

我试图改变一些参数的地方\标记代码,但它没有工作

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

Tags: orandthetonametestboardinput
2条回答

你的问题就在你标记的地方:

place_marker(the_Board, player2_marker, position)

这是对player2_marker的第一次引用。你需要在引用它之前在某个地方初始化它!我假设这很简单,在你的例子中,把它设置为“O”或“X”。你知道吗

嗨,谢谢你的回答,我意识到,我比较了我的脚本和课程解决方案脚本,我看到我在播放器输入时做了一个修改,那只是返回格式化的句子,所以我用返回“x”、“0”或“0”、“x”的代码更改了我的代码,它被分配给播放器1,播放器2=player\u input(),我是player 1=x和player 2=o或相反,这样我可以在place\u marker函数中引入变量x(分配给player 1)或o(分配给player 2),也有一些小错误,现在终于可以工作了!!你知道吗

相关问题 更多 >