Ethan Buckley
Ethan Buckley

Reputation: 37

In my guess the number it tells me my Number variable isnt defined

With my guess the number program, when I try to run it tells me the the variable "number" is not defined. I would appreciate it and be thankful if someone came to my aid in this!

import random
guesses = 0


def higher(guesses):
    print("Lower")
    guesses = guesses + 1


def lower(guesses):
    print("Higher")
    guesses = guesses + 1


def correct(guesses):
    print("You got it correct!")
    print("It was {0}".format(number))
    guesses = guesses + 1
    print ("It took you {0} guesses".format(guesses))


def _main_(guesses):
    print("Welcome to guess the number")
    number = random.randint(1, 100)
    while True:
        guess = int(input("Guess a number: "))
        if guess > number:
            higher(guesses)
        elif guess < number:
            lower(guesses)
        elif guess == number:
            correct(guesses)
            while True:
                answer = input("Would you like to play again? Y or N: ")
                if answer == "Y":
                    break
                elif answer == "N":
                    exit()
                else:
                    exit()


_main_(guesses)

Upvotes: 0

Views: 67

Answers (2)

Arjun Kay
Arjun Kay

Reputation: 328

Your specific problem is that the variable number is not defined in function correct(). It can be solved by passing number as an argument to correct().

But even if you correct that problem, your program has another major issue. You have defined guesses globally, but you still pass guesses as an argument to lower(), higher() and correct(). This creates a duplicate variable guesses inside the scope of these functions and each time you call either of these functions, it is this duplicate variable that is being incremented and not the one you created globally. So no matter how many guesses the user takes, it will always print

You took 1 guesses.

Solution:
Define the functions lower() and higher() with no arguments. Tell those functions thatSo ultimately this code should work:

import random
guesses = 0


def higher():
   global guesses
   print("Lower")
   guesses = guesses + 1


def lower():
    global guesses
    print("Higher")
    guesses = guesses + 1

def correct(number):
    global guesses
    print("You got it correct!")
    print("It was {0}".format(number))
    guesses = guesses + 1
    print ("It took you {0} guesses".format(guesses))

def _main_():
    print("Welcome to guess the number")
    guesses = 0
    number = random.randint(1, 100)
    while True:
        guess = int(input("Guess a number: "))
        if guess > number:
            higher()
        elif guess < number:
            lower()
        elif guess == number:
            correct(number)
            while True:
                answer = input("Would you like to play again? Y or N: ")
                if answer == "Y":
                    _main_()
                elif answer == "N":
                    exit()
                else:
                    exit()
_main_()

Upvotes: 0

error404040404
error404040404

Reputation: 26

Your problem is that number is not defined in the function correct. number is defined in _main_. When you call correct in _main_, it does not get access to number. This is the fixed version of your code:

    import random
    guesses = 0
    number = random.randint(1, 100)


    def higher(guesses):
        print("Lower")
        guesses = guesses + 1


    def lower(guesses):
        print("Higher")
        guesses = guesses + 1


    def correct(guesses):
        print("You got it correct!")
        print("It was {0}".format(number))
        guesses = guesses + 1
        print ("It took you {0} guesses".format(guesses))


    def _main_(guesses):
        print("Welcome to guess the number")
        while True:
            guess = int(input("Guess a number: "))
            if guess > number:
                higher(guesses)
            elif guess < number:
                lower(guesses)
            elif guess == number:
                correct(guesses)
                while True:
                    answer = input("Would you like to play again? Y or N: ")
                    if answer == "Y":
                        break
                    elif answer == "N":
                        exit()
                    else:
                        exit()


    _main_(guesses)

What I changed is I moved the definition of number to the top, which allowed it to be accessed by all functions in the module.

Also, your code style is not very good. Firstly, do not name your main function _main_, instead use main. Additionally, you don't need a function to print out 'lower' and 'higher.' Here is some improved code:

import random

def main():
    number = random.randint(1, 100)
    guesses = 0
    while True:
        guessed_num = int(input('Guess the number: '))
        guesses += 1
        if guessed_num > number:
            print('Guess lower!')
        elif guessed_num < number:
            print('Guess higher!')
        else:
            print('Correct!')
            print('The number was {}'.format(number))
            print('It took you {} guesses.'.format(guesses))
            break
main()

Upvotes: 1

Related Questions