2016-09-08 3 views
0

У меня есть 2 функции. Если я вызываю свою первую функцию из-за пределов функций, она работает. Это дает правильное значение. Теперь, если я вызову свою первую функцию внутри своей второй функции, она вернет мне значение 0.Функция вызова внутри функции возвращает 0

Я не понимаю, что я делаю неправильно. Может кто-нибудь, пожалуйста, указать мне в правильном направлении здесь? Очень признателен!

def standaardprijs(afstandKM): 
    totaalPrijs = 0 
    if afstandKM < 50: 
     kmPrijs = 0.8 
     totaalPrijs += kmPrijs * afstandKM 
     return(totaalPrijs) 

    if afstandKM > 50: 
     totaalPrijs = totaalPrijs + 15 
     kmPrijs = 0.6 
     totaalPrijs += kmPrijs * afstandKM 
    return totaalPrijs 

def ritprijs(leeftijd, weekendrit, afstandKM): 
    totaalPrijs = 0 
    totaaalPrijs = standaardprijs(afstandKMInp) 
    print(totaalPrijs) 
    # Leeftijd 
    if leeftijd >= 12 and leeftijd <= 65: 

     if weekendRit == 'j': 
      TP2 = totaalPrijs/0.35 
      return TP2 

     else: 
      TP2 = totaalPrijs/0.3 
      return TP2 


    else: 
     if weekendRit == 'j': 
      TP2 = totaalPrijs/0.4 
      return TP2 

     else: 
      #geen korting 
      TP2 = totaalPrijs 
      return TP2 

afstandKMInp = eval(input('Hoeveel KM gaat u reizen?')) 
weekendRit = input('Weekendrit? j/n') 
leeftijd = int(input('Leeftijd: ')) 
ritprijs2 = ritprijs(leeftijd, weekendRit, afstandKMInp) 
print(ritprijs2) 
+0

Ваш фрагмент кода довольно сложно (и быть не написанное на английском языке, очень сложно понять). Можете ли вы создать [MCVE]? –

+0

@Sone Name, я отбросил изменения, изменив ваш код вопроса, делает ответы устаревшими. –

ответ

0

Проблема в том у вас есть опечатка totaaalPrijs не totaalPrijs так все, что вам нужно сделать, это изменить, чтобы:

totaalPrijs = standaardprijs(afstandKMInp) 

Также вы не должны использовать eval, литой ввод к int:

afstandKMInp = int(input('Hoeveel KM gaat u reizen?')) 

Вы также можете упростить if leeftijd >= 12 and leeftijd <= 65 с помощью прикован сравнения:

if 12 <= leeftijd <= 65: 

И вам не нужно объявлять переменные в Python, так что вы можете удалить totaalPrijs = 0

+0

Спасибо, это сработало! Теперь у меня возникла новая проблема, она не регистрирует leeftijd. В моей функции переменная leeftijd черная, у выходных и afstandKM - серые. Не знаю, что это значит. Но это не подхватывает мой leeftijd if's. Есть идеи? EDIT: ошибка PEP8. Shadows leeftijd из внешнего совок. –

+0

@SomeName, потому что снова 'weekendRit! = Weekendrit', хорошая причина, почему использование строчных букв и подчеркиваний для ваших имен переменных является хорошей идеей, ваш код работает, поскольку функция использует' weekendRit', который вы объявили вне функции в глобальном namespace –

+0

Вау, ладно, хороший звонок. Извините, только что начал python. Отредактировано в основном сообщении. Но это не объясняет, почему leeftijd не работает? Если я вхожу в j вместе с leeftijd 16, он должен возвращать/печатать TP2, но я ничего не получаю –

1

ritprijs(leeftijd, weekendRit, afstandKMInp)

Эта линия не имеет побочных эффектов. Он возвращает значение, но вы никогда никому не назначаете его.

Вы должны присвоить возвращаемое значение переменной:

some_value = ritprijs(leeftijd, weekendRit, afstandKMInp) 
print(some_value) 
+0

Отредактировал мой код. Теперь он все равно дает мне 0 в качестве выхода. + Поскольку у меня есть возврат к каждому возможному результату, мне не нужно печатать из-за пределов моих функций? –

+0

@SomeName, если вы используете код за пределами оболочки, вам нужно распечатать, чтобы увидеть возвращаемые значения. –

+0

Запуск в PyCharm. Но я получаю 2 результата сейчас, оба 0. Так что мое возвращение работает –

Смежные вопросы