@dandyvssega
Начинаю кодить

Почему return не возвращает значение переменной?

Подскажите пожалуйста что делаю не так.И в целом,как было бы правильно написать скрипт, напутствия на будущее.Спасибо!
while True: # Выполняем цикл до ошибок
    offer = int(input('Количество офферов = ')) # Вводим количество офферов,целое число
    i = 0 # Просто переменная для счетчика
    total_payout = float() # Создаем пустуб переменную с типом float, будут дробные числа выплат за лид
    while i < offer: # Если несколько офферов то вводим данные по выплате на каждый
        i= i + 1
        print ('Цена за лид #%i'% i, ' = ')
        payout = float(input()) # Добавляем в переменню данные с ввода
        total_payout = total_payout + payout # Делаем новую переменную в которой будет сумма всех выплат за каждый оффер
    lp = int(input('Количество лендов = ')) # Количество лендов
    banners = int(input('Количество баннеров = ')) # Количество баннеров.
    testType = int(input('Тип теста : 1)Поверхностный(минимальные затраты) , 2)Стандарт , 3)Аргессивный(максимальная трата) - ')) # Тип теста

    if banners == 0 : #Незнал как сделать что если вводят 0 то переменная была бы пустая
        banners = 0.1 #Пусть будет 0.1 все равно int() округлит до целого числа
    def budget(): #  Функция подсчета бюджета кампании на основе введеных данных
        if testType == 1: # Если тип теста Поверхностный
            total_budget = (((total_payout * 1.5) + (lp * 1.5) + (banners * 1.5))) * 1.5 # Считаем бюджет
            return total_budget # Возвращаем бюджет кампании
        if testType == 2: # Если тип теста Стандарт
            total_budget = (((total_payout * 3) + (lp * 3) + (banners * 3))) * 3 # Считаем бюджет
            return total_budget # Возвращаем бюджет кампании
        if testType == 3: # Если тип теста Аргессивный
            total_budget = (((total_payout * 5) + (lp * 5) + (banners * 5))) * 5 # Считаем бюджет
            return total_budget # Возвращаем бюджет кампании

    budget() # Вызываем функцию,тут почему-то неполучаю total_budget
    print('Бюджет теста кампании = ', total_budget) # В итоге не выводится total_budget, говорит что нет такой переменной
  • Вопрос задан
  • 673 просмотра
Решения вопроса 1
urtow
@urtow
*nix, python, QA, bagpipe, folk music
Да, такой переменной нет, потому что область видимости переменной - функция budget, за пределами данной функции этой переменной не существует.

Вот так выглядит правильный код:

print('Бюджет теста кампании = ', budget())

Либо, если ты хочешь сохранить результат работы функции в переменную это надо сделать явно:

total = budget() # явно присваиваем результат выполнения функции переменной
print('Бюджет теста кампании = ', total) выводим значение переменной


Читай про область видимости и возвращаемые значения функцией.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы