Как добавить целые числа в переменную вне функции? - PullRequest
0 голосов
/ 20 июня 2020

В настоящее время я делаю небольшую игру, и в этой игре я реализовал балльную систему. Следующая строка кода упоминается в начале кода:

points = 0

Это означает, что в данный момент у игрока нет очков, но позже эти очки будут продолжать складываться, и значение не будет быть 0. Первый раз игрок сталкивается с увеличением своих очков в этой функции:

def if_castle_right():
    choice = "\nYou found a silver coin that's worth 5 points!"
    coin = 5
    points += coin
    choice += "\nWhat will to do?"
    choice += "\n[a] Go back \n[b] See points \n[c] Quit \n>"
    inp = input(choice)
    if inp == 'a':
        if_castle()
    elif inp == 'b':
        point_total()
        return if_castle_right()
    elif inp == 'c':
        return
    else:
        char_input_fail()
        return if_castle_right()

Проблема в том, что когда я выполняю код, выводится следующее:

File "C:\Users\gabyp\Documents\python_work\game\choose_your_adventure_game.py", line 179, in if_castle_right
    points += coin
UnboundLocalError: local variable 'points' referenced before assignment

Я не знаю, что еще делать, потому что, если я инвертирую точки + = монета в монету + = баллы, он выводится нормально, за исключением того, что 5 баллов, которые стоит монета, не добавляются к общей сумме, он просто говорит 0.

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Добавьте global points внутри функции перед points += coins.

points = 0

def if_castle_right():
    choice = "\nYou found a silver coin that's worth 5 points!"
    coin = 5
    global points
    points += coin
    choice += "\nWhat will to do?"
    choice += "\n[a] Go back \n[b] See points \n[c] Quit \n>"
    inp = input(choice)
    if inp == 'a':
        if_castle()
    elif inp == 'b':
        point_total()
        return if_castle_right()
    elif inp == 'c':
        return
    else:
        char_input_fail()
        return if_castle_right()
0 голосов
/ 20 июня 2020

Вы можете объявить его как глобальную переменную, вызвав global points внутри функции до того, как к ней будет осуществлен доступ, или передав ее в качестве аргумента и вернув вместе с if_castle_right() в виде кортежа, например:

def if_castle_right(points):
.
.
.
return (points,if_castle_right())

и вызов функции как

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