theJcode24
theJcode24

Reputation: 33

Python Milestone Project for Udemy course

I am James Jung and this is my first question on StackOverflow. I just recently began learning programming and started a Python course on Udemy. This is the first "Milestone Project" on the course and I am trying to run this Tic-Tac-Toe program. I tried to comment on as much of the code, but I seem to be missing something because I am getting a "NameError: name 'player1_marker' is not defined" in the Main Game function. Any help would is appreciated and I hope to begin my StackOverflow journey! Thanks for your time and response!

For using the same code in either Python 2 or 3

from __future__ import print_function 

Note: Python 2 users, use raw_input() to get player input. Python 3 users, use 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

Upvotes: 2

Views: 1844

Answers (1)

ForceBru
ForceBru

Reputation: 44858

You're checking for equality instead of assigning. Since neither player1_marker, nor player2_marker exist at the moment, you're getting an error.

player_input() == player1_marker, player2_marker

Should be this:

player1_marker, player2_marker = player_input()

Upvotes: 1

Related Questions