Получает ошибку трассировки и утверждает, что на мою переменную ссылаются перед присваиванием - PullRequest
0 голосов
/ 01 апреля 2020

При получении ошибки трассировки указывается, что на dime нет ссылки перед присваиванием, и есть ошибка с моей функцией. Я пробовал поискать в Google, но не смог найти ответ.

change = float(input("How much change will they recieve?:"))
nickel=1
def conclude():
    if change == 0.04 or change == 0.03:
        global nickel
        nickel = nickel + 1
        conclude()
        if nickel == 2:
            dime = dime + 1
            nickel = 0
            conclude()
        else:
            print("You owe a nickel")
            conclude()
    elif dime >= 1:
        print("You owe " + str(dime) + " dime(s)")
        conclude()
    else:
        print("Done")
conclude()

Input = 10

Output

How much change will they recieve?:10
Traceback (most recent call last):
  File "C:/Users/donal/PycharmProjects/ChangeCalculator/testv2.py", line 20, in <module>
    conclude()
  File "C:/Users/donal/PycharmProjects/ChangeCalculator/testv2.py", line 15, in conclude
    elif dime >= 1:
UnboundLocalError: local variable 'dime' referenced before assignment

Process finished with exit code 1

1 Ответ

1 голос
/ 01 апреля 2020

Нельзя использовать неназначенную переменную. В этом случае в строках

elif dime >= 1:
    ...str(dime)...

вы используете переменную dime, не присваивая ей что-либо. Хотя вы не получили ошибку в строке

dime = dime + 1

, она также ведет себя так же, как и при вводе другого ввода.

Что вам нужно сделать, это объявить dime, и присвоить ему начальное значение. Вы можете сделать это так:

def conclude():
    dime = 0
    [rest of the code]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...