Python Udemy 课程的里程碑项目
Python Milestone Project for Udemy course
我是 James Jung,这是我在 Whosebug 上的第一个问题。我最近才开始学习编程,并在 Udemy 上开设了 Python 课程。这是课程中的第一个 "Milestone Project",我正在尝试 运行 这个 Tic-Tac-Toe 程序。我试图对尽可能多的代码发表评论,但我似乎遗漏了一些东西,因为我在 Main Game 函数中得到了 "NameError: name 'player1_marker' is not defined"。我们将不胜感激,我希望开始我的 Whosebug 之旅!感谢您的宝贵时间和回复!
在 Python 2 或 3
中使用相同的代码
from __future__ import print_function
注:Python2个用户,使用raw_input()获取玩家输入。 Python 3 个用户,使用 input()
from IPython.display import clear_output
def display_board(board): # Create a board to play tic tac toe using print functions.
clear_output()
print(' | | ')
print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9] + ' ')
print('---|---|--- ')
print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6] + ' ')
print('---|---|--- ')
print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3] + ' ')
print(' | | ')
def player_input(): # Player input function.
marker = '' # Define variable marker as empty string.
while not (marker == 'O' or marker == 'X'): #Loop user input until 'O' or 'X' is inputed.
marker = raw_input('Choose O or X to begin playing.').upper() # Asks for user input and calls upper function to match
# (marker == 'O' or marker == 'X')
if marker == 'X': # Check if input is 'X'.
return ('X', 'O') # Return a tuple.
else: # Use else instead of elif marker == 'O' since there are only two possible correct inputs.
return ('O', 'X')
def place_marker(board, marker, position): # Function to define position of user input on board
board[position] = marker
def win_check(board,mark): # Checks if either player won the game.
#Check to see if there is a winning line...
return ((board[7] == mark and board[8] == mark and board[9] == mark) or # across the top.
(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 bottom.
(board[7] == mark and board[4] == mark and board[1] == mark) or # down the left side.
(board[8] == mark and board[5] == mark and board[2] == mark) or # down the middle.
(board[9] == mark and board[6] == mark and board[3] == mark) or # down the right side.
(board[7] == mark and board[5] == mark and board[3] == mark) or # diagonally.
(board[9] == mark and board[5] == mark and board[1] == mark)) # diagonally.
def choose_first(): #
if random.randint(0,1) == 0: # Use randint to generate a random number 0 or 1.
return 'Player 1' # Assign a player to go first and second.
else:
return 'Player 2'
def space_check(board, position): #Boolean function indicating whether space on board is open.
return board[position] == ' ' #' ' indicates there is a open space in the position on board.
def full_board_check(board): #
for i in range(1,10):
if space_check(board,i):
return False
return True
def player_choice(board):
position = ' '
while position not in '1 2 3 4 5 6 7 8 9'.split() or not space_check(board,int(position)):
position = raw_input('Choose your next position (1-9): ')
return int(position)
# Main Game Function begins here.
print('Welcome to Tic Tac Toe!')
while True:
theBoard = [' ']*10 # Create theBoard variable with 10 empty spaces
player_input() == player1_marker, player2_marker # player_input returns a tuple 'X' or 'O'. Tuple unpacking
turn = choose_first() # choose_first() returns string 'Player 1' or 'Player 2'
print(turn + ' will go first!') # Prints which player goes first according to choose_first() function.
while game_on: # Make game_on false when there is a tie or someone wins.
if turn == 'Player 1': # Initialize the Player 1's turn
display_board(theBoard) # Display the board
position = player_choice(theBoard) # Position of player's move is checked using player_choice function
place_maker(theBoard, player1_marker, position) # Place the marker on the board using player's marker(X or O) and place
# in position
if win_check(theBoard,player1_marker): # Check if Player 1 has won the game.
diplay_board(theBoard) # Pass theBoard into function display_board to check if there is a line that wins on board.
print('Congratulations, Player 1 has won the game!')
else:
if full_board_check(theBoard): # Check if board is full.
display_board(theBoard) # Pass the game board into the display_board function to see if board is full.
print('The game is a draw!')
break
else:
turn = 'Player 2'
else: # Initialize the Player 2's turn
display_board(theBoard) # Display the board
position = player_choice(theBoard) # Position of player's move is checked using player_choice function
place_maker(theBoard, player2_marker, position) # Place the marker on the board using player's marker(X or O) and place
# in position
if win_check(theBoard,player2_marker): # Check if Player 1 has won the game.
diplay_board(theBoard) # Pass theBoard into function display_board to check if there is a line that wins on board.
print('Congratulations, Player 2 has won the game!')
else:
if full_board_check(theBoard): # Check if board is full.
display_board(theBoard) # Pass the game board into the display_board function to see if board is full.
print('The game is a draw!')
break
else:
turn = 'Player 1'
if not replay():
break
您正在检查相等性而不是分配。由于目前 player1_marker
和 player2_marker
都不存在,因此您会遇到错误。
player_input() == player1_marker, player2_marker
应该是这样的:
player1_marker, player2_marker = player_input()
我是 James Jung,这是我在 Whosebug 上的第一个问题。我最近才开始学习编程,并在 Udemy 上开设了 Python 课程。这是课程中的第一个 "Milestone Project",我正在尝试 运行 这个 Tic-Tac-Toe 程序。我试图对尽可能多的代码发表评论,但我似乎遗漏了一些东西,因为我在 Main Game 函数中得到了 "NameError: name 'player1_marker' is not defined"。我们将不胜感激,我希望开始我的 Whosebug 之旅!感谢您的宝贵时间和回复!
在 Python 2 或 3
中使用相同的代码from __future__ import print_function
注:Python2个用户,使用raw_input()获取玩家输入。 Python 3 个用户,使用 input()
from IPython.display import clear_output
def display_board(board): # Create a board to play tic tac toe using print functions.
clear_output()
print(' | | ')
print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9] + ' ')
print('---|---|--- ')
print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6] + ' ')
print('---|---|--- ')
print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3] + ' ')
print(' | | ')
def player_input(): # Player input function.
marker = '' # Define variable marker as empty string.
while not (marker == 'O' or marker == 'X'): #Loop user input until 'O' or 'X' is inputed.
marker = raw_input('Choose O or X to begin playing.').upper() # Asks for user input and calls upper function to match
# (marker == 'O' or marker == 'X')
if marker == 'X': # Check if input is 'X'.
return ('X', 'O') # Return a tuple.
else: # Use else instead of elif marker == 'O' since there are only two possible correct inputs.
return ('O', 'X')
def place_marker(board, marker, position): # Function to define position of user input on board
board[position] = marker
def win_check(board,mark): # Checks if either player won the game.
#Check to see if there is a winning line...
return ((board[7] == mark and board[8] == mark and board[9] == mark) or # across the top.
(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 bottom.
(board[7] == mark and board[4] == mark and board[1] == mark) or # down the left side.
(board[8] == mark and board[5] == mark and board[2] == mark) or # down the middle.
(board[9] == mark and board[6] == mark and board[3] == mark) or # down the right side.
(board[7] == mark and board[5] == mark and board[3] == mark) or # diagonally.
(board[9] == mark and board[5] == mark and board[1] == mark)) # diagonally.
def choose_first(): #
if random.randint(0,1) == 0: # Use randint to generate a random number 0 or 1.
return 'Player 1' # Assign a player to go first and second.
else:
return 'Player 2'
def space_check(board, position): #Boolean function indicating whether space on board is open.
return board[position] == ' ' #' ' indicates there is a open space in the position on board.
def full_board_check(board): #
for i in range(1,10):
if space_check(board,i):
return False
return True
def player_choice(board):
position = ' '
while position not in '1 2 3 4 5 6 7 8 9'.split() or not space_check(board,int(position)):
position = raw_input('Choose your next position (1-9): ')
return int(position)
# Main Game Function begins here.
print('Welcome to Tic Tac Toe!')
while True:
theBoard = [' ']*10 # Create theBoard variable with 10 empty spaces
player_input() == player1_marker, player2_marker # player_input returns a tuple 'X' or 'O'. Tuple unpacking
turn = choose_first() # choose_first() returns string 'Player 1' or 'Player 2'
print(turn + ' will go first!') # Prints which player goes first according to choose_first() function.
while game_on: # Make game_on false when there is a tie or someone wins.
if turn == 'Player 1': # Initialize the Player 1's turn
display_board(theBoard) # Display the board
position = player_choice(theBoard) # Position of player's move is checked using player_choice function
place_maker(theBoard, player1_marker, position) # Place the marker on the board using player's marker(X or O) and place
# in position
if win_check(theBoard,player1_marker): # Check if Player 1 has won the game.
diplay_board(theBoard) # Pass theBoard into function display_board to check if there is a line that wins on board.
print('Congratulations, Player 1 has won the game!')
else:
if full_board_check(theBoard): # Check if board is full.
display_board(theBoard) # Pass the game board into the display_board function to see if board is full.
print('The game is a draw!')
break
else:
turn = 'Player 2'
else: # Initialize the Player 2's turn
display_board(theBoard) # Display the board
position = player_choice(theBoard) # Position of player's move is checked using player_choice function
place_maker(theBoard, player2_marker, position) # Place the marker on the board using player's marker(X or O) and place
# in position
if win_check(theBoard,player2_marker): # Check if Player 1 has won the game.
diplay_board(theBoard) # Pass theBoard into function display_board to check if there is a line that wins on board.
print('Congratulations, Player 2 has won the game!')
else:
if full_board_check(theBoard): # Check if board is full.
display_board(theBoard) # Pass the game board into the display_board function to see if board is full.
print('The game is a draw!')
break
else:
turn = 'Player 1'
if not replay():
break
您正在检查相等性而不是分配。由于目前 player1_marker
和 player2_marker
都不存在,因此您会遇到错误。
player_input() == player1_marker, player2_marker
应该是这样的:
player1_marker, player2_marker = player_input()