#pc1
import string
alpha = string.ascii_lowercase
str = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
decode_str = ""
i = 2
for s in str:
if s in alpha:
decode = chr(ord(s) + i)
if decode in alpha :
decode_str += decode
else :
decode_str += chr(ord(decode)-len(alpha))
else :
decode_str += s
print decode_str
결과 : i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.
그리고 결과를 보고 string.maketrans()를 이용하라는 데로 다시 짜보았다.
Description
The method maketrans() returns a translation table that maps each character in the intab string into the character at the same position in the outtab string. Then this table is passed to the translate() function.
Note: Both intab and outtab must have the same length.
Syntax
Following is the syntax for maketrans() method:
str.maketrans(intab, outtab]);
Parameters
intab -- This is the string having actual characters.
outtab -- This is the string having corresponding mapping character.
Return Value
This method returns a translate table to be used translate() function.
Example
The following example shows the usage of maketrans() method. Under this, every vowel in a string is replaced by its vowel position:
>>> s = 'abcdef' >>> l = [100, 200, 300] >>> s[1:3] # 1번 위치와 3번 위치 사이를 나타냄 'bc' >>> s[1:] # 1부터 끝까지 'bcdef' >>> s[:] # 처음부터 끝까지 'abcdef' >>> s[-100:100] # 범위를 넘어서면 범위 내의 값으로 자동 처리 'abcdef' >>> l[:-1] # 맨 오른쪽 값을 제외하고 모두 [100, 200] >>> s[::2] # 2칸 단위로 'ace' >>> s[::-1] # 거꾸로 'fedcba'
3) 연결하기(Concatenation) : +
>>> s = 'abc' + 'def' >>> s 'abcdef' >>> L = [1, 2, 3] + [4, 5, 6] >>> L [1, 2, 3, 4, 5, 6]
4) 반복하기(Repetition) : *
>>> s = 'Abc' >>> s * 4 'AbcAbcAbcAbc' >>> L = [1, 2, 3] >>> L * 2 [1, 2, 3, 1, 2, 3]
5) 멤버십 테스트(Membership Test) : in
>>> t = (1, 2, 3, 4, 5) >>> 2 in t True >>> 10 not in t True >>> 'ab' in 'abcd' # 문자열인 경우 부분 문자열 확인 가능 True
6) 길이 정보 : len
>>> l = [1, 2, 3] >>> len(l) 3
2. 문자열 정의 1) 한 줄 문자열 : ' or " 2) 여러 줄 문자열 : ''' or """ 3) 이스케이프 문자
Escape Sequence
Meaning
\newline
Ignored
\\
Backslash (\)
\'
Single quote (')
\"
Double quote (")
\a
ASCII Bell (BEL)
\b
ASCII Backspace (BS)
\f
ASCII Formfeed (FF)
\n
ASCII Linefeed (LF)
\N{name}
Character named name in the Unicode database (Unicode only)
\r
ASCII Carriage Return (CR)
\t
ASCII Horizontal Tab (TAB)
\uxxxx
Character with 16-bit hex value xxxx (Unicode only)
\Uxxxxxxxx
Character with 32-bit hex value xxxxxxxx (Unicode only)
\v
ASCII Vertical Tab (VT)
\ooo
Character with octal value ooo
\xhh
Character with hex value hh
4) 문자열 연산(시퀀스 자료형의 특징 참조)
>>> str1 = 'Firtst String' >>> str1[0] = 'f' # 변경 불가능(Immutable) 자료형이므로 에러 발생
Traceback (most recent call last): File "<pyshell#54>", line 1, in <module> str1[0] = 'f' TypeError: 'str' object does not support item assignment
3. 문자열 변경
>>> s = 'spam and egg' >>> s = s[:5] + 'cheese' + s[5:] >>> s 'spam cheeseand egg'
>>> # 대ㆍ소문자로 변환 관련 메쏘드 >>> s = 'i like programming.' >>> s.upper() 'I LIKE PROGRAMMING.' >>> s.upper().lower() 'i like programming.' >>> 'I Like Programming'.swapcase() 'i lIKE pROGRAMMING' >>> s.capitalize() 'I like programming.' >>> s.title() 'I Like Programming.' >>> # 검색 관련 메쏘드 >>> s = 'i like programming, i like swimming.' >>> s.count('like') # 문자열 s에서 'like'라는 부분문자열이 발생한 횟수를 리턴 2 >>> s.find('like') # 'like'의 offset를 리턴(검색) 2 >>> s.find('my') # 찾는 문자열이 없을 경우 -1 리턴 -1 >>> s.rfind('like') # find와 같지만 문자열 s의 뒤쪽부터 탐색 22 >>> s.index('like') 2 >>> s.index('my') # find와 같지만 찾는 문자열이 없을 경우 예외 발생
Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> s.index('my') ValueError: substring not found >>> s.rindex('like') # index와 같지만 문자열 s의 뒤쪽부터 탐색 22 >>> s.startswith('i like') # i like로 시작하는 문자열인가? True >>> s.endswith('swimming.') # swimming.으로 끝나는 문자열인가? True >>> s.startswith('progr', 7) # 7번째 문자열이 progr로 시작하는가? True >>> s.endswith('like', 0, 26) # 0부터 26번째 위치 사이의 문자열이 like로 끝나는가? True >>> # 편집 및 치환 관련 메쏘드 >>> u = ' spam and ham ' >>> u.strip() # 좌우 공백 제거 'spam and ham' >>> u.rstrip() # 오른쪽 공백 제거 ' spam and ham' >>> u.lstrip() # 왼쪽 공백 제거 'spam and ham ' >>> ' abd '.strip() 'abd' >>> '><>abc<><><>'.strip('<>') 'abc' >>> '><><abc<><><>\n'.strip('<>') 'abc<><><>\n' >>> u'\u4000\u4001abc\u4000'.strip(u'\u4000') u'\u4001abc' >>> u.replace('spam', 'spam, egg') # 'spam'을 'spam, egg'로 변경 ' spam, egg and ham ' >>> # 문자열 분리와 결합 관련 메쏘드 >>> u = ' spam and ham ' >>> u.split() # 공백으로 분리 ['spam', 'and', 'ham'] >>> u.split('and') # 'and로 분리 [' spam ', ' ham '] >>> t = u.split() >>> ':'.join(t) # ':' 문자로 결합 'spam:and:ham' >>> print '\n'.join(t) # 줄 바꾸기로 결합 spam and ham >>> lines = '''first line second line third line''' >>> lines.splitlines() # 라인 단위로 분리 ['first line', 'second line', 'third line'] >>> s = 'one:two:three:four' >>> s.split(':', 2) # 두 번만 분리 ['one', 'two', 'three:four'] >>> s.rsplit(':', 1) # 오른쪽부터 처리 ['one:two:three', 'four'] >>> # 정렬 관련 메쏘드 >>> u = 'spam and egg' >>> u.center(60) # 전체 60문자의 가운데에 맞춤 ' spam and egg ' >>> u.ljust(60) # 왼쪽에 맞춤 'spam and egg ' >>> u.rjust(60) # 오른쪽에 맞춤 ' spam and egg' >>> u.center(60, '-') # 공백 대신 '-' 문자로 채움 '------------------------spam and egg------------------------' >>> '1\tand\t2'.expandtabs() # 탭(\t)을 8자 공백으로 사용 '1 and 2' >>> '1\tand\t2'.expandtabs(4) '1 and 2' >>> # 구성된 문자열의 특성 유무 파악 관련 메쏘드 >>> '1234'.isdigit() True >>> 'abcd'.isalpha() True >>> '1abc234'.isalnum() True >>> 'abc'.islower() # 소문자인가? True >>> 'ABC'.isupper() True >>> ' \t\r\n'.isspace() # 공백문자인가? True >>> 'This Is A Title'.istitle() # 제목 문자열인가? True >>> # 채우기 및 자리 맞추기 관련 메쏘드 >>> s = '123' >>> s.zfill(5) '00123' >>> 'goofy'.zfill(6) # 빈 자리는 0으로 채워짐 '0goofy'
6.. string 모듈
>>> import string >>> d = string.letters + string.digits >>> d 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' >>> userid = raw_input('your id : ') your id : creaplz510 >>> for ch in userid: if ch not in d: print 'invalid user id' break
7. 유니 코드
>>> unicode('한글', 'cp949') # 인코딩을 명시적으로 알려주어야 함 u'\ud55c\uae00' >>> unicode('한글', 'cp949').encode('utf-8') # 'utf-8' 코드로 변환 '\xed\x95\x9c\xea\xb8\x80' >>> len('한글과 세종대왕') 15 >>> len(unicode('한글과 세종대왕', 'mbcs')) 8 >>> u = unicode('한글과 세종대왕', 'mbcs') >>> print u[0] 한 >>> print u[1] 글 >>> ord('A') # 문자 'A'의 ASCII 코드값 65 >>> chr(65) # 코드 65에 해당하는 문자 'A' >>> ord(unicode('가', 'cp949')) 44032 >>> hex(ord(unicode('가', 'cp949'))) '0xac00' >>> print unichr(0xac00) 가 >>> print unichr(0xd7a3) 힣
8. 문서 문자열 : 도움말 사용
# file : docstring.py ''' Module __doc__ string line1 line2 ''' class Ham: "Ham class __doc__ string" def func(self): "Ham class func __doc__ string" pass
>>> import docstring >>> print docstring.__doc__
Module __doc__ string line1 line2
>>> print docstring.Ham.__doc__ Ham class __doc__ string >>> print docstring.Ham.func.__doc__ Ham class func __doc__ string