如何在函数中将公式存储为字符串以供以后输出?

时间:2018-12-01 18:20:33

标签: python

我正在尝试创建一个函数,在其中存储转换器的公式。当需要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()

3 个答案:

答案 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超出了该函数的范围。