[英]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.