что вызывает ссылку перед ошибками присваивания в приведенном ниже коде? - PullRequest
0 голосов
/ 01 октября 2019

Я получаю эту ошибку с refrenced перед назначением, и я не уверен, как ее исправить.

В данный момент я ничего не пробовал. Буду признателен, если на это можно будет ответить. (я просто пытаюсь заполнить больше слов, чтобы их можно было опубликовать)

это error code, которое я получаю:

number = int(number)

UnboundLocalError: local variable 'number' referenced before assignment

А это остальная часть моего кода

import random
import sys

again = True









while True:
    myName = input('Hello, Enter your name to get started')
    if myName.isdigit():
        print('ERROR,Your Name is not a number, please try again')
        print('')
        continue
    break
myName = str(myName.capitalize()) 




print('')    
print('Hi {}, This is Guessing Game, a game where you have a certain amount of attempts to guess a randomly generated number. Each level has a different amount of attempts and a higher range of number. After each guess, press enter and the program will determine if your guess is correct or incorrect.' .format (myName))

print('--------------------------------------------------------------------------------')





while True:
    level = input('{}, Please select a level between 1 and 3. Level 1 being the easiest and 3 being the hardest')
    if not level.isdigit():
        print('Please enter a number between 1 and 3. Do not enter a number in word form')
        continue
    break

def guessNumber(): # Tells the program where to restart if the user wants to play again
    guessesTaken = 0
    List = []



    if level == 1:
        number = random.randint (1, 16)
        print('You chose Level 1, Guess a number a between 1 and 16, you have 6 guesses.') 
        allowedGuesses = 6 
        boundary = 16 

    if level == 2: # The code for level 2
        number = random.randint (1,32)
        print('You chose Level 2, Guess a number between 1 and 32, You have 8 guesses.')
        allowedGuesses = 8
        boundary = 32


    if level == 3:
        number = random.randint (1, 40)
        print('You chose Level 3, Guess a number between 1 and 40, you have 10 guesses.')
        allowedGuesses = 10
        boundary = 40

    if level == 4:
        number = random.randint (1, 50)
        print('You chose Level 4, Guess a number between 1 and 50, you have 10 guesses.')
        allowedGuesses = 10
        boundary = 50

    if level == 5:
        number = random.randint (1, 60)
        print('You chose Level 5, Guess a number between 1 and 60, you have 10 guesses.')
        allowedGuesses = 10
        boundary = 60





        guess = input() 
        guess = int(guess)
        while guessesTaken < allowedGuesses:



            guessesTaken = guessesTaken + 1 
            guessesLeft = allowedGuesses - guessesTaken





        if guess < number:  
            List.append(guess)
            print('Your guess is too low, You must guess a higher number, you have {} guesses remaining. You have guessed the numbers {}, Take another guess' .format (guessesLeft, List))


        if guess > number: 
            List.append(guess)
            print('Your guess is too high, You must guess a lower number, you have {} guesses remaining. You have guessed the numbers {}, Take another guess' .format (guessesLeft, List))


        if guess > boundary: 
            List.append(guess)
            print('You must input a number between 1 and 16. You have {} guesses remaining. You have guessed the numbers {}, Take another guess' .format (guessesLeft, List))

        if guess == number:
            List.append(guess)
            print('Good Job {}!, You guessed my number in {} guesses. You guessed the numbers {}.' .format (myName, guessesTaken, List))
            print('Your high score for your previous game was {}' .format(guessesTaken))





    else:
        number = int(number)
        print('')
        print('--------------------------------------------------------------------------------')      
        print('Sorry {}, Your gueses were incorrect, The number I was thinking of was {}. You guessed the numbers {}.' .format(myName, number, List))







guessNumber()
print('')
print('It is recommended to pick a harder level if you chose to progress')
print('')

while True:
    again = input('If you want to play again press 1, if you want to stop playing press 2')
    if not again.isdigit():
        print('ERROR: Please enter a number that is 1 or 2. Do not enter the number in word form')
        continue
    break





if again == 1:
    level + 1
    guessNumber()






if again == 2:
    print('Thanks for playing Guessing Game :)')
    sys.exit(0)

Ответы [ 2 ]

1 голос
/ 01 октября 2019

В вашем коде вы получаете level как input и проверяете, что если уровень находится в диапазоне от 1 до 5.
иначе вы пытаетесь number = int(number)
, но вы должны написать number = int(level).

0 голосов
/ 01 октября 2019

Поскольку level является строкой, а не числом, ни одно из условий, таких как

if level == 1:

, не будет выполнено. Таким образом, ни одно из назначений, таких как number = random.randint (1, 16), никогда не выполняется, а number никогда не назначается.

Поскольку if level == 5: не удается, оно переходит в блок else:, который начинается с

number = int(number)

Поскольку ни одно из других назначений number не имело места, он пытается использовать int(number) до назначения переменной, что не работает.

Я не уверен, почемуу вас даже есть это назначение там. Когда присваивается number, для него всегда устанавливается целое число, поэтому нет необходимости использовать int(number).

Вам необходимо использовать

level = int(level)`

после подтверждения того, что он содержит цифры,И вам нужно сделать то же самое с again.

Есть ряд других проблем с вашим кодом. Например, код, который запрашивает догадку пользователя и проверяет его внутри блока if level == 5:, должен выполняться на всех уровнях.

Если у вас есть серия взаимоисключающих тестов, вы должны использовать elif за каждый последующий тест. Если вы просто используете if для каждого из них, а затем используете else: в конце, то else: будет применяться только к последнему тесту, поэтому он будет выполнен, даже если один из ранних тестов также был успешным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...