簡體   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