我正在尝试创建一个函数,在其中存储转换器的公式。当需要X公式时,将从中调用它。使用简单的 0:a + b 进行尝试时,返回时可以使用,但是尝试将其存储为字符串 meters_to_foots 时,则无法使用。我需要将该公式存储为某些东西,因为以后需要输出它。这是我遇到问题的代码的一部分。 NameError:名称'meters_input'未定义
def my_formulas(i):
switcher={
0:(meters_input/0.3048)
}
return switcher.get(i,"Invalid formula")
distance_pick=input("Please pick one of the current convertions : \n \n1.Meters to X \n2.Inches to X \n3.Feets to X ")
if(distance_pick=="1"):
cls()
distance_choice = input ("Please select which converter would you like to use ! : \n \n1.Meter to Foot \n2.Meter to Yard \n3.Meters to Inches ")
if(distance_choice=="1"):
meters_input=float(input("Make sure to enter distance in Meters ! : "))
my_formulas(0)
print ("\nYou entered", meters_input , "meters, which is equal to",my_formulas(0),"foots.")
time.sleep (3)
cls ()
read_carefully_message()
答案 0 :(得分:1)
如果这些将始终是简单函数,则可以为此使用lambda
表达式:
def my_formulas(i):
switcher= {
0:lambda meters_input: meters_input/0.3048
}
return switcher.get(i,"Invalid formula")
my_formulas(0)(27) #88.58267716535433
如果函数查找始终是从零开始的数字,则最好将函数存储为数组。您也可以执行以下操作:
def my_formulas(index):
def meters2Feet(meters):
return meters/0.3048
def hours2Minutes(hours):
return hours * 60
def invalid(*args):
return "Invalid formula"
lookup = [
meters2Feet,
meters2Feet
]
if index >= len(lookup):
return invalid
return lookup[index]
my_formulas(0)(27) # 88.58267716535433
这有点复杂,但可能更容易阅读和理解。
答案 1 :(得分:1)
要在Python中创建函数,请使用lambda函数或常规函数定义。示例分别是:
def divide(meters_input):
return meters_input / 0.3048
或
divide = lambda meters_input: meters_input / 0.3048
通常,常规函数定义是首选,因为它可以提高可读性。您可以如下定义函数映射:
def my_formulas(i):
switcher={
0:divide # do not write divide()
}
答案 2 :(得分:0)
尝试将功能更改为此:
def my_formulas(i):
switcher = (i/0.3048)
return switcher
函数中的“ i”是函数的局部变量。在您的代码中,您正在将0传递给my_formulas()函数。然后我变成0,但是meters_input超出了该函数的范围。