# 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,这是一个错误的答案。这段代码有什么问题,我该如何解决?
答案 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