我正在编写一个返回火车价格的程序。当我运行该函数时,没有任何返回。
def transit(zone, ticket):
fareLst = ['23', '11.5', '34.5']
if zone < 2 and ticket == 'adult':
return fareLst[0]
elif zone < 2 and ticket == 'child':
return fareLst[1]
elif zone > 4 and ticket == 'adult':
return -1
def main():
transit(1, 'adult') # the function is not returning the fareLst = 23
main()
函数is返回值;你只是没有用它做任何事情。如果需要,您可以打印它:
def main():
print transit(1, 'adult')
return
与在屏幕上打印内容不同;返回值是这样使用的,例如:
smth = transit(1, 'adult')
您不希望您返回的所有内容都被自动打印出来。
另外,您应该使用正确的浮点值来存储浮点数据,而不是字符串:
fareLst = [23.0, 11.5, 34.5]
另外,请注意,如果您调用
transit(5, 'child')
,它不会返回任何内容/None
...所以您可能希望在 if-elif
块的末尾添加此内容:
else:
return -1
而不是:
elif zone > 4 and ticket == 'adult':
return -1
...虽然
None
也可能是一个可行的选择,例如完全无效的输入;但话说回来,在这种情况下,例外会更好。
如果您只想打印结果,请执行以下操作:
def main():
print transit(1,'adult')
或者如果您想存储变量并稍后打印它,请执行以下操作:
def main():
result = transit(1,'adult')
#do something
print result
其他人已经提到您没有存储返回值,但我还要补充一点,您最后没有默认的“基本情况”。在此代码中:
def transit(zone, ticket):
fareLst = ['23', '11.5', '34.5']
if zone < 2 and ticket == 'adult':
return fareLst[0]
elif zone < 2 and ticket == 'child':
return fareLst[1]
elif zone > 4 and ticket == 'adult':
return -1
如果
zone
等于2、3或4怎么办?如果 zone
是 4 但 ticket
是子元素怎么办?所有这些都会结束,函数的默认返回值是None
。这可能不是你想要的。如果没有,请添加诸如 return 20
之类的内容或任何合理的默认票价。
此外,像上面最后一种情况那样返回哨兵值也不是Pythonic。更 Pythonic 的方法是,如果参数错误,则引发
ValueError
,然后将调用代码包装在 try/except
块中。这就没有任何歧义的余地,并且检查返回值是一件令人头疼的事情。