2016-12-08 4 views
0

Я пишу простую программу, которая импортирует функции из другой программы. Он в основном преобразует Фаренгейта в цель или наоборот, в зависимости от того, какой вклад вы его дадите. Вот код основной программы:Импортированная переменная не определена

temp = int(input('What is the temperature? ')) 
print('Is this temperature in fahrenheit or celsius?') 
system = int(input('Please put 1 for Fahrenheit and 2 for Celsius: ')) 
if system == 1: 
    from tempconvert import celsius 
elif system == 2: 
    from tempconvert import fahrenheit 
else: 
    print('I dont understand.') 

А вот код программы функции импортируемого поступают из:

def fahrenheit(): 
    fahrenheit = temp * 1.8 + 32 
def celsius(): 
    celcius = temp - 32 
    celsius = celcius/1.8 

Когда я иду сделать это, он будет принимать температуру I войдите, и он примет различие между Фаренгейтом и Цельсием. Но тогда он скажет, что temp в импортированных функциях не определен. Но я думал, что это будет определено основной программой. Поэтому любые предложения относительно того, как исправить это, приветствуются, потому что я застрял.

ответ

0

Да, имена, определенные в функции будут выглядеть в глобал модуля они определены в, не модуля они импортируются в.
Всех объектов функции имеют скрытый атрибут с именем __globals__ который содержит ссылку на словарь, содержащий имена, доступные в модуле , определяющем модуль.

Вам необходимо определить свои функции с помощью соответствующего аргумента temp и передать это при вызове.

def fahrenheit(temp): 
    fahrenheit = temp * 1.8 + 32 

def celsius(temp): 
    celcius = temp - 32 
    celsius = celcius/1.8 

это также имеет приятный побочный эффект, который temp, как локальное имя для функций, загружается немного быстрее :-)

+0

Ой, я не могу поверить, что не осознавал этого. Благодаря! –

1

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

def fahrenheit(temp): 
    fahrenheitTemp = temp * 1.8 + 32 
    return fahrenheitTemp 

def celsius(temp): 
    celciusTemp = temp - 32 
    celciusTemp = celciusTemp/1.8 
    return celciusTemp 

Далее вам нужно изменить свой основной блок кода. Прямо сейчас вы правильно импортируете функцию из другого модуля, но вы ее не используете. Для того, чтобы использовать ваши функции использовать имя, указанные после def ключевого слова в другом модуле с () в конце, и поставить все параметры, указанные внутри ()

Позволяет попробовать принимать в текущей температуре и мимоходом, что к вашему а затем возвращает и распечатает преобразованную температуру. Здесь:

temp = int(input('What is the temperature? ')) 
print('Is this temperature in fahrenheit or celsius?') 
system = int(input('Please put 1 for Fahrenheit and 2 for Celsius: ')) 

if system == 1: 
    from tempconvert import celsius 
    print(celsius(temp))  

elif system == 2: 
    from tempconvert import fahrenheit 
    print(fahrenheit(temp)) 

else: 
    print('If at first you don't succeed... try try again!') 

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

  • Нет связанных вопросов^_^