Python:这个Python代码有什么问题?

时间:2013-08-18 05:59:31

标签: python python-3.x

# Define a procedure, median, that takes three
# numbers as its inputs, and returns the median
# of the three numbers.

# Make sure your procedure has a return statement.

def bigger(b,c):
    if b > c:
        return b
    else:
        return c
# if b is returned, then b >c
# if c is returned, then c > b 

def biggest(a,b,c):
    return bigger(a,bigger(b,c))


def median(a,b,c):
    if biggest(a,b,c) == c and bigger(a,b) ==a:
        # c > b and c > a 
        # a > b 
        return a
    elif biggest(a,b,c) == c and bigger(a,b)==b:
        # 
        return b
    else:
        return c 


print(median(1,2,3))
#>>> 2    (correct)

print(median(9,3,6))
#>>> 6    (correct)

print(median(7,8,7))
#>>> 7    (correct)

print(median(3,2,1)
#>>> 1    (incorrect)

当我使用上面的三个打印件运行它时它完全正常,但是当尝试不同的打印时输出不正确。例如,当我尝试打印中位数(3,2,1) 输出为1,这是一个错误的答案。这段代码有什么问题,我该如何解决?

2 个答案:

答案 0 :(得分:3)

如果c不是最大的,则始终返回c。这包括它是最小的。

修复它?好吧,我只是做

return sorted([a, b, c])[1]

但是因为这看起来像是家庭作业,所以答案可能过于依赖于图书馆而对你自己的批判性思维太少。相反,如果你找到了最大的输入,然后返回其他两个中较大的一个怎么办?

答案 1 :(得分:1)

是的,我知道这是你的功课,但我无法抗拒。这是一种不使用排序的方法(我认为它有效)。

def median(a, b, c):

    if (a >= b and b >= c) or (c >= b and b >= a):
        return b
    elif (a >= c and c >= b) or (b >= c and c >= a):
        return c
    else:
        return a