Python 条件语句

1 投票
5 回答
23200 浏览
提问于 2025-04-16 23:03
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.

我觉得你指的是第二种情况,也就是所有的值都大于二。(第一种情况是对你所有的值进行一个按位与操作,然后把结果和二进行比较。)

撰写回答