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)じゃなくてってことか。