NameError: Внешняя переменная не определена - PullRequest
0 голосов
/ 08 января 2019

Как правильно позвонить Score() внутри Possible_Outcomes()?

Я получаю следующую ошибку:

A_win = A_score+(K*(1-win_probability_A))
NameError: name 'A_score' is not defined

Я потратил некоторое время на рассмотрение предложенных ответов, но не смог успешно реализовать решение. Чтобы быть более конкретным, я не могу понять, как использовать несколько возвращаемых значений из одной функции внутри другой функции. Спасибо.

def Score():
    A_score= 1500
    B_score= 1600
    win_probability_A= 1/(1+10**((B_score-A_score)/400))
    win_probability_B= 1/(1+10**((A_score-B_score)/400))
    return A_score, B_score, win_probability_A, win_probability_B

y=Score()

def Possible_Outcomes(y):
    K=int(32)
    A_win = A_score+(K*(1-win_probability_A))
    A_loss = A_score+(K*(0-win_probability_A))
    B_loss = B_score+(K*(0-win_probability_B))
    B_win= B_score+(K*(1-win_probability_B))
    return 

Possible_Outcomes(y)

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вы можете добавить одну строку, чтобы получить значения, возвращаемые функцией scope()

A_score, B_score, win_probability_A, win_probability_B=y

Кроме того, вы можете вызвать функцию внутри второй функции, чтобы улучшить читаемость

def Possible_Outcomes():
    K=int(32) # not sure what you are trying to do here can be just K=32
    A_score, B_score, win_probability_A, win_probability_B = Score() # fetch all the values returned by the function 
    A_win = A_score+(K*(1-win_probability_A))
    A_loss = A_score+(K*(0-win_probability_A))
    B_loss = B_score+(K*(0-win_probability_B))
    B_win= B_score+(K*(1-win_probability_B))
    #return # you do not need to return in every function

Possible_Outcomes()

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

0 голосов
/ 08 января 2019

То, что у вас есть, является вопросом области видимости. Вы определяете A_score, но только в контексте вашей функции Score(). За пределами этой области Python не знает, где искать A_score или любые другие переменные, которые вы там определили.

Я несколько переписал ваш код, и я считаю, что вы намеревались сделать:

def Score():
    A_score = 1500
    B_score = 1600
    win_probability_A = 1/(1+10**((B_score-A_score)/400))
    win_probability_B = 1/(1+10**((A_score-B_score)/400))
    return A_score, B_score, win_probability_A, win_probability_B

y = Score()

def Possible_Outcomes(values):
    A_score, B_score, win_probability_A, win_probability_B = values
    K = int(32)
    A_win = A_score+(K*(1-win_probability_A))
    A_loss = A_score+(K*(0-win_probability_A))
    B_loss = B_score+(K*(0-win_probability_B))
    B_win= B_score+(K*(1-win_probability_B))
    return A_win, A_loss, B_loss, B_win

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