Нужно разобраться с вызовами функций

В настоящее время я делаю некоторый обзор для своего экзамена, и у меня странная проблема, или я мог наблюдать за чрезвычайно простой ошибкой, которую я по какой-то причине не могу уловить. Я тренируюсь с функциями и передачей параметров между этими функциями, и я создал действительно простую программу, чтобы убедиться, что я понял основы:

 def temperature(celsius, fahrenheit):
      celsius = 15
      fahrenheit = 59
      print("The current temperature in C is: ", celsius)
      print("The current temperature in F is: ", fahrenheit)
      return(celsius, fahrenheit)

 temperature(celsius, fahrenheit)

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

Теперь проблема в том, что когда я пытаюсь запустить это, он говорит мне, что переменные, которые должны быть переданы, даже не распознаются при запуске программы. Может кто-нибудь объяснить, почему это проблема?

И для дальнейшего использования, если я хочу передать эти переменные между 2 или более функциями, как я это сделаю?

ОБНОВЛЕНИЕ: добавление следующего текста для дальнейшего уточнения

Вот некоторый код, который мой профессор предоставил мне в качестве образца. Как он передает эти локальные переменные?

def introduction ():
    print ("""
Celsius to Fahrenheit converter
-------------------------------
This program will convert a given Celsius temperature to an equivalent
Fahrenheit value.

    """)

def display(celsius, fahrenheit):
    print("")
    print("Celsius value: ", celsius)
    print("Fahrenheit value:", fahrenheit)

def convert():
    celsius = float(input("Type in the celsius temperature: "))
    fahrenheit = celsius * (9 / 5) + 32
    display(celsius, fahrenheit)

def start():
    introduction ()
    convert ()

start()

3 ответа

Решение

У вас проблемы с пониманием работы функций...

Объем переменных, определенных внутри функции, не превышает самой функции. То есть, если вы выходите из функции, эти переменные (если они не являются глобальными) больше не существуют.

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

celsius = 15
fahrenheit = 59
def temperature(celsius, fahrenheit):
      print("The current temperature in C is: ", celsius)
      print("The current temperature in F is: ", fahrenheit)
      return(celsius, fahrenheit)

и назовите это так:

temperature(celsius, fahrenheit)

Или используя ключевые слова:

def temperature(celsius=15, fahrenheit=59):
      print("The current temperature in C is: ", celsius)
      print("The current temperature in F is: ", fahrenheit)
      return(celsius, fahrenheit)

Называя это так:

temperature() # --> use the default parameters
#or 
temperature(celsius=0, fahrenheit=10) --> change the values of your parameters

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


Обновление:

Значение переменной celsius задается пользователем при наборе значения переменной в консоли:

celsius = float(input("Type in the celsius temperature: "))

Что делает функция convert() делать?:

def convert():
     celsius = float(input("Type in the celsius temperature: ")) #<-- set the value of the variable to that entered by the user thanks to input()
     fahrenheit = celsius * (9 / 5) + 32 # <-- creates the variable from celsius
     display(celsius, fahrenheit) # <-- calls the display function with celsius and fahrenheit being well defined

input принимает значение, введенное пользователем как string Затем он бросает его int,

Перед вызовом температуры (Цельсия, Фаренгейта) необходимо определить переменные Цельсия и Фаренгейта.

Например:

def temperature(celsius, fahrenheit):
    celsius = 15
    fahrenheit = 59
    print("The current temperature in C is: ", celsius)
    print("The current temperature in F is: ", fahrenheit)
    return(celsius, fahrenheit)

celsius = 20   
fahrenheit = 15

temperature(celsius, fahrenheit)

Тогда это будет работать.

Вы получаете сообщение об ошибке, потому что область действия переменных, которые вы объявили 'celsius' и 'farenheit', является локальной для функции temparature(), вы должны объявить ее вне функции, чтобы их область не была ограничена.

 def temperature(celsius, fahrenheit):
  print("The current temperature in C is: ", celsius)
  print("The current temperature in F is: ", fahrenheit)
  return(celsius, fahrenheit)

celsius = 15
fahrenheit = 59
temperature(celsius, fahrenheit)
Другие вопросы по тегам