• 목록
  • 아래로
  • 위로



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


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



  • 아름다운 것이 추한 것보다 낫다. (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. (2%) 4189480/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 추가:

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 [번외편 - 구글뉴스] 리뉴얼된 구글뉴스에서 RSS 피드를 생성하는 방법 6 image 이니스프리 이니스프리 18.10.07.17:58 3671
28 [번외편 - 아미나] 그누보드/아미나에서 게시글의 날짜를 최종수정일로 변경하고, 목록스킨 및 위젯을 최종수정일 순으로 정렬하기 2 image 이니스프리 이니스프리 18.11.11.22:36 2690
27 [번외편 - 법률] 현행 저작권법 제30조(사적이용을 위한 복제)에 대하여 - 음원 다운로더의 처벌과 관련하여 6 이니스프리 이니스프리 18.12.07.14:16 1434
26 [번외편 - 아미나] 아미나의 회원 이미지와 관련하여 x2 3 image 이니스프리 이니스프리 18.12.10.19:57 861
25 [번외편 - 아미나] Basic Youtube Title Widget 1.0에서 처음에 엑박으로 뜨는 경우의 해결책 3 image 이니스프리 이니스프리 18.12.15.23:02 900
24 [Selenium] Selenium에서 send_keys를 막아놓은 경우 해결책 이니스프리 이니스프리 19.07.04.05:52 4869
23 [번외편 - 유튜브] Youtube API를 이용하거나 또는 이용하지 않고 채널ID를 추출하는 방법 2 image 이니스프리 이니스프리 19.07.16.17:55 2923
22 [번외편 - 법률] 나무위키의 서술 중 법률용어의 사용에 있어 바로잡아야 할 부분 image 이니스프리 이니스프리 19.07.17.22:44 522
21 [Pillow] 파이썬 Pillow 라이브러리를 이용하여 이미지의 배경을 transparent하게 만들기 11 image 이니스프리 이니스프리 19.08.04.13:40 7996
20 (序) Python 강좌를 시작하며... 2 image 이니스프리 이니스프리 19.12.05.21:55 654
1. 반복문 (1) - while 문 7 image 이니스프리 이니스프리 19.12.06.20:50 2660
18 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 4922
17 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 image 이니스프리 이니스프리 19.12.09.20:00 1368
16 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 2224
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 image 이니스프리 이니스프리 19.12.12.02:27 759
14 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 5973
13 9. [정리] 파이써닉한 파이썬 문법 팁 for COS Pro image 이니스프리 이니스프리 20.01.04.23:47 1154
12 [Requests] Selenium을 이용한 Cloudflare의 우회 8 image 이니스프리 이니스프리 20.01.08.19:51 6600
11 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 2376
10 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 9463