implementation von this.py

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

implementation von this.py

Beitragvon Costi » Samstag 17. März 2007, 02:52

hat es irgendein grund warum, im modul "this" (printed den zen of python aus) der zen of python selbst verschluesselt ist?

just for fun?
cp != mv
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Samstag 17. März 2007, 10:52

vermutlich
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 17. März 2007, 18:52

Joghurt hat geschrieben:vermutlich

Das sicher auch, aber es könnte ebenso als Proof of Concept gemeint sein, der zeigt dass man Python-Code durch die Codecs-Mechanik verändern kann.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Samstag 17. März 2007, 20:54

"Simple is better than complex.", ...



Code: Alles auswählen

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!"""

d = {}
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

print "".join([d.get(c, c) for c in s]


:wink:

Meine beschiedene Meinung: Der Code ist vielleicht ein wenig selbst ironisch gemeint. Wen man sich this.py mal anschaut verstößt es gegen einige Zens.

z.B.: Wäre "Simple is better than complex." **und** "There should be one-- and preferably only one --obvious way to do it.":

Code: Alles auswählen

print """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!"""


...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 17. März 2007, 21:21

sape hat geschrieben:z.B.: Wäre "Simple is better than complex." **und** "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. :P

(Wenn wir uns schon an jeden Buchstaben des Zens streng halten müssen.)

(Zum Glück müssen wir das nicht.)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
tiax
User
Beiträge: 152
Registriert: Samstag 23. Juli 2005, 17:28
Kontaktdaten:

Beitragvon tiax » Samstag 17. März 2007, 21:24

Code: Alles auswählen

d = {}
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

print "".join([d.get(c, c) for c in s])


Hui!

Code: Alles auswählen

text.decode('rot13')
Ne invoces expellere non possis
xmpp:florian@florianheinle.de
BlackJack

Beitragvon BlackJack » Samstag 17. März 2007, 22:08

Das ZEN gibt's AFAIK schon länger als die Möglichkeit 'rot-13' als Kodierung anzugeben.

Und Tim Peters ist kein Holländer, also zählt das Argument nicht. :-)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 17. März 2007, 22:17

BlackJack hat geschrieben:Das ZEN gibt's AFAIK schon länger als die Möglichkeit 'rot-13' als Kodierung anzugeben.

Ja, ich habe grad this.py untersucht und eigentlich kann man es inzwischen anders schreiben: unthis.py.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Sonntag 18. März 2007, 20:41

Hat ein wenig Ähnlichkeit mit Armins Code: http://www.active-4.com/blog/archives/entry-20.html
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 18. März 2007, 22:34

sape hat geschrieben:Hat ein wenig Ähnlichkeit mit Armins Code

Stimmt. Allerdings encoded rot13 keine Stings automatisch, das fand ich schon bei meiner Lösung interessant.

Überhaupt ist die Coding-Maschinerie eine ziemlich mächtige Sache. Mir kreist im Kopf grade die Idee rum, dass man PyLit auch als Codec implementieren könnte und somit Literate Python mit Transparenter Umwandung schrieben könnte. Ich glaube das werde ich mal dem Autor schreiben. Auch wenn die Codecs gar nicht für sowas gedacht sind.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Sonntag 18. März 2007, 22:39

Leonidas hat geschrieben:Auch wenn die Codecs gar nicht für sowas gedacht sind.
Eben. Vielleicht sollte man es auch dabei belassen, sonst sind wir bald bei Perl angekommen ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 18. März 2007, 22:44

Joghurt hat geschrieben:
Leonidas hat geschrieben:Auch wenn die Codecs gar nicht für sowas gedacht sind.
Eben. Vielleicht sollte man es auch dabei belassen, sonst sind wir bald bei Perl angekommen ;)

Stimmt. Aber es wäre sicherlich etwas, was man mal ausprobieren könnte. Haskell bietet mit den lhs-Dateien so etwas schon nativ an. Es ist immer interessant, welche Verrenkungen man mit Python hinbekommen kann (Lisp, anyone?). Auch wenn das nicht unbedingt praxistauglich ist.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. März 2007, 10:32

Ja, Just for fun ist das ok. Aber generell:
The Zen Of Python hat geschrieben:There should be one-- and preferably only one --obvious way to do it.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Montag 19. März 2007, 21:04

Leonidas hat geschrieben:[...]Mir kreist im Kopf grade die Idee rum, dass man PyLit auch als Codec implementieren könnte und somit Literate Python mit Transparenter Umwandung schrieben könnte. Ich glaube das werde ich mal dem Autor schreiben. Auch wenn die Codecs gar nicht für sowas gedacht sind.
Meinst du das dann automatisch sowas erzeugt wird? http://pylit.berlios.de/tutorial/index.html -- Die Idee würde ich gut finden.
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

Beitragvon mq » Montag 19. März 2007, 21:45

Joghurt hat geschrieben:Eben. Vielleicht sollte man es auch dabei belassen, sonst sind wir bald bei Perl angekommen ;)
Och, ich hatte mal die Idee, auf dem Weg etwas Lingua::Romana::Perligata-aehnliches fuer Python zu implementieren :D
Im Endeffekt hab ich's aber doch wieder verworfen, zu viel Aufwand fuer etwas, das eh niemand benutzt.

Wer ist online?

Mitglieder in diesem Forum: r.barrios