Передача переменной в параметр, определенный другой функцией python - PullRequest
0 голосов
/ 13 мая 2019

Я не уверен, почему переменная totalspeed переменная неправильно передается в функцию startgame, так как функция startgame вызывается после функции gettotalspeed.

Выдержка из функции вызова:

gettotalspeed(party_ids)
NoOfEvents=0
startgame(party_ids,totalspeed,distance,NoOfEvents)

Функции

def gettotalspeed(party_ids):
    #Get selected party members IDS
    print(party_ids)
    #Obtain Speeds
    ids_string = ','.join(str(id) for id in party_ids)
    mycursor.execute("SELECT startspeed FROM characters WHERE CharID IN ({0})".format(ids_string))
    myspeeds=mycursor.fetchall()
    totalspeed=0
    for speedval in myspeeds:
        totalspeed=totalspeed + speedval[0]
    print("totalspeed is: ",totalspeed)
    return totalspeed
def startgame(party_ids,totalspeed,distance,NoOfEvents):
    #Check if game end
    print(totalspeed)
    while distance!=0:
        #Travel...
        distance=distance-totalspeed
        NoOfEvents=NoOfEvents+1
        #Generate Random Encounter
        genevent(NoOfEvents)
    return NoOfEvents

Произошла ошибка:

NameError: name 'totalspeed' is not defined

Выходы (ignoring party_ids)

totalspeed is:  15

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Я подозреваю, что ваша проблема очевидна из основной программы:

gettotalspeed(party_ids)
NoOfEvents=0
startgame(party_ids,totalspeed,distance,NoOfEvents)

Из переменных, которые вы передаете своим функциям, определяется только NoOfEvents.party_ids, totalspeed и distance не имеют определений.

Пройдите руководство по правилам области видимости Python.Прежде всего, обратите внимание, что функция определяет область видимости.Переменные внутри функции возвращаются при выходе из функции;их имена не применяются за пределами этого блока.Ваша опубликованная программа имеет три независимых totalspeed переменных.

0 голосов
/ 13 мая 2019

Вы забыли сделать глобальную переменную totalspeed, например global totalspeed, в своей функции gettotalspeed (). Вы также можете быть смущены тем, что делает return. Если вы хотите сделать это «правильным» способом, вы можете сделать totalspeed = gettotalspeed(party_ids). Надеюсь, это поможет!

...