#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()