• 목록
  • 아래로
  • 위로



안녕하세요? 첫 강좌로 반복문을 다뤄보려고 합니다.


파이썬은 다음과 같은 이념을 기반으로 하고 있습니다.



  • 아름다운 것이 추한 것보다 낫다. (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명이 추천

추천인 1

작성자
이니스프리 119 Lv. (0%) 1875900/115200000EXP

당분간 일신상의 사정으로 쪽지나 댓글로 답변을 드리기 어렵습니다. 죄송합니다.

 

CSVpuymXAAAVVpd.jpg

댓글 7

이니스프리 작성자
profile image
@맛스타님 제가 강좌 게시판에 글을 올려도 메인화면 위젯에 출력이 안 되는데 시간 나실 때 확인 부탁드립니다 ^^
항상 감사드립니다! 즐거운 연말 되세요!!
comment menu
2019.12.06. 21:02

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

NoYeah → 이니스프리
profile image
네, 확인해서 수정해 놓겠습니다.
comment menu
2019.12.06. 22:55

신고

"NoYeah님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → NoYeah
profile image
연말이어서 바쁘실텐데 번번이 감사합니다 ^^
안녕히 주무세요!
comment menu
2019.12.06. 23:03

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

NoYeah
profile image
강좌 잘 봤습니다.
whlile 문 사용 방법에 대해

초기식
while 조건식:
반복할 코드
변화식

이라고 설명하니 훨씬 알아듣기 쉬웠습니다. 파이썬 처음 배울 때 대충
while 조건식:
수행할 문장
수행할 문장

정도로만 습득했는데 이것보다는 훨 이해가 됩니다.


프로그래밍 배울 때
1. 변수 2. 조건문(if) 3. 반복문 4. 함수 만 마스터 하면 다는 거라고 하던데 역시 반복문부터군요!

다음번엔 for문을 작성하시면서 while 과 for 를 언제 사용하면 좋은지 알려주시면 감사하겠습니다!
comment menu
2019.12.06. 23:03

신고

"NoYeah님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → NoYeah
profile image

초기식

while 조건식:

반복할 코드

변화식


매우 허접한 표현이라고 생각했는데 이해가 쉬우셨다니 다행이네요 ^^

다만 지금 다시 생각해보니 무한루프에서는 경우에 따라 반복할 코드 자체가 변화식에 해당한다고 볼 여지도 있겠네요.

아마도 이러한 점 때문에 시중의 일반적인 교재에서 그렇게 기술해놓은 것 같습니다.


비록 좋은 습관은 아니겠지만, 프로그래머가 아니라 저같은 일반인 입장에서 업무자동화를 위한 매크로 스크립트를 작성할 때에는 함수가 반드시 필수불가결하지는 않은 것 같습니다.

물론 함수형 프로그래밍이 타인의 관점에서 가독성이 훨씬 좋을 것이고, 한 번 작성한 함수를 다시 활용하면 개발시간이 크게 단축되겠죠.


0강에서도 잠깐 말씀드렸지만, 제 짧은 생각으로는 1. 변수 2. 조건문 3. 반복문 이후에 4. 배열 5. 문자열 처리를 다루는 것이 중요하다고 생각합니다.

그 다음 과정으로는 6. 파일 입출력을 생각해볼 수 있구요.


조건문(if ~ else)를 건너 뛴 것은 0강에서도 말씀드렸듯이 파이썬과 다른 언어에서의 차이가 크지 않고, 그 부분은 우리나라 수학 교육과정상 누구나 잘 하시는 것 같기 때문입니다 ^^


안녕히 주무세요!


+)

일반적인 프로그래밍 언어에서 while문은 반복횟수가 정해지지 않은 경우에 상대적으로 자주 사용한다고 볼 수 있겠고, 반면에 for문은 반복횟수가 정해진 경우에 자주 이용한다고 볼 수 있습니다.

그러나 파이썬에서의 for문은 Perl이나 PHP에서의 foreach문에 해당하는 기능을 수행합니다.

따라서 다른 언어에서 foreach문을 사용할 경우에 파이썬에서 for문을 사용한다고 정리하시면 편할 것 같습니다.

즉 리스트나 스트링 등을 반복문에 하나씩 대입하는 경우에 for문을 사용하겠죠.


물론 while문으로도 같은 결과를 도출해낼 수 있긴 하지만 다소 번거롭습니다.

사실 어느 것을 사용해도 결국 같은 결과를 도출해낼 수 있기 때문에 단일한 정답이 있는 문제 같지는 않습니다.

이 부분에 대해서는 다음 강좌에서 다시 정리하겠습니다 ^^

comment menu
2019.12.06. 23:20

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자
profile image

example 추가:

cnt = 0
while cnt < 3:
    cnt += 1
    print(f'유비가 {cnt}번째 방문하였습니다.')
    if cnt == 3:
        print('드디어 제갈량을 만나게 되었습니다!')

 

comment menu
2022.06.10. 20:43

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자
profile image
업데이트된 강의글를 작성하였습니다.
https://sir.kr/pg_lecture/917
comment menu
2022.06.17. 23:03

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
29 [디지털포렌식전문가] 제21회 필기시험 합격 후기 9 image 이니스프리 이니스프리 23.10.29.16:11 2475
28 [Python] GIF 파일에 프로그레스바 삽입하기! (Adding progress bar into GIF) image 이니스프리 이니스프리 22.05.14.13:14 12581
27 [Python] 그누보드 자동 글 작성 + 멀티 파일 업로드 스크립트 1 image 이니스프리 이니스프리 21.05.16.09:32 23690
26 0. 행의 분리 및 결합 / 멀티라인 문자열 image 이니스프리 이니스프리 21.04.18.11:53 447
25 [Selenium] proxy를 사용하지 않고 개발자도구에서 Network 탭의 로그를 얻기 image 이니스프리 이니스프리 21.03.06.23:35 1555
24 [번외편 - 한컴한글] 스마트한 문서 작성을 위한 팁 (작성 중) 이니스프리 이니스프리 20.08.08.13:50 493
23 [Requests-HTML] Requests와 비교할 때의 장점! (네이버 뉴스 등 크롤링) 7 image 이니스프리 이니스프리 20.05.14.19:08 1420
22 22. [OpenPyXL] 엑셀 문서 저장하기 / 시트 추가하기 / 셀에 입력하기 14 image 이니스프리 이니스프리 20.02.02.00:46 5577
21 21. [OpenPyXL] 엑셀 문서를 열고 시트에서 셀의 값을 얻기 3 image 이니스프리 이니스프리 20.02.01.23:46 1269
20 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 9248
19 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 2049
18 [Requests] Selenium을 이용한 Cloudflare의 우회 8 image 이니스프리 이니스프리 20.01.08.19:51 6244
17 9. [정리] 파이써닉한 파이썬 문법 팁 for COS Pro image 이니스프리 이니스프리 20.01.04.23:47 1009
16 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 5598
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 image 이니스프리 이니스프리 19.12.12.02:27 553
14 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 2090
13 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 image 이니스프리 이니스프리 19.12.09.20:00 1176
12 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 4666
1. 반복문 (1) - while 문 7 image 이니스프리 이니스프리 19.12.06.20:50 2501
10 (序) Python 강좌를 시작하며... 2 image 이니스프리 이니스프리 19.12.05.21:55 494