10. 반복문 - while > 파이썬 기초

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

파이썬 기초

10. 반복문 - while

페이지정보

글쓴이 관리자 조회 36,566 조회 날짜 19-05-07 13:42 / Update:19-05-07 16:17
댓글 0 댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

내용

while 반복문

 

반복(Loop)해서 문장을 수행해야 할 경우 while문을 사용한다.

 

while문의 기본 구조

while 조건문:

    문장1

    문장2

    문장3

 

while문은 조건문이 참인 동안에 while문 아래에 속하는 문장들이 반복해서 수행된다.

위의 기본 구조에서 본다면, 조건문이 참일 경우 (문장1, 문장2, 문장3), (문장1, 문장2, 문장3), (문장1, 문장2, 문장3)..... 식으로 계속 반복되어 실행된다.

 

원리는 다음과 같다.

 

1. while 조건문 검사

2. 조건문이 참이면 문장 실행

3. 문장이 모두 실행되면 다시 while 조건문 검사

4. 조건문이 참이면 문장 실행

....

조건문이 거짓이 될 때까지 반복

 

 

다음 문장을 10번 반복하는 예제를 살펴보자.

 

소스

count = 0

while count < 10:
    count = count + 1
    print("나는 %d번 학생입니다." % count)
    if count == 10:
        print("출석이 완료되었습니다.")

나는 1번 학생입니다.
나는 2번 학생입니다.
나는 3번 학생입니다.
나는 4번 학생입니다.
나는 5번 학생입니다.
나는 6번 학생입니다.
나는 7번 학생입니다.
나는 8번 학생입니다.
나는 9번 학생입니다.
나는 10번 학생입니다.
출석이 완료되었습니다.

while문 다음에 콜론(:)이 들어가야 한다.

 

소스 분석

count = 0

변수이다.

반복을 위해 count를 0으로 초기화 한다.

while count < 10:

    문장1    

while 반복문이다.

 

count < 10 이 조건이 된다. 

count는 0으로 초기화가 되었으므로 조건이 참이된다.

조건이 참이므로 문장1이 실행된다.

문장1

 

    count = count + 1
    print("나는 %d번 학생입니다." % count)
    if count == 10:
        print("출석이 완료되었습니다.")

문장1에 해당하는 구문이다.

 

count = count + 1 은 카운터 숫자를 1씩 늘려주는 코드이다. 반복문이 10번 반복하면 count는 10을 넘어설 것이다.

count가 10을 넘어설 때, while의 조건 count < 10 이 거짓이 되기 때문에 이 반복문은 멈추게 된다.

 

문장이 수행되는 순서는 다음과 같다.

 

첫번째 반복 :

1. count는 0이다. count = count + 1count + 1을 한 것을 다시 count에 저장하는 것이므로, count는 1이 된다.

2. print("나는 %d번 학생입니다." % count) count가 1이므로, 문자열 포매팅에 의해

"나는 1번 학생입니다."가 출력된다.

3. count가 1이므로 다음 조건은 거짓이다. if count == 10: 

따라서 if 블록의 구문은 실행되지 않는다.

처음으로 가서 while의 조건을 검사한다.

 

두번째 반복 :

1. 첫번째 반복으로 인해 count는 1이다. count = count + 1은 count + 1을 한 것을 다시 count에 저장하는 것이므로, count는 2가 된다.

2. print("나는 %d번 학생입니다." % count) count가 2이므로, 문자열 포매팅에 의해

"나는 2번 학생입니다."가 출력된다.

3. count가 2이므로 다음 조건은 거짓이다. if count == 10: 

따라서 if 블록의 구문은 실행되지 않는다.

처음으로 가서 while의 조건을 검사한다.

 

......

......

 

열번째 반복 :

1. 아홉번째 반복으로 인해 count는 9이다. count = count + 1은 count + 1을 한 것을 다시 count에 저장하는 것이므로, count는 10이 된다.

2. print("나는 %d번 학생입니다." % count) count가 10이므로, 문자열 포매팅에 의해

"나는 10번 학생입니다."가 출력된다.

3. count가 10이므로 다음 조건은 참이다. if count == 10: 

따라서 if 블록의 구문이 실행되어,

"출석이 완료되었습니다"가 출력된다.

처음으로 가서 while의 조건을 검사한다.

 

열번째 반복이 완료되고, 다시 while 구문의 조건을 살펴본다.

열번째 반복에 의해 count = 10이 되었다. 따라서 count < 10 이라는 조건이 거짓이 된다.

while문은 조건이 거짓이 되었으므로 반복을 종료한다.

 

 

1269732368_1557256919.4719.png

 



while문 강제로 빠져나가기

 

while문은 조건문이 참인 동안 계속해서 while문 안의 내용을 반복적으로 수행한다.

따라서 강제로 while문을 빠져나가고 싶을 때가 있다. 예를 들어 콜라 자판기를 생각해 보자. 자판기 안에 콜라가 충분히 있을 때는 동전을 넣으면 콜라가 나온다. 만약 콜라가 떨어졌다면 판매를 중단하고 "판매 중지"라는 문구를 사용자에게 보여주어야 한다. 그리고 while문이 종료가 되어야 한다. 이렇게 while문을 강제로 멈추게 하는 것이 바로 break문이다.

 

소스

cola_count = 3
cola_price = 100
money = 500

while money > 0:
    print("- 돈을 받았습니다.")
    
    if money > cola_price: 
        print("-- 콜라가 나왔습니다.")       
        cola_count = cola_count -1
        print("남은 콜라는 %d개입니다.\n" % cola_count)
        money = money - cola_price
              
        if cola_count == 0:
            print("콜라가 모두 판매되었습니다. 판매를 중지합니다.")
            break
    else:
        print("돈이 부족합니다.")
        break

- 돈을 받았습니다.
-- 콜라가 나왔습니다.
남은 콜라는 2개입니다.

 

- 돈을 받았습니다.
-- 콜라가 나왔습니다.
남은 콜라는 1개입니다.

 

- 돈을 받았습니다.
-- 콜라가 나왔습니다.
남은 콜라는 0개입니다.

 

콜라가 모두 판매되었습니다. 판매를 중지합니다.

while문 다음에 콜론(:)이 들어가야 한다.

 

소스 분석

cola_count = 3
cola_price = 100
money = 500

변수이다.

자판기의 콜라 갯수, 콜라 가격, 가지고 있는 돈을 변수로 입력한다.

while money > 0:
    print("- 돈을 받았습니다.")
    
    if money > cola_price: 
        print("-- 콜라가 나왔습니다.")       
        cola_count = cola_count -1
        print("남은 콜라는 %d개입니다.\n" % cola_count)
        money = money - cola_price
              
        if cola_count == 0:
            print("콜라가 모두 판매되었습니다. 판매를 중지합니다.")
            break
    else:
        print("돈이 부족합니다.")
        break 

while 반복문이다.

 

money는 500이므로 money > 0은 참이므로 다음 구문이 실행된다.

 

자판기를 생각해보자. 돈을 넣었을 때, 사고자하는 물건값보다 돈이 많아야 한다. 따라서 돈이 콜라 가격보다 많은 지를 검사한다.

if money > cola_price: 이 조건이 참이면 if 구분을 실행하고, 거짓이 되면 else 구문이 실행된다.

다행히 돈이 콜라가격보다 많으니 if 구문이 실행된다.

 

콜라가 나오고 나면,

자판기는 콜라의 갯수를 1개 줄여준다.

cola_count = cola_count -1

그리고 돈의 잔액을 콜라 가격만큼 빼준다.

money = money - cola_price

 

그리고 다음 조건문을 본다.

if cola_count == 0:

콜라의 갯수가 0인지를 살펴본다. 만약 콜라의 갯수가 0보다 크다면 while money > 0의 조건을 다시 검사하며 구문은 반복된다.

 

만약 cola_count 가 0이라면 if cola_count == 0: 이 참이되어 if 구문이 실행된다.

print("콜라가 모두 판매되었습니다. 판매를 중지합니다.")가 실행 된 후,  break가 실행된다.

 

break는 while 구문을 완전히 빠져나오라는 명령이다. break문을 만나면, while 구문은 완전히 종료된다.

 

변수의 값을 변경해가면서 결과를 테스트 해본다.

 

 

1269732368_1557260559.566.png

 

 

 

while문의 처음으로 돌아가기

 

while문은 조건문이 거짓이거나, break 문을 만나면 while 문을 빠져나간다. 즉, while 문이 종료된다.

하지만, 경우에 따라서 while문 내부의 다른 문장을 실행하지 않고, 처음으로 돌아가서 while 조건문을 검사하고자 할 경우가 있다. 다시 말하면, 문장 실행 중간에 while문의 처음으로 돌아가야 할 경우가 생긴다.

이때 사용하는 것이 continue문이다.

 

1부터 10까지의 숫자 중에서 짝수만 출력하는 프로그램을 만들어 보자.

 

소스

a = 0
while a < 10:
    a = a + 1
    if a % 2 == 1: 
        continue
    print(a)

2
4
6
8
10

while문 다음에 콜론(:)이 들어가야 한다.

 

소스 분석

a = 0

변수이다.

a의 값을 0으로 초기화 한다.

while a < 10:
    a = a + 1
    if a % 2 == 1: 
        continue
    print(a)

while 반복문이다.

 

a는 10이므로 a < 10은 참이므로 다음 구문이 실행된다.

a = a + 1은 a의 값을 1씩 증가시킨다. 

첫번째 반복에서 a = 0 + 1 이므로 a는 1이 된다.

 

if 조건문을 살펴본다.

if a % 2 == 1: 

% 연산자는 나머지를 구하는 연산자이다. 2로 나누어서 나머지가 1이라는 것은 홀수를 의미한다. 만약 짝수를 구하고 싶다면 나누어서 나머지가 0인 수를 찾으면 된다.

첫번째 반복에서 a는 1이다. 따라서 2로 나눈 나머지는 1이므로 if 조건이 참이 된다.

if 조건이 참이므로 if 블록의 구문이 실행된다. 즉, continue가 실행된다.

continue가 실행되면, 이후의 구문은 실행되지 않고, 바로 처음으로 돌아가서 while 의 조건문을 검사하게 된다. 즉, 처음으로 돌아가서 반복을 수행한다.

 

두번째 반복이 된다면, a 는 2가 되고, if 구문은 거짓이 되므로 print(a)가 실행된다. 

 

변수의 값을 변경해가면서 결과를 테스트 해본다.

 

 

1269732368_1557261278.2343.png

 

 

 

무한 반복(loop)


프로그래밍을 하다보면 무한루프를 사용하는 경우가 많이 있다. 사용자의 입력을 계속 기다리는 경우나, 내부적으로 지속적인 작동을 해야 하는 경우 무한루프를 사용한다. 하지만 무한 루프 내부의 구문이 존재하지 않거나, 복잡한 계산식이 존재한다면, 컴퓨터의 동작이 멈출 수 있다. 엄밀히 말하면, 컴퓨터의 모든 자원이 무한루프에 쏠려서 다른 작업이 불가능하게 된다.

따라서 무한 반복문을 사용하더라도, while 구문 내부에 조건이 거짓이 되는 코드를 삽입한다던가, 코드의 동작을 잠시간 딜레이 시킨다던가 하는 식으로 무한 루프로 인해 컴퓨터의 자원이 모두 소모되는 걸 방지해야 한다.

 

무한 반복(loop)이 되는 경우

while True:

    print("무한 루프")

 

무한루프를 빠져나가려면 프로그램 자체를 종료시켜야 한다.

보통의 OS에서는 "Ctrl + C" 키를 누르면 프로그램이 종료된다.

 

 

※ while문은 프로그래밍 언어에서 매우 많이 사용하는 구문이다. 

while문의 반복에 대한 이해를 정확하게 할 수 있도록, 지금까지 했던 예제들의 변수 값을 변경해가면서 다양하게 테스트를 해본다. 

 

 

while문 끝

댓글목록 sfs

총 30 건 , 1 페이지
게시물 검색
파이썬 기초 목록
번호 제목 글쓴이 조회 날짜
1 관리자 30809 05-02
2 관리자 37544 05-02
3 관리자 23973 05-02
4 관리자 32908 05-02
5 관리자 34083 05-02
6 관리자 27707 05-02
7 관리자 28100 05-02
8 관리자 28339 05-02
9 관리자 26890 05-02
10 관리자 28999 05-02
11 관리자 26924 05-02
12 관리자 32044 05-02
13 관리자 34187 05-02
14 관리자 31405 05-06
15 관리자 23255 05-06
16 관리자 22628 05-06
17 관리자 25791 05-06
18 관리자 23611 05-07
열람중 관리자 36567 05-07
20 관리자 41611 05-07
21 관리자 31508 05-07
22 관리자 31498 05-07
23 관리자 31630 05-28
24 관리자 41260 05-28
25 관리자 31177 05-28
26 관리자 34178 06-04
27 관리자 33298 06-11
28 관리자 32327 06-12
29 관리자 31297 12-21
30 관리자 24675 12-25
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.