일반인을 위한 파이썬 지침서/문자열의 복수
이제 문자열로 할 수 있는 기가 막힌 꼼수하나를 보이겠다.
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