Смущает вторая функция

#python #function

Вопрос:

Я запутался в своем коде, я думаю, что все сделал правильно, но я не уверен, как заставить работать вторую часть моего кода, функцию «total_costs». Я просмотрел много видео сейчас, но, похоже, не могу найти ни одного об этом, не мог бы кто-нибудь объяснить мне, почему я не могу заставить работать вторую часть моего кода?

 def get_input():  e1 = float(input("What is the monthly expense for House Payment. "))  e2 = float(input("What is the monthly expense for Homeowners Insurance. "))  e3 = float(input("What is the monthly expense for Car Payments. "))  e4 = float(input("What is the monthly expense for Car Insurance. "))  e5 = float(input("What is the monthly expense for Utilities. "))  print("The monthly expenses total to",format(monthly, ',.2f'))  print("The yearly expenses total to",format(yearly, ',.2f'))    def total_costs():  monthly = e1   e2   e3   e4   e5  yearly = monthly * 12  return monthly, yearly      get_input()  

Ответ №1:

Вы используете e1,e2,e3,e4,e5 в качестве переменных функций, поэтому область действия ограничена get_input только функциями, вы не можете использовать эти переменные вне get_input функции, пока не укажете их глобально.

Более того, вы не вызываете total_cost функцию.

Проблема в том, что вы используете переменные в локальной области и не вызываете функцию.

Ответ №2:

С вашим кодом есть несколько проблем. Во-первых, вы не звоните total_costs() , поэтому он никогда не будет выполнен. Вы также не фиксируете результат.

Давайте все переставим:

 def get_input():  e1 = float(input("What is the monthly expense for House Payment. "))  e2 = float(input("What is the monthly expense for Homeowners Insurance. "))  e3 = float(input("What is the monthly expense for Car Payments. "))  e4 = float(input("What is the monthly expense for Car Insurance. "))  e5 = float(input("What is the monthly expense for Utilities. "))  monthly, yearly = total_costs()  print("The monthly expenses total to",format(monthly, ',.2f'))  print("The yearly expenses total to",format(yearly, ',.2f'))  def total_costs():  monthly = e1   e2   e3   e4   e5  yearly = monthly * 12  return monthly, yearly   get_input()   

Лучше, но когда вы попытаетесь, он будет жаловаться на то, что не знает о e1. Это потому, что, хотя может показаться, что это так, total_costs не знает о e1 других переменных. Вам нужно явно передать его.

 #!/usr/bin/env python3 def get_input():  e1 = float(input("What is the monthly expense for House Payment. "))  e2 = float(input("What is the monthly expense for Homeowners Insurance. "))  e3 = float(input("What is the monthly expense for Car Payments. "))  e4 = float(input("What is the monthly expense for Car Insurance. "))  e5 = float(input("What is the monthly expense for Utilities. "))  monthly, yearly = total_costs(e1, e2, e3, e4, e5)  print("The monthly expenses total to",format(monthly, ',.2f'))  print("The yearly expenses total to",format(yearly, ',.2f'))  def total_costs(e1, e2, e3, e4, e5):  monthly = e1   e2   e3   e4   e5  yearly = monthly * 12  return monthly, yearly   get_input()   

Теперь все работает так, как вы и ожидали. Теперь вам не обязательно было бы так структурировать свой код. Например, кажется , что для того , что вы делаете, не get_input потребуется своя собственная функция, и, возможно, вместо всех этих отдельных переменных, таких как e1 , у вас может быть структура, подобная списку или словарю, в которую вы перейдете total_costs , но вы узнаете об этом достаточно скоро.

Ответ №3:

Нет нигде, что total_costs называется.

Комментарии:

1. Что ты имеешь в виду? как мне это назвать? извините, я все еще довольно новичок в кодировании

2. хорошо, так что get_input() будет работать, потому что вы вызвали функцию get_input. Я нигде не вижу в вашем коде, что total_costs вызывается total_costs()

3. @LastCheck Я насчитал 15 вызовов функций в вашем коде, так что вы знаете, как это сделать.

4. Я не совсем уверен в терминах некоторых вещей, я не знал, что нижняя часть того, что я набрал, считалась вызовом

5. если вы хотите использовать ежемесячно и ежегодно в total_costs после get_input (), то get_input должен «возвращать ежемесячно, ежегодно» в конце функции get_input().

Ответ №4:

Во-первых, total_costs() не называется. Если он не был вызван, как вы можете ожидать, что он будет выполнен?

А, во-вторых, даже если вы позвоните total_costs , это все равно даст о себе NameError: name 'e1' is not defined знать . Это связано с тем, что переменные в get_input() являются локальными переменными и, следовательно, удаляются при завершении get_input() функции.

Поэтому вам нужно либо возвращать переменные из get_input() , либо использовать global ключевое слово , чтобы они не ограничивались get_input() , хотя я настоятельно рекомендую вам использовать первый метод, потому global что это превращает отладку в кошмар.

Код:

 def get_input():  e1 = float(input("What is the monthly expense for House Payment. "))  e2 = float(input("What is the monthly expense for Homeowners Insurance. "))  e3 = float(input("What is the monthly expense for Car Payments. "))  e4 = float(input("What is the monthly expense for Car Insurance. "))  e5 = float(input("What is the monthly expense for Utilities. "))  print("The monthly expenses total to",format(monthly, ',.2f'))  print("The yearly expenses total to",format(yearly, ',.2f'))  return e1,e2,e3,e4,e5  def total_costs():  monthly = e1   e2   e3   e4   e5  yearly = monthly * 12  return monthly, yearly  get_input() total_costs()  

или

 def get_input():  global e1,e2,e3,e4,e5  e1 = float(input("What is the monthly expense for House Payment. "))  e2 = float(input("What is the monthly expense for Homeowners Insurance. "))  e3 = float(input("What is the monthly expense for Car Payments. "))  e4 = float(input("What is the monthly expense for Car Insurance. "))  e5 = float(input("What is the monthly expense for Utilities. "))  print("The monthly expenses total to",format(monthly, ',.2f'))  print("The yearly expenses total to",format(yearly, ',.2f'))  def total_costs():  monthly = e1   e2   e3   e4   e5  yearly = monthly * 12  return monthly, yearly  get_input() total_costs()