목록Python (16)
살아가는 이야기
Python에는 do/while 루프가 없다. 따라서 이를 while 루프로 구현해야 한다. 예컨대 다음과 같은 do/while 루프를 구현하려고 한다면 do: task() while condition아래와 같이 사용해야 한다. task() while condition: task()그런데 이렇게 쓰려면 task()를 두 번 써야 한다는 단점이 있다. 위 경우처럼 단순한 함수 호출이라면 별 문제가 안 되겠지만 복잡한 코드라면 아무래도 번거롭게 된다. 따라서 다른 대안으로 아래와 같은 코드를 생각해 볼 수 있다. while True: task() if not condition: break조건문 if의 조건이 반대로 되었다는 사실에 주의해야 한다. if 문 때문에 조금 복잡하게 되었지만 task() 호출을 두..
Python의 리스트는 매우 강력한 기능을 제공한다. 하지만 글쓴이를 포함하여 익숙하지 않은 사람들을 위해 여기 몇 가지 기능을 적어 둔다.1. 리스트 생성빈 리스트: ns = []정수 순열: [0,1,2,3,4] ns = range(5) # Python 2.x ns = list(range(5)) # Python 3.x시작점 지정 정수 순열: [1,2,3,4,5] ns = range(1,6) # Python 2.x ns = list(range(1,6) # Python 3.x2. 리스트 길이len(ns)3. 원소 검색3이 ns에 있나 검사: 3 in nsns에서 첫 번째 3의 위치: ns.index(3)4. 원소 추가ns에 7 추가: ns.append(7)ns의 맨 처음에 7 추가: ns.insert(0,..
Simula 67에는 코루틴(coroutine)이라는 서브프로그램이 있다. Simula는 클래스 개념으로도 유명한 언어인데 60년대 언어다 보니 지금 사용해 볼 수 없고, 따라서 코루틴이 무엇인지 제대로 알 수 있는 참고자료가 드물다. 그런데 코루틴과 유사한 제너레이터(generator)를 Python에서 지원하고 있다. 따라서 Python의 제너레이터를 이용하면 코루틴을 시뮬레이션할 수 있다. 이 글은 Python의 제너레이터를 이용하여 코루틴을 구현하는 방법에 관한 글이다. (사실 구글로 검색하면 코루틴에 관한 글이 많이 있지만 너무 복잡하여 거의 알아볼 수 없었다.) 코루틴은 서브프로그램이지만 글자 그대로 상호 협력하는 루틴(co-routine)이다. 따라서 호출자와 피호출자의 개념이 없고 서브프로..
64비트 Windows 7에서 PyScripter를 설치하니 PyScripter 자체에서 한글이 아예 안 보이는 문제가 발생했다. 문제는 앞서 쓴 글(http://woogyun.tistory.com/409)에서 언급한 인코딩 문제가 아니고 평범한 글꼴 문제였다. 아래 그림처럼 에디터 윈도우에서 마우스 우클릭을 하여 "Editor Options"를 선택한 후에 한글 글꼴을 선택하면 된다. 마찬가지로 인터프리터 윈도우에서도 같은 방법으로 "Interpreter Editor Options"를 선택한 후에 한글 글꼴을 선택하면 된다.
Python 2.x와 3.x가 너무 많이 바뀌어서 여기에 차이점을 기록해 둔다. 계속 추가해 나갈 생각이다. Python 2.x Python 3.x print x print(x) print "%d%f%s"%(n,x,s) print("%d%f%s"%(n,x,s)) print x , print(x, end=" ") print >>ofile, x print(x, file=ofile) string.split(s, sep) s.split(sep) string.join(lst, connector) connector.join(lst) raw_input(prompt) input(prompt) input(prompt) eval(input(prompt)) range(a,b,s) list(range(a,b,s)) map(...
Microsoft Windows에서 Python 한글 출력 문제로 인터넷을 검색해 보면 십중팔구는 coding 지시자를 쓰라는 말이 나온다. Python 코드 앞부분에 아래와 같이 쓰라는 말이 나온다. #-*- coding: euc-kr -*- 또 프로그램 내에서 한글 문자열을 쓸 때, 유니코드라는 것을 나타내기 위해서 u를 붙이라는 말이 나온다. 즉 아래와 같이 코딩해야 한다는 것이다. def main(): name = raw_input(u"이름은? ") print name+u"씨 반갑습니다." if __name__ == '__main__': main() 이상과 같이 수정하면 잘 동작하는 것을 Python 2.7 + PyScripter 2.5.3 환경에서 확인하였다. 그러나 위와 같이 수정해도 문제가 ..
IDLE이란 파이썬 프로그래밍 창이다. 파이썬을 설치하고 IDLE을 실행시키면 기본적으로 파이썬 설치 디렉토리가 기본 시작 디렉토리가 된다. 따라서 새로 생성하는 파일도 저장하려면 기본적으로 파이썬 설치 디렉토리에 저장하겠는지 묻게 된다. 이것을 변경하고 싶다면 IDLE 아이콘의 속성을 선택하여 시작 위치를 바꾸면 된다(아래 그림 참고). 시작 위치를 원하는 대로 변경한 다음에는 IDLE을 실행하고 다음과 같은 파이썬 코드를 넣어 보자. 그러면 변경된 위치를 확인할 수 있다. >>> from os.path import abspath >>> abspath('.') 'C:\\Python25' 그럼, 열공!
PLY는 Python으로 Lex와 Yacc를 구현한 것이다. 설치하는 방법은 매우 간단한데, 그냥 압축을 풀면 된다. 그런데 문제는 압축을 푼 다음에 어떻게 사용하느냐 하는 것이다. 심지어 홈페이지에 있는 아래 예제 프로그램도 동작하지 않았다. http://www.dabeaz.com/ply/ply.html README 파일을 찬찬히 읽어보니 압축을 푼 다음에 만들어진 폴더 밑에 있는 ply 파일을 프로그램이 있는 디렉터리에 복사하면 된단다. 이렇게 허탈할 수가... 아무튼 잘 작동되니 다행이다.