5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

for と if を書かないFizzBuzz ≪Python≫

Last updated at Posted at 2023-12-16

とある社会人4年目になり、後輩を1人もつ先輩社員となった時のおはなし...

記事を書いた経緯

現在進行形で社会人4年目で後輩1人連れて現場にいるような形でプログラマーとして働いています。
その後輩が入る前に、どのレベルなのか知るために軽い問題を解いてもらいました。
その時、解答を作ったのですが、後々考えると見やすく処理的にもよいはずがつまらない解答を作ったなと思い、今更もう一度作って見せるのも気が引けたのでここで珍解答を紹介します!

問題

その時出した問題の1つの「FizzBuzz」問題のはなしです。
知らない人のために FizzBuzz 問題とは簡単に「1~100の数字で3で割り切れる値ならFizz、5で割り切れる値ならBuzz、3と5どちらでも割り切れる値はFizzBuzzと表示して残りはそのまま数字を出力する」問題です。

回答

※ 考える問題なのでざっくりと書きますが詳細は書きません。
Pythonで書いてもらったのですが、後輩くんが書いてもらった解答はよくある形。

for i in range(100):
    # 3と5で割り切れるケース
    # 3で割り切れるケース
    # 5で割り切れるケース
    # そのまま出力するケース

私のほうでこう書けたらいいねのケースが以下の形。

for i in range(100):
    # A or B and C

上記を再度見て「面白みがないな!!」と思い、for文 と if文が邪魔なんだという思考に行き着いたので書いてみました。

その解答がこんな形!!

def put(val):
    next(val, True) or put(val)
put(map(lambda i: print((not i % 3)*'Fizz'+(not i % 5)*'Buzz' or i), range(1,101)))

最後に

これでFizzBuzz問題からfor文とif文が抜けた!!(^^)v
正直、関数を書いてしまっているので負けた気分...

追記

コメントの内容を元に自分が書いた改良版を作ってみました。
print(a,b,c)のように書いて改行区切りにすればループする必要がないは盲点でした!
ほんと色々な書き方があるんですな!
コメントと修正リクエスト頂いた方々ありがとうございます。大変勉強になりました!

print(*map(lambda i: (not i%3)*'Fizz' + (not i%5)*'Buzz' or i, range(1,101)),sep='\n')
5
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?