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

上記の 3 つのプリントで実行すると問題なく動作しますが、別のプリントを試すと出力が正しくありません。たとえば、 print median(3,2,1) を試したとき、出力は 1 でした。これは間違った答えです。このコードの問題は何ですか?どうすれば修正できますか?

4

2 に答える 2

3

cが最大でない場合は、常に を返しcます。それには、最小の場合も含まれます。

それを修正するには?まあ、私はただやります

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

しかし、これは宿題のように見えるので、その答えはおそらくライブラリに依存しすぎており、自分自身の批判的思考にほとんど依存していません. 代わりに、最大の入力を見つけて、他の 2 つのうち大きい方を返したらどうなるでしょうか?

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