Elementary 問題 Fizz Buzz
3で割り切れたらFizz、5で割り切れたらBuzz、15で割り切れたらFizz Buzzを、それ以外ではそのままの番号を(文字列で)返す問題
def checkio(x): ans = (x%3 == 0)*'Fizz' + (x%15 ==0)*' ' + (x%5 ==0)*'Buzz' if ans =='': return str(x) else: return ans
としていたが、他の人の答えをみて勉強。
空の文字列はFalse、そうでない文字列はTrueのようにif文の中で扱うことが出来るらしい。ということで、
def checkio(x): ans = (x%3 == 0)*'Fizz' + (x%15 ==0)*' ' + (x%5 ==0)*'Buzz' return ans if ans else str(x)
Lambdaで一行にかっこよくできたらすっきりするが。。
類似の一つ前の問題(最大の数と最小の数の差を求めるが、空の時は0を返す)は上記を利用して、すっきり
checkio = lambda *x: max(x)-min(x) if x else 0