• 목록
  • 아래로



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


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



  • 아름다운 것이 추한 것보다 낫다. (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문은 조건식이 참일 때에는 반복하며, 거짓일 때에는 반복을 종료합니다.


1
2
3
4
초기식
while 조건식:
    반복할 코드
    변화식



다음은 10 팩토리얼을 구하는 스크립트인데, 파이썬에서의 while문의 기본적인 형태라고 보시면 됩니다.


1
2
3
4
5
6
= 1
result = 1
while n <= 10:
    result *= n
    n += 1
print(result)



for문과 비교할 때 while문은 반복횟수가 정해지지 않은 경우에 유용합니다.


예컨대 사용자가 'quit'을 입력할 때까지 반복하는 경우를 들 수 있습니다..


1
2
3
order = '' # order 변수를 미리 선언하지 않으면 에러가 발생합니다.
while order.lower() != 'quit': # 대소문자를 구분하지 않습니다.
   order = input('명령을 입력하세요 : ')




2. while 무한루프


while문이 흔히 사용되는 예로써 무한루프를 들 수 있습니다.


무한루프는 특정입력을 받거나, 특정처리가 될 때까지 계속 반복하는 경우에 유용하게 사용됩니다.


while문을 작성하다가 실수로 무한루프에 빠지는 경우도 많습니다.


앞서 든 예의 경우에도 사실상 무한루프에 가깝다고 할 수 있지만, 보다 명시적인 무한루프를 예를 들어보겠습니다.


다음은 2020년이 도래할 때까지 1분에 한 번씩 'Study for us!'를 반복출력하는 스크립트입니다.


break문으로 루프를 벗어나는데, break문 및 continue문과의 차이에 대해서는 다음 강좌에서 for문을 다루며 함께 다루겠습니다.


1
2
3
4
5
6
7
8
9
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. (2%) 4411140/115200000EXP

Make StudyForUs Great Again!

 

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 추가:

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

 

comment menu
2022.06.10. 20:43

신고

"이니스프리님의 댓글"

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

신고

"이니스프리님의 댓글"

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

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