繁体   English   中英

创建许多需要能够在Python中相互调用的函数

[英]Creating a number of functions that need to be able to call each other in Python

因此,首先让我说我是Python的新手,目前函数似乎还不了解我,但是我遇到麻烦的地方是让3个函数能够相互调用。 这是我的代码(是的,我知道这是完全错误的,但是您应该看到我要去的地方):

def menu():
    count=gearboxes
    cost=subtotal
    return subtotal


def quantity():

    gearboxes=raw_input("How many gearboxes would you like to order? ")

    return menu()



def subtotal(cost):
    if (gearboxes<=10):
        cost=gearboxes*100.0
        print cost
    elif (gearboxes>10 and gearboxes<20):
        cost=(gearboxes-10)*80.0+1000.0
        print cost
    elif (gearboxes>20):
        cost=(gearboxes-20)*70.0+1000.0+800.0
        print cost
    else:
        print "wtf m8"

    return menu()

def summary():
    print "="*80
    print "%60s %20f %20f" % ("motors",count,cost)
    print "="*80


print quantity()
print subtotal(menu)
print summary(menu)

有了它,如果您还可以解释函数之间如何相互调用的方式,对您的帮助将不胜感激。

谢谢!

固定版本(仍在工作)

    def quantity():
        motors=raw_input("How many motors would you like to order? ")
        gearboxes=raw_input("How many gearboxes would you like to order? ")
        sensors=raw_input("How many sensor boards would you like to order? ")

        return int(motors),int(gearboxes),int(sensors)



   def subtotal(motors,gearboxes,sensors):

        if motors<=10 and gearboxes<=15:
            motorCost=motors*100
            gearboxCost=gearboxes*50
            sensorCost=sensors*66
            return motorCost, gearboxCost, sensorCost

        if motors>10 and motors<=20 and gearboxes>15 and gearboxes<=30:
            motorCost=(motors-10)*80+1000
            gearboxCost=(gearboxes-15)*40+750
            sensorCost=sensors*66
            return motorCost, gearboxCost, sensorCost

        elif motors>20 and gearboxes>30:
            motorCost=(motors-20)*70+1000+800
            gearboxCost=(gearboxes-30)*30+750+600
            sensorCost=sensors*66
            return motorCost, gearboxCost, sensorCost

    def summary(motors,gearboxes,sensors,motorCost,gearboxCost,sensorCost):
        print "="*80
        print "%60s %20d %20d" % ("motors",motors,motorCost)
        print "%60s %20d %20d" % ("gearboxes",gearboxes,gearboxCost)
        print "%60s %20d %20d" % ("sensor boards",sensors,sensorCost)
        print "="*80


   def menu():

        a,b,c=quantity()
        d,e,f=subtotal(a,b,c)
        summary(a,b,c,d,e,f)
        return


    menu()

我对您的代码进行了一些更改。 将函数视为问题。 当您调用该函数时; 你在问这个问题。 您要return是问题的答案。 因此,当有人要求提供一些变速箱subtotal计时; 我们将退还cost ,无论可能是多少。

然后,我们可以将返回值(答案)存储在变量中,并在以后使用它们。 例如,传递给另一个函数。 尝试遵循信息在程序中的流动方式。

def quantity():
    count=raw_input("How many gearboxes would you like to order? ")
    return int(count)



def subtotal(count):
    if count<=10:
        cost=count*100.0
        return cost
    elif count>10 and count<20:
        cost=(count-10)*80.0+1000.0
        return cost
    elif count>20:
        cost=(count-20)*70.0+1000.0+800.0
        return cost

def summary(count, cost):
    print "="*80
    print "%60s %20f %20f" % ("motors",count,cost)
    print "="*80

def menu():
    items = quantity()
    sub = subtotal(items)
    summary(items, sub)

if __name__ == '__main__':
    menu()

“小计”已经调用menu(),所以我不确定您要问什么,因为您已经在另一个函数中调用了一个函数。

另外,我看不到您的程序应该执行的操作-如果您的函数名称是动词(print_menu,get_menu,set_menu,throw_menu_on_moon,calculate_subtotal等),那么对人类来说更好理解。

另外,在函数中使用的名称(在=的右侧)也必须是已知的,例如

def menu():
    count=gearboxes

没有任何意义(因为“齿轮箱”是未知的-另一方面,“计数”很好,因为它定义了新变量-因为它位于=的左侧)...

请注意,变量仅在定义它们的函数中是已知的,因此

def f():
    gearboxes = 2
def menu():
    count=gearboxes

也没有任何意义。

def f():
    return 2
def menu():
    gearboxes=f()
    count=gearboxes

会很有意义。

阅读

def calculate_subtotal(gearbox_count):

作为“计算齿轮箱总数的小计”。

如果您在外面的任何地方说:

calculate_subtotal(5)
^^^^^^^^^^^^^^^^^^^^^

然后带下划线的部分将被返回的结果替换。

否则,在Python中,代码行(在一个块中)将一遍又一遍地执行-如果您要按顺序执行多项操作,则只需将它们写成一行,一个接一个地写。

“ return”不是“ goto”,“ return”将结果和控制权返回给函数的调用者。 然后将结果“而不是调用”放入程序中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM