일반인을 위한 파이썬 지침서/문자열의 복수
이제 문자열로 할 수 있는 기가 막힌 꼼수하나를 보이겠다.
def shout(string): for character in string: print "Gimme a "+character print "'"+character+"'" shout("Lose") def middle(string): print "The middle character is:",string[len(string)/2] middle("abcdefg") middle("The Python Programming Language") middle("Atlanta")
그 출력은 다음과 같다.
Gimme a L 'L' Gimme a o 'o' Gimme a s 's' Gimme a e 'e' The middle character is: d The middle character is: r The middle character is: a
이 프로그램이 보여주는 것은 문자열이 여러 면으로 리스트와 비슷하다는 것이다. shout 프로시져는 for회돌이가 리스트에 사용될 수 있는 것과 마찬가지로 문자열에 사용될 수 있다는 것을 보여준다. middle 프로시져는 그 문자열이 len함수 그리고 배열 지표 그리고 썰기 역시 사용할 수 있음을 보여준다. 대부분의 리스트 사양은 문자열에도 또한 작동한다.
다음의 사양은 문자열의 어떤 특별한 사양을 보여준다.
def to_upper(string): ## Converts a string to upper case upper_case = "" for character in string: if 'a' <= character <= 'z': location = ord(character) - ord('a') new_ascii = location + ord('A') character = chr(new_ascii) upper_case = upper_case + character return upper_case print to_upper("This is Text")
그 출력을 여기에 보이면
THIS IS TEXT
컴퓨터가 문자열의 문자를 0에서 255까지의 숫자로 나타내므로 이것은 잘 작동한다. 파이썬은 ord( ordinal의 약자)라 부르는 함수를 가지고 있어서 문자를 숫자로 반환해 준다. 또한 대응되는 chr 이라 부르는 함수도 있어서 숫자를 문자로 반환해준다. 이것을 염두에 두고서 프로그램은 깨끗해지기 시작해야만 한다. 첫 번째 세부사항은 이 라인이다: 'if 'a' <= character <= 'z':' 이 라인은 문자가 소문자인가 점검한다. 만약 그렇다면 다음의 라인이 사용된다. 먼저 그것은 'location = ord(character) - ord('a')' 라인을 사용하여 위치로 변환되어 a=0,b=1,c=2 등등으로 변환된다. 다음으로 그 새로운 값은 'new_ascii = location + ord('A')'에서 발견된다. 이 값은 다시 문자로 변환되어서 이제는 대문자이다.
이제 더 짧은 타이핑 연습을 위해
print "Integer to String" print repr(2) print repr(23445) print repr(-23445) print "String to Integer" print int("14234") print int("12345") print int("-3512") print "Float to String" print repr(234.423) print repr(62.562) print repr(-134.5660) print "Float to Integer" print int(51.523) print int(224.63) print int(-1234.562)
친숙하게 보이는 출력은 다음과 같다.
Integer to String 2 23445 -23445 String to Integer 14234 12345 -3512 Float to String 234.423 62.562 -134.566 Float to Integer 51 224 -1234
여러분이 아직까지 이해가 가지 않는다면 (역주: 가르쳐 주면) repr 함수가 정수를 문자열로, int함수가 문자열을 정수로 변환할수 있다. repr 함수는 어떤 것의 출력가능한 형태를 돌려준다. 여기에 이러한 약간의 예가 있다.
>>> repr(1) '1' >>> repr(234.14) '234.14' >>> repr([4,42,10]) '[4, 42, 10]'
int 함수는 문자열(혹은 소수형)을 정수로 변환한다. float 라고 불리는 비슷한 함수 또한 있어서 정수나 문자열을 소수형으로 바꾸어 준다. 파이썬이 가지고 있는 또 다른 함수는 eval 함수이다. eval 함수는 문자열을 취해 파이썬이 판단하는 형태로 데이타를 반환한다. 예를 들어
>>> v=eval('123') >>> print v,type(v) 123 <type 'int'> <- 정수형 >>> v=eval('645.123') >>> print v,type(v) 645.123 <type 'float'> <- 소수형 >>> v=eval('[1,2,3]') >>> print v,type(v) [1, 2, 3] <type 'list'> <- 리스트형
여러분이 eval 함수를 사용한다면 그 함수가 여러분이 예상한 형태를 반환하는지 점검해야 한다.
하나의 유용한 문자열 함수는 split 함수이다. 여기에 예가 있다.
>>> import string >>> string.split("This is a bunch of words") ['This', 'is', 'a', 'bunch', 'of', 'words'] >>> string.split("First batch, second batch, third, fourth",",") ['First batch', ' second batch', ' third', ' fourth']
split이 문자열을 문자열의 리스트로 변환하는 것을 주목하라. 문자열은 기본값으로 공백으로 분리되거나 혹은 선택적으로 두 번째 인수에 의해서 분리된다 (이경우에는 콤마).
예제
[+/-]# This program requires a excellent understanding of decimal numbers def to_string(in_int): "Converts an integer to a string" out_str = "" prefix = "" if in_int < 0: prefix = "-" in_int = -in_int while in_int / 10 != 0: out_str = chr(ord('0')+in_int % 10) + out_str in_int = in_int / 10 out_str = chr(ord('0')+in_int % 10) + out_str return prefix + out_str def to_int(in_str): "Converts a string to an integer" out_num = 0 if in_str[0] == "-": multiplier = -1 in_str = in_str[1:] else: multiplier = 1 for x in range(0,len(in_str)): out_num = out_num * 10 + ord(in_str[x]) - ord('0') return out_num * multiplier print to_string(2) print to_string(23445) print to_string(-23445) print to_int("14234") print to_int("12345") print to_int("-3512")
그 출력은 다음과 같다.
2 23445 -23445 14234 12345 -3512