-2
# 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)

当我使用上面的这三个打印运行它时,它工作得非常好,但是当尝试不同的打印时,输出不正确。例如,当我尝试 print median(3,2,1) 时,输出为 1,这是一个不正确的答案。这段代码有什么问题,我该如何解决?

4

2 回答 2

3

如果c不是最大的,你总是返回c。这包括它最小的时候。

要解决这个问题?好吧,我就这么做

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

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

于 2013-08-18T06:02:45.160 回答
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
于 2013-08-18T07:13:45.010 回答