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

bar*_*kyo 2 python arguments function

所以首先让我说我是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)
Run Code Online (Sandbox Code Playgroud)

如果您能够解释函数如何相互调用,那么我们将非常感激.

谢谢!

固定版本(仍在工作)

    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()
Run Code Online (Sandbox Code Playgroud)

Bri*_*and 5

我对您的代码进行了一些更改.像处理问题一样对待函数.当你调用这个函数时; 你在问这个问题.你传递的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()
Run Code Online (Sandbox Code Playgroud)

  • refaim的说法是,返回会让你无论如何都会脱离这个功能,虽然在精神上更正确,但如果有块,那么elif只会做3个.实际上,您可以将"返回成本"移动到最后,而不是重复这么多代码.正如您所说,许多改进代码的方法和您对函数的一般指导是可靠的.这感觉就像是一个家庭作业问题,所以我不愿意将其重新设计成一个理想的解决方案. (2认同)