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