为了账号安全,请及时绑定邮箱和手机立即绑定

如何在函数中存储公式作为字符串稍后输出?

如何在函数中存储公式作为字符串稍后输出?

慕神8447489 2021-09-02 20:31:22
我正在尝试创建一个函数,我将在其中存储转换器的公式。当需要 X 公式时,它会被调用。当使用简单的0:a+b尝试它 时,它在返回时起作用,但是当尝试将其存储为字符串meter_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 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

要在 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()

    }


查看完整回答
反对 回复 2021-09-02
?
心有法竹

TA贡献1866条经验 获得超5个赞

如果这些总是简单的函数,您可以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

它有点复杂,但可能更容易阅读和理解。


查看完整回答
反对 回复 2021-09-02
?
白板的微信

TA贡献1883条经验 获得超3个赞

尝试将您的功能更改为:


def my_formulas(i):

    switcher = (i/0.3048)


    return switcher

函数中的“i”是函数的局部变量。在您的代码中,您将 0 传递给 my_formulas() 函数。i 然后变为 0,但 meter_input 超出了该函数的范围。



查看完整回答
反对 回复 2021-09-02
  • 3 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信