Python 条件语句
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)
时,程序的控制流跳到了默认情况,也就是'失败'。而实际上应该输出的是'通过'。这是怎么回事呢?
5 个回答
3
实际的输出是'通过'。
其实不是。2(0b010)和2以及5(0b101)进行与运算的结果是0,所以这些表达式都会失败,即使你把中间的&
换成and
也一样。也许你是想用一个完全不同的表达式呢?
6
用 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')
还有,真可惜你没有颁发铜牌……
18
注意,
a&b&c >= 2
和下面这个是不同的:
a>=2 and b>=2 and c>=2.
我觉得你指的是第二种情况,也就是所有的值都大于二。(第一种情况是对你所有的值进行一个按位与操作,然后把结果和二进行比较。)