新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

if文をfizzbuzzで試してみる

2021-08-24 19:44:29 | Python

 Pythonの教科書で、breakとcontinueの説明で、fizzbuzzがありました。3で割り切れる場合はfizzで、5で割り切れる場合はbuzzで両方で割り切れる場合、つまり15で割り切れる場合はfizzbuzzと出力します。ある参考書では、(名前は不明)breakとcontinueは使わないでも、書けると説明がありました。

ifとelseを素直に対応させていくと、上のようになると思います。

elifを使っても書けます。一番わかり易いのかもしれません。


コメント (5)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Pythonのif文はインデントが... | トップ | Pythonは全てオブジェクトと... »
最新の画像もっと見る

5 コメント

コメント日が  古い順  |   新しい順
リスト内包表記 (cametan_42)
2021-09-01 01:33:58
Pythonらしい書き方だと、例えば、

["fizzbuzz" if i % 15 == 0 else "fizz" if i % 3 == 0 else "buzz" if i % 5 == 0 else i for i in range(1, 21)]

なんて書き方がありますね。
どうしてもprintしたい、とか言うなら例えば

[print(j) for j in ["fizzbuzz" if i % 15 == 0 else "fizz" if i % 3 == 0 else "buzz" if i % 5 == 0 else i for i in range(1, 21)]]

と言うワンライナーがあります。
返信する
コメント有難うございます (isam)
2021-09-01 19:54:00
スマートな書き方もあるんですね。知りませんでした。性格が素直といいますか、アサハカなもので、そのまま、書いてみました。
単純こそ全て、難しいことは基本、得意でないのです。
返信する
Unknown (cametan_42)
2021-09-01 23:06:17
> そのまま、書いてみました。

なるほど。

敢えていうと、Pythonを使う場合は、例えばC言語等の手続き型言語とちょっと違う発想を要します。
Pythonって言語は設計の初期段階で関数型言語の影響が濃かったのです(実はオブジェクト指向よりそっちの実装の方が早かった模様です)。
ファーストクラスの関数、高階関数と言う機能等、その辺色々と「データをフィルタリング・加工」する発想を関数型言語からたくさん取り入れていて、言い換えるとC言語の影響なんてあまり無いんです。
特に顕著なのがプログラミング言語Haskellから借りてきたリスト内包表記です。
Python2.0から登場した機能ですが、これがPython従来の関数型言語的な機能をまとめました。フィルタリングやデータ改造等思いのまま、です。

リスト内包表記:
https://docs.python.org/ja/3/tutorial/datastructures.html#list-comprehensions

C言語からPythonに来た人とかは比較的嫌ってますが、生え抜きのPythonistaなんかは大好物な機能です。
そして、特筆すべきはフツーのfor文なんかより速いんですよ。最適化が施されています。
Pythonを使うならリスト内包表記を使わないでどうすんだ、ってくらい愛されてる機能です。
是非ともリスト内包表記を愛用してください。
返信する
cametan_42コメントありがとうございます。 (isam)
2021-09-02 09:21:00
手続き型言語は、ほとんど無縁です。趣味ですが。唯一近かったのが、Scalaです。コップ本を半分程度で諦めました。
返信する
scalaは (cametan_42)
2021-09-02 13:13:27
> 唯一近かったのが、Scalaです。

ああ、なるほど。
うん、ScalaってRubyに近いんですが、両者とも関数型言語の影響が濃い言語ですね。僕はScalaそのものは触ったことはないですが・・・・・・(TwitterがRubyからScalaに変えたのはその辺でしょうけど)。
と言う事はisamさんは関数型言語の勉強をした、って考えていいと思います。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Python」カテゴリの最新記事