我正在编写一个从其他程序导入函数的简单程序。它基本上将华氏温度转换为摄氏温度,反之亦然,具体取决于您给出的输入类型。这是主程序的代码:
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
当我去做的时候,它会接受我输入的温度,并且它会接受华氏温度和摄氏温度之间的区别。但是,它会说导入函数中的temp
未定义。但我认为它将由主程序定义。所以关于如何解决这个问题的任何建议都是值得欢迎的,因为我被困了。
答案 0 :(得分:1)
首先,您需要确保您的函数采用参数,在本例中为temp。您还希望函数返回主代码块的值
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!')
答案 1 :(得分:0)
是的,函数中定义的名称将查看模块的全局变量它们在中定义,不是它们导入的模块。
所有函数对象都有一个名为__globals__
的隐藏属性,该属性保留对包含定义模块中可用名称的字典的引用。
您需要使用适当的参数temp
定义函数,并在调用时将其传递。
def fahrenheit(temp):
fahrenheit = temp * 1.8 + 32
def celsius(temp):
celcius = temp - 32
celsius = celcius / 1.8
这也有一个很好的副作用,temp
,作为函数的本地名称,加载速度更快:-)