FizzBuzz

どうしてプログラマに・・・プログラムが書けないのか?

Python でやってみた。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

for i in range(100):
    j = i + 1
    if j % 3 == 0:
        if j % 5 == 0:
            print "FizzBuzz"
        else:
            print "Fizz"
    elif j % 5 == 0:
        print "Buzz"
    else:
        print j

何のヒネリも無いコードで 6 分も掛かった、私はこの人の会社にはいけないようだ。
というか後で気がついたが

for j in range(1, 101):

と書けばいいことを忘れていた、しょんぼり。

Fizz Buzz – Wikipedia

リンク先を見ると本当に日本人はワンライナーが大好きなんだなーと思う。
海外で FizzBuzz を探すとだいたいどの言語でもこんな感じなんですけどね。

Geek School ? Get Hired With FizzBuzz

実際の話、ワンライナーで書けたところで実践に役立つとは思えない。
剰余(%記号等)を用いないなんて何が目的なのかさえ解らないのだが。
そんなことよりユーザー入力がまったく無いプログラムに凝ってどうするの?と。

まず fizz と buzz という整数を保持する変数を用意してユーザーに数値を入力させる。
fizz の倍数のときは数の代わりに「Fizz」
buzz の倍数のときは「Buzz」
fizz, buzz 両方の倍数の場合には「FizzBuzz」
どちらにも該当しないなら数値そのままの文字列
の値を返す関数を使って 1 から 100 までの数をプリントするプログラムを書け。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

print "\nFizz と Buzz の値を指定してください"
fizz = input("Fizz=")
buzz = input("Buzz=")

def fizzbuzz(n):
    if n % fizz == 0:
        if n % buzz == 0:
            return "FizzBuzz"
        else:
            return "Fizz"
    elif n % buzz == 0:
        return "Buzz"
    return str(n)

for i in range(1, 101):
    print fizzbuzz(i)

みたいな感じのほうが実践的かなと。
初めはつい関数の最後で else を入れちゃうんだよね、いらないのに。