2019-10-28に更新

The Zen of Python 邦訳

The Zen of Python

って知ってますか?

知らないっていう人は、Pythonインタプリタを立ち上げて、import thisしましょう。

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

こんな感じのやつ。
何番煎じかわからないけれど、邦訳してみます。

The Zen of Python, by Tim Peters 日本語訳版

  1. 醜いよりは美しい方がいい。
  2. 暗黙よりは明示の方がいい。
  3. 複雑よりも単純な方がいい。それでも、ワケわからなくなるよか複雑な方ががマシ。
  4. ネストするよりフラットな方がいい。
  5. 詰め込んであるよりも空白が多い方がいい。
  6. 読みやすさは重要だ。
  7. 特別な場合であっても、ルールを破るに足る特別な理由にはならない。しかしながら、純粋さよりは実用性の方が大事。
  8. エラーを無視してはいけない。明示的に握り潰すなら別だけれども。
  9. 曖昧さを前にして、推測で済まそうとしてはいけない。
  10. あることをする明白な方法が1つあり、しかも1つしかないのが好ましい。あなたがオランダ人でもない限り、はじめは明白には思えないにしても。
  11. やらないよりは今やった方がいい。とはいえ、やらない方が今すぐやるよりもいいことはしばしばある。
  12. 実装を説明するのが難しいなら、それは悪いアイデアだろう。もし、実装を説明するのが簡単なら、それは良いアイデアかもしれない。
  13. 名前空間は1つのとてもいい考え。そういうのをもっとやろう!

ゆるっとしたコーディングや設計に関する指針で、結構ためになります。The Zen of Pythonという名前ですが、Python以外でもこの考え方は通用します。

初心を忘れないためにも、時々import thisするのはいいアイデアなのではないでしょうか?

そういえば

this.sという変数にこの文章が入っています。

s = """Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""

いわゆる換字式暗号ってやつですね。換字表はthis.dで得られます。

d = {'A': 'N', 'B': 'O', 'C': 'P', 'D': 'Q', 'E': 'R', 'F': 'S', 'G': 'T', 'H': 'U', 'I': 'V', 'J': 'W', 'K': 'X', 'L': 'Y', 'M': 'Z', 'N': 'A', 'O': 'B', 'P': 'C', 'Q': 'D', 'R': 'E', 'S': 'F', 'T': 'G', 'U': 'H', 'V': 'I', 'W': 'J', 'X': 'K', 'Y': 'L', 'Z': 'M', 'a': 'n', 'b': 'o', 'c': 'p', 'd': 'q', 'e': 'r', 'f': 's', 'g': 't', 'h': 'u', 'i': 'v', 'j': 'w', 'k': 'x', 'l': 'y', 'm': 'z', 'n': 'a', 'o': 'b', 'p': 'c', 'q': 'd', 'r': 'e', 's': 'f', 't': 'g', 'u': 'h', 'v': 'i', 'w': 'j', 'x': 'k', 'y': 'l', 'z': 'm'}

そこで、この暗号を復号するプログラムをPythonで書いてみてください。
sys.stdoutio.StringIOとかに差し替えてからimport thisは復号プログラムを書いたとは言いませんよ。

正答例

print(''.join(map(lambda x: this.d.get(x, x), this.s)))

frodo821

Pythonをこよなく愛するプログラマ。広く浅くアンテナを張っている(つもり)。 出来ることと言えばフロントエンド全般やJava、Kotlinを使ったアプリ開発、PHP/Pythonでバックエンドが少々にC#、Python、Java、Kotlin、Scalaなどを使ったデスクトップ開発くらいのもの。PyPIで自作ライブラリ公開したりもしている。https://pypi.org/project/rattlepy/ https://pypi.org/project/groom/ 好きなフロントエンドフレームワークはReact、バックエンドフレームワークはCodeIgniterとMasonite。自分のサイトもReactを使って構築した。

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント