ひるあんどんブログ

色々なことに手を出してみるブログ

The Most Numbers

数を使ってみましょう。

数(浮動小数点数)の配列が与えられます。 あなたは最大の要素と最少の要素の差を求めなければいけません。 あなたの関数は不定個の入力パラメータを扱えなければいけません。 空の入力パラメータについては、0を返さなければいけません。

浮動小数点数はコンピュータハードウェアの内部では基数2(2進数)の分数で表現されています。 (ここを読んでみてください)。 我々は±0.001の精度で結果を判定します。

ヒント: 以下を使って、どのように動作するか考えてください。 任意個の関数パラメータ.

入力: 任意個の関数パラメータ、数 (整数、浮動小数点数)。

出力: 最大値と最小値の差、数 (整数、浮動小数点数)。

例:

checkio(1, 2, 3) == 2

checkio(5, -5) == 10

checkio(10.2, -2.2, 0, 1.1, 0.5) == 12.4

checkio() == 0


どのように使われるか: ここであなたは不定個の関数パラメータが渡されることについて学ぶでしょう。

事前条件: 0 ≤ len(args) ≤ 20
all(-100 < x < 100 for x in args)
all(isinstance(x, (int, float) 100 for x in args)

def checkio(*args):
    if len(args) == 0: return 0
    max_n = max(args)
    min_n = min(args)
    return max_n - min_n 

#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
    def almost_equal(checked, correct, significant_digits):
        precision = 0.1 ** significant_digits
        return correct - precision < checked < correct + precision

    assert almost_equal(checkio(1, 2, 3), 2, 3), "3-1=2"
    assert almost_equal(checkio(5, -5), 10, 3), "5-(-5)=10"
    assert almost_equal(checkio(10.2, -2.2, 0, 1.1, 0.5), 12.4, 3), "10.2-(-2.2)=12.4"
    assert almost_equal(checkio(), 0, 3), "Empty"

素直にこうやって書いた。


Clear 1位

def checkio(*args):

    return max(args) - min(args) if args else 0

あー、そっかぁ。if argsでargsがあればTrueになるから、なかったらFalseになるのかぁ。賢いなぁ。

creative

checkio=lambda*a:len(a)and max(a)-min(a)

len(a)が0(False)じゃなくてってことか。