python; checkio日記

checkioを中心にpythonプログラミングの記録

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