def Fitness(a, b, c):
if ((a&b&c) >= 4) & ((a+b+c) >= 13):
return('Gold')
if ((a&b&c) >= 3) & ((a+b+c) >= 10):
return('Silver')
if ((a&b&c) >= 2) & ((a+b+c) >= 07):
return('Pass')
else:
return('Fail')
现在问题是当给出Fitness(2,2,5)
时,控件跳转到默认值即。 '失败'。
实际输出在哪里是'通过'。 ?
答案 0 :(得分:17)
答案 1 :(得分:5)
使用and
代替&
(二进制和)。并且不要写07
- 以0
开头的数字可能会被解释为八进制,具体取决于您的Python版本。
与霍华德的灵感一起,我建议:
def Fitness(a, b, c):
if all(x>=4 for x in (a,b,c)) and (a+b+c) >= 13:
return('Gold')
if all(x>=3 for x in (a,b,c)) and (a+b+c) >= 10:
return('Silver')
if all(x>=2 for x in (a,b,c)) and (a+b+c) >= 7:
return('Pass')
return('Fail')
此外,你很遗憾没有获得铜牌......
答案 2 :(得分:3)
实际输出在哪里是'通过'。
不,不是。 2(0b010)& 2& 5(0b101)为0,因此即使您将&
更改为将and
分隔为{{1}},表达式也将全部失败。也许你打算使用完全不同的表达方式?
答案 3 :(得分:2)
我发布这篇文章是对Tim Pietzcker的答案的评论,因为它只是对它的改进,但评论字段会弄乱格式化,所以我将它作为一个单独的答案。
def fitness(*args):
arg_sum = sum(args)
smallest_arg = min(args)
if smallest_arg >= 4 and arg_sum >= 13:
return 'Gold'
if smallest_arg >= 3 and arg_sum >= 10:
return 'Silver'
if smallest_arg >= 2 and arg_sum >= 7:
return 'Pass'
return 'Fail'
首先是重要的事情:
return('Gold')
中,这本身并没有错,但会让读者感到困惑; return
是一个陈述,而不是一个功能。它仍然有效,因为括号生效silently ignored。如果您想要的是事实上返回一个包含单个字符串元素的元组,请执行return ('Gold',)
。if
块中的计算值,如上所示。由于参数都被平等对待并一起处理,因此将它们收集在*args
元组中。这也将概括函数以使用任意数量的参数。如果不允许这样做,请将其添加到函数的开头:
if len(args) != 3:
raise TypeError("Need exactly 3 arguments, got {0}".format(len(args)))
最后,根据python style guide,我只会提到函数应该lower_case_names
。风格指南当然不是强制性的,只是推荐。 :)
答案 4 :(得分:-1)
def fitness(*args):
arg_sum = sum(args)
smallest_arg = min(args)
if smallest_arg >= 4 and arg_sum >= 13:
return 'Gold'
if smallest_arg >= 3 and arg_sum >= 10:
return 'Silver'
if smallest_arg >= 2 and arg_sum >= 7:
return 'Pass'
return 'Fail'