- 7
- 이니스프리
- 조회 수 2560
안녕하세요? 첫 강좌로 반복문을 다뤄보려고 합니다.
파이썬은 다음과 같은 이념을 기반으로 하고 있습니다.
아름다운 것이 추한 것보다 낫다. (Beautiful is better than ugly.)
명시적인 것이 암시적인 것보다 낫다. (Explicit is better than implicit.)
간결한 것이 복잡한 것보다 낫다. (Simple is better than complex.)
즉 "아름답고 명시적이며 간결한 하나의 답이 있다"는 것으로 귀결됩니다.
이러한 이념으로 인하여 파이썬의 스크립트는 수렴 진화하는 경향이 있으며, 타인이 작성한 스크립트를 읽을 때 가독성과 이해도가 좋은 편입니다.
다만 이와 같은 특징 때문에 문법이 상대적으로 까다롭다는 지적을 받기도 하죠.
파이썬의 위와 같은 문법적 특징이 잘 나타나는 것이 바로 반복문입니다.
파이썬은 다른 언어에서 볼 수 있는 loop문이나 do~while문이 없고, 오직 while문과 for문이 있을 뿐입니다.
다음 편에서 소개하겠지만 파이썬의 for문이 PHP의 foreach문에 해당하며, C를 비롯한 다수의 언어에서 볼 수 있는 형태의 전형적인 for문이 없는 것도 이러한 파이썬의 기본이념과 관련이 깊습니다.
1. while 반복문의 기본형식
파이썬의 while문은 다른 언어의 while문과 유사합니다.
while문은 조건식이 참일 때에는 반복하며, 거짓일 때에는 반복을 종료합니다.
초기식 while 조건식: 반복할 코드 변화식
다음은 10 팩토리얼을 구하는 스크립트인데, 파이썬에서의 while문의 기본적인 형태라고 보시면 됩니다.
n = 1 result = 1 while n <= 10: result *= n n += 1 print(result)
for문과 비교할 때 while문은 반복횟수가 정해지지 않은 경우에 유용합니다.
예컨대 사용자가 'quit'을 입력할 때까지 반복하는 경우를 들 수 있습니다..
order = '' # order 변수를 미리 선언하지 않으면 에러가 발생합니다. while order.lower() != 'quit': # 대소문자를 구분하지 않습니다. order = input('명령을 입력하세요 : ')
2. while 무한루프
while문이 흔히 사용되는 예로써 무한루프를 들 수 있습니다.
무한루프는 특정입력을 받거나, 특정처리가 될 때까지 계속 반복하는 경우에 유용하게 사용됩니다.
while문을 작성하다가 실수로 무한루프에 빠지는 경우도 많습니다.
앞서 든 예의 경우에도 사실상 무한루프에 가깝다고 할 수 있지만, 보다 명시적인 무한루프를 예를 들어보겠습니다.
다음은 2020년이 도래할 때까지 1분에 한 번씩 'Study for us!'를 반복출력하는 스크립트입니다.
break문으로 루프를 벗어나는데, break문 및 continue문과의 차이에 대해서는 다음 강좌에서 for문을 다루며 함께 다루겠습니다.
from datetime import datetime import time while True: print('Study for us!') now = datetime.now() # 현재시각을 구합니다. if now.year < 2020: # now.year의 type은 int임에 주의하세요! break time.sleep(60) # 60초를 대기합니다.
물론 엄밀히 따지면 2020년 0시 0분 0초에서부터 2020년 0시 0분 60초 사이의 어느 순간에 종료될 것입니다.
위 스크립트에서 True의 첫글자는 대문자로 입력해야 하며, 0이 아닌 숫자나 내용이 있는 문자열 또한 True로 취급됨을 유의하셔야 합니다.
참고로 IDLE나 콘솔에서 무한루프를 종료하려면 Ctrl+C를 입력하면 됩니다.
3. Quiz
다음 중 while문을 이용한 무한루프를 모두 고르시오.
1. while '':
2. while not 0:
3. while None:
4. while 15.9:
5. while 'SFU':
정답: 2, 4, 5
4. 마치며
이상으로 파이썬 이론편의 첫 강좌를 마치겠습니다.
다음 강좌에서는 파이썬의 for문에 대해 다루며 PHP의 for문 및 foreach문과의 차이점을 살펴겠습니다.
그럼 즐거운 불금 되시고 다음 강좌에서 뵙겠습니다 ^^
추천인 1
작성자
댓글 7
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/640/096/96640.gif?t=1548527149)
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
안녕히 주무세요!
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/640/096/96640.gif?t=1548527149)
whlile 문 사용 방법에 대해
초기식
while 조건식:
반복할 코드
변화식
이라고 설명하니 훨씬 알아듣기 쉬웠습니다. 파이썬 처음 배울 때 대충
while 조건식:
수행할 문장
수행할 문장
정도로만 습득했는데 이것보다는 훨 이해가 됩니다.
프로그래밍 배울 때
1. 변수 2. 조건문(if) 3. 반복문 4. 함수 만 마스터 하면 다는 거라고 하던데 역시 반복문부터군요!
다음번엔 for문을 작성하시면서 while 과 for 를 언제 사용하면 좋은지 알려주시면 감사하겠습니다!
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
초기식
while 조건식:
반복할 코드
변화식
매우 허접한 표현이라고 생각했는데 이해가 쉬우셨다니 다행이네요 ^^
다만 지금 다시 생각해보니 무한루프에서는 경우에 따라 반복할 코드 자체가 변화식에 해당한다고 볼 여지도 있겠네요.
아마도 이러한 점 때문에 시중의 일반적인 교재에서 그렇게 기술해놓은 것 같습니다.
비록 좋은 습관은 아니겠지만, 프로그래머가 아니라 저같은 일반인 입장에서 업무자동화를 위한 매크로 스크립트를 작성할 때에는 함수가 반드시 필수불가결하지는 않은 것 같습니다.
물론 함수형 프로그래밍이 타인의 관점에서 가독성이 훨씬 좋을 것이고, 한 번 작성한 함수를 다시 활용하면 개발시간이 크게 단축되겠죠.
0강에서도 잠깐 말씀드렸지만, 제 짧은 생각으로는 1. 변수 2. 조건문 3. 반복문 이후에 4. 배열 5. 문자열 처리를 다루는 것이 중요하다고 생각합니다.
그 다음 과정으로는 6. 파일 입출력을 생각해볼 수 있구요.
조건문(if ~ else)를 건너 뛴 것은 0강에서도 말씀드렸듯이 파이썬과 다른 언어에서의 차이가 크지 않고, 그 부분은 우리나라 수학 교육과정상 누구나 잘 하시는 것 같기 때문입니다 ^^
안녕히 주무세요!
+)
일반적인 프로그래밍 언어에서 while문은 반복횟수가 정해지지 않은 경우에 상대적으로 자주 사용한다고 볼 수 있겠고, 반면에 for문은 반복횟수가 정해진 경우에 자주 이용한다고 볼 수 있습니다.
그러나 파이썬에서의 for문은 Perl이나 PHP에서의 foreach문에 해당하는 기능을 수행합니다.
따라서 다른 언어에서 foreach문을 사용할 경우에 파이썬에서 for문을 사용한다고 정리하시면 편할 것 같습니다.
즉 리스트나 스트링 등을 반복문에 하나씩 대입하는 경우에 for문을 사용하겠죠.
물론 while문으로도 같은 결과를 도출해낼 수 있긴 하지만 다소 번거롭습니다.
사실 어느 것을 사용해도 결국 같은 결과를 도출해낼 수 있기 때문에 단일한 정답이 있는 문제 같지는 않습니다.
이 부분에 대해서는 다음 강좌에서 다시 정리하겠습니다 ^^
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
example 추가:
cnt = 0 while cnt < 3: cnt += 1 print(f'유비가 {cnt}번째 방문하였습니다.') if cnt == 3: print('드디어 제갈량을 만나게 되었습니다!')
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
https://sir.kr/pg_lecture/917
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
항상 감사드립니다! 즐거운 연말 되세요!!