“this”모듈의 소스 코드는 무엇입니까?


193

파이썬 인터프리터를 열고 "import this"를 입력하면 다음과 같이 인쇄됩니다.

Tim Peters의 Python Zen

못생긴 것보다 아름답습니다.
암시적인 것보다 명시적인 것이 좋습니다.
단순보다 복잡합니다.
복잡한 것이 복잡한 것보다 낫습니다.
평평한 것이 중첩보다 낫습니다.
스파 스가 밀도보다 낫습니다.
가독성이 중요합니다.
특별한 경우는 규칙을 어길만큼 특별하지 않습니다.
실용성은 순도를 능가하지만.
오류가 자동으로 전달되지 않아야합니다.
명시 적으로 침묵하지 않는 한.
모호함에 직면하여 추측하려는 유혹을 거부하십시오.
그것을하는 명백한 방법이 있어야합니다.
네덜란드 인이 아니라면 처음에는 그 방법이 명확하지 않을 수 있습니다.
지금보다 결코 낫습니다. 바로 지금
결코 결코 낫지 않지만
구현이 설명하기 어렵다면 나쁜 생각입니다.
구현이 설명하기 쉬운 경우 좋은 생각 일 수 있습니다.
네임 스페이스는 훌륭한 아이디어 중 하나입니다. 더 많은 것을 해보자!

파이썬 소스 (Lib / this.py) 에서이 텍스트는 흥미로운 코드 조각으로 생성됩니다.

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])

답변:


184

이것을 rot13 인코딩 이라고합니다 .

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

대문자 (이것이 65 인 것)와 소문자 (이것이 97 인 것) 모두의 문자에 대한 변환 표를 작성합니다.

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

번역 된 문자열을 인쇄합니다.


27
그리고 실제로는 2.x와 3.x에서보다 간단하게 구현할 수 있습니다 import codecs; print(codecs.decode(s, "rot-13")). 이 알고리즘을 손으로 작성하는 것은 부활절 달걀을 난독 화하는 것입니다.
ncoghlan

12
아니면 그냥 'Gur Mra bs Clguba, ol Gvz Crgref'.decode('rot13').
Alex Brasetvik 19

3
어쩌면 우리는 ROT13이 기존 유즈넷 시절 8 ^)에 사용 된 주요 "암호화"방법이라고 덧붙였을 것입니다.
Zane

53
@OllieFord : 농담으로. 소스 코드를 난독 처리하는 것부터 stdlib에 내장되어 있어도 rot13을 처음부터 구현하는 것까지 모듈이 수행하는 모든 작업은 Python of Zen을 직접 위반합니다. Tim Peters는 또한 Zen 자체에 미묘한 농담을 넣었습니다 (TOOWTDI 라인의 대시는 두 가지 방법으로 작동합니다).
abarnert

7
@abarnert this다른 언어 (예 : Java)가 thisPython의 사용 방식과 유사하기 때문에 모듈 이름 도 농담의 일부 라고 생각 합니다 self. 타이핑 import this은 타이핑 만큼 의미가 없습니다 import java.self;.
Luc

25

ROT13 을 손으로 또는 머리로 바꾸 려면 13 * 2 = 26 (영어 알파벳 글자 수)이기 때문에 본질적으로 교환입니다.

a <-> n
b <-> o
c <-> p
...
m <-> z

A <-> N
B <-> O
C <-> P
...
M <-> Z 

Vs lbh cenpgvfr ybat rabhtu, lbh'yy riraghnyyl znfgre gur Mra bs EBG-13 nytbevguz naq ernq guvf Xyvatba ybbxvat grkgf jvgubhg pbzchgre uryc.



11

ROT13 인코딩을 사용합니다 . 이것은 농담이기 때문에 사용됩니다.

파이썬 함수를 사용하여 문자열을 디코딩 할 수도 있습니다.

파이썬 2 만 :

import this
print(this.s.decode('rot13'))

파이썬 2 & 3 :

import codecs
print(codecs.decode(this.s, 'rot-13'))

이것은 ncoghlan 주석에 의해 '11 년 5 월 2 일에 사용되었습니다 import codecs. 코덱 가져 오기가 여전히 필요한지 또는 decode특정 릴리스의 Python에서 자동으로 제공 되는지 여부는 알 수 없습니다 . decode사용중인 문서에 연결할 수 있습니까?
Cœur

1
@ Cœur 이것은 IDLE의 Python 3.7에서도 작동하지 않습니다. 어쩌면 이것이 파이썬 2입니까?
Filip Š

@ FilipŠ 아, 맞습니다. 파이썬 2에서는 작동하지만 파이썬 3에서는 작동하지 않습니다. 그러나 파이썬 2에서는 import this추가 코드없이 직접 인쇄 할 수 있습니다.
Cœur

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.