[Python 기초] 프로그램의 구조, 제어문 - while문

업데이트:

개요

jpg


1. while문의 개념

while문은 조건문이 참(True)인 동안 하위 문장들을 반복적으로 수행하고 조건문이 거짓(False)이 되면 빠져나온다. 따라서 반복문이라고도 부른다.

jpg

while 조건문:
   수행할 문장1
   수행할 문장2
   수행할 문장3
   ...


2. while문 직접 만들어보기

예시1 : 로딩 완료

100% 로딩이 완료되면 실행된다는 문구를 만들어보자.

loding = 0
while loding < 100:
    loding = loding + 10
    print("현재 %s%% 로딩 중 입니다." % loding)
    if loding == 100:
        print("실행합니다.")
[Output]
현재 10% 로딩 중 입니다.
현재 20% 로딩 중 입니다.
현재 30% 로딩 중 입니다.
현재 40% 로딩 중 입니다.
현재 50% 로딩 중 입니다.
현재 60% 로딩 중 입니다.
현재 70% 로딩 중 입니다.
현재 80% 로딩 중 입니다.
현재 90% 로딩 중 입니다.
현재 100% 로딩 중 입니다.
실행합니다.

loding변수는 while문을 한번 돌때마다 10씩 추가된다. 계속 추가되다가 100이되는 시점에 if문의 명령(print("실행합니다"))을 수행하고 while조건문은 거짓(False)이 되므로 while문을 빠져나오게 된다.

예시2 : 사용자 입력 구조 만들기

prompt = """
1. data
2. science
3. python
4. Exit
"""

다음과 같은 4가지 선택지를 제공한다고 해보자.
4번은 Exit으로 종료를 의미한다.
따라서 사용자가 4를 입력하면 while문을 빠져나오도록 설계해보자.

number = 0
while number != 4:
    print(prompt)
    number = int(input())

number = int(input)은 사용자의 입력을 받아들이게 창을 제공해주는 내장함수(input)이다. 실행 후 제공된 창에 숫자를 입력하면 number 변수에 저장되고 while문을 계속 수행한다.
이 함수는 이후 포스팅에 다시 설명하도록 한다.

[Output]
1. data
2. science
3. python
4. Exit

1

[Output]
1. data
2. science
3. python
4. Exit

2

[Output]
1. data
2. science
3. python
4. Exit

4    #종료


3. while문 강제로 빠져나가기(break)

커피판매 자판기에서, 커피가 매진되면 판매를 종료해라

coffee = 10
money = 300
while money:
    print("돈을 받았으니 커피를 준다.")
    coffee = coffee - 1   # 남은 커피가 하나 줄어든다
    print("남은 커피는 %s개 입니다." % coffee)
    if not coffee:
        print("커피가 매진되었습니다. 판매를 종료합니다.")
        break

위에서 while money:money = 300이므로 항상 참(True)이게 되어 무한반복(loop)을 하게 된다.
이 경우 coffee = 0일때, 즉 거짓(False)이 되면(not coffee는 참) if 문이 수행되고, break를 통해 while문을 빠져나오게 된다.

[Output]
돈을 받았으니 커피를 준다.
남은 커피는 9개 입니다.
돈을 받았으니 커피를 준다.
남은 커피는 8개 입니다.
돈을 받았으니 커피를 준다.
남은 커피는 7개 입니다.
돈을 받았으니 커피를 준다.
남은 커피는 6개 입니다.
돈을 받았으니 커피를 준다.
남은 커피는 5개 입니다.
돈을 받았으니 커피를 준다.
남은 커피는 4개 입니다.
돈을 받았으니 커피를 준다.
남은 커피는 3개 입니다.
돈을 받았으니 커피를 준다.
남은 커피는 2개 입니다.
돈을 받았으니 커피를 준다.
남은 커피는 1개 입니다.
돈을 받았으니 커피를 준다.
남은 커피는 0개 입니다.
커피가 매진되었습니다. 판매를 종료합니다.

커피자판기의 좀 더 복잡한 구조

coffee = 10
while True:
    money = int(input("돈을 넣어주세요: "))
    if money == 300:
        print("커피를 줍니다.")
        coffee = coffee - 1
    elif money > 300:
        print("거스름돈 %s를 주고 커피를 줍니다." % (money - 300))
        coffee = coffee -1
    else:
        print("돈을 더 넣어주세요.")
        print("남은 커피 양은 %s개 입니다." % coffee)
    if not coffee:
        print("커피가 매진되었습니다. 판매를 중지합니다.")
        break

위의 제어문을 일일이 살펴보면 다음과 같다.

1.돈을 넣었을 때(사용자 입력) 커피값(300원)이면 커피가 나오고,
2.커피값보다 많으면 거스름돈을 주고 커피가 나오고,
3.커피값보다 적으면 두가지 문구를 출력해주고,
4.coffee = 0 이 되면 커피가 매진되었다는 문구를 출력하고 반복문을 빠져나온다.

[Output]
돈을 넣어주세요: 2000	#사용자 입력
거스름돈 1700를 주고 커피를 줍니다.
돈을 넣어주세요: 300	#사용자 입력
커피를 줍니다.
돈을 넣어주세요: 200	#사용자 입력
돈을 더 넣어주세요.
남은 커피 양은 8개 입니다.
돈을 넣어주세요: 1000	#사용자 입력
거스름돈 700를 주고 커피를 줍니다.
돈을 넣어주세요: 1000	#사용자 입력
거스름돈 700를 주고 커피를 줍니다.
돈을 넣어주세요: 1000	#사용자 입력
거스름돈 700를 주고 커피를 줍니다.
돈을 넣어주세요: 1000	#사용자 입력
거스름돈 700를 주고 커피를 줍니다.
돈을 넣어주세요: 1000	#사용자 입력
거스름돈 700를 주고 커피를 줍니다.
돈을 넣어주세요: 1000	#사용자 입력
거스름돈 700를 주고 커피를 줍니다.
돈을 넣어주세요: 1000	#사용자 입력
거스름돈 700를 주고 커피를 줍니다.
돈을 넣어주세요: 1000	#사용자 입력
거스름돈 700를 주고 커피를 줍니다.
커피가 매진되었습니다. 판매를 중지합니다.

결과를 확인해보면 잘 표현된 것을 확인할 수 있다.


4. 조건에 맞지 않는 경우 맨 처음으로 돌아가기(continue)

continue는 조건문이 참이면 다음 문장을 수행하지 않고, while문의 맨처음으로 돌아가게 한다.

예시 : 1부터 10까지의 숫자 중 홀수(1,3,5,7,9)만을 출력해라.

a = 0
while a < 10:
    a = a + 1
    if a % 2 == 0: continue    #만약 a % 2가 0이면 다시 while문으로 돌아가라
    print(a)

%는 ‘나머지’를 의미하는 연산자이다.
예를 들어, 10 % 3의 결과는 나머지인 1이된다.

[Output]
1
3
5
7
9

결과와 같이 a는 while문의 조건문을 통해, 0부터 10까지의 숫자를 가지게 되고 2로 나눈 나머지가 0이라면 print(a)를 수행하지 않고 다시 처음으로 돌아간다.
그래서 결과적으로 a가 홀수 일때만 print(a)를 수행해서, 홀수만 출력되는 것이다.


Reference

도서 [점프 투 파이썬] 를 공부하며 작성하였습니다.

댓글남기기