if 문이랑 매우 흡사하다
while 조건: 결과가 True / False 에 따라 코드를 실행 반복할지 코드를 탈출 할지 결정된다
ex )
while 조건 :
True
실행할 명령 1, 2 를 실행하고
다시 while 실행
True
실행할 명령 1, 2 를 다시 실행
다시 while 실행
False
코드 종료
i = 0 # 초기식
while i < 100: # while 조건식
print('Hello, World!') # 반복할 코드
i += 1 # 변화식
결과
주로 사용되는 code 형태
treeHit = 0
while treeHit < 10:
treeHit += 1
print("나무를 %d번 찍었습니다." % treeHit)
if treeHit == 10:
print("나무 넘어갑니다.")
위 예에서 while문의 조건문은 treeHit < 10이다.
" treeHit +=1 " 은 할당연산자로 " treeHit = treeHit + 1 " 과 같다
treeHit가 10보다 작은 동안에 True 이므로 while문 안의 문장을 계속 반복 수행한다.
treeHit < 10 조건문이 False가 되므로 while문을 종료하게 된다.
tree Hit | 조건문 | 조건 판단 | 수행하는 문장 | while |
0 | 0 < 10 | True | 나무를 1번 찍었습니다. | 반복 |
1 | 1 < 10 | True | 나무를 2번 찍었습니다. | 반복 |
2 | 2 < 10 | True | 나무를 3번 찍었습니다. | 반복 |
3 | 3 < 10 | True | 나무를 4번 찍었습니다. | 반복 |
4 | 4 < 10 | True | 나무를 5번 찍었습니다. | 반복 |
5 | 5 < 10 | True | 나무를 6번 찍었습니다. | 반복 |
6 | 6 < 10 | True | 나무를 7번 찍었습니다. | 반복 |
7 | 7 < 10 | True | 나무를 8번 찍었습니다. | 반복 |
8 | 8 < 10 | True | 나무를 9번 찍었습니다. | 반복 |
9 | 9 < 10 | True | 나무를 10번 찍었습니다. 나무 넘어갑니다. |
반복 |
10 | 10 < 10 | False | 종료 |
여러 가지 선택지 중 하나를 선택해서 입력받는 예제를 만들어 보자
prompt = """
1. Add
2. Del
3. List
4. Quit
Enter number: """
prompt에 여러 문자열들을 변수로 지정한다
number = 0
while number != 4:
print(prompt)
number = int(input())
이렇게 number = 0 을 설정해 놓지 않으면
다음 while 문의 number != 4 에서 변수가 존재하지 않는다는 오류가 발생한다
( number = int(input())는 사용자의 숫자 입력을 받아들이는 것 )
1. Add
2. Del
3. List
4. Quit
Enter number :
while문을 보면 number가 4가 아닌 동안 prompt를 출력하고 사용자로부터 번호를 입력받는다.
다음 결과 화면처럼 사용자가 값 4를 입력하지 않으면 계속해서 prompt를 출력한다.
( 정답 : 4 를 입력해야 while 문을 종료한다 )
4를 입력하면 조건문이 거짓이 되어 while문을 빠져나가게 된다.
" number != 4 " 의 뜻은 input 값이 4와 같지 않다 라는 뜻인데
user 가 4를 입력하였으므로 number != 4 는 거짓이 된다
break 문 ( while 강제종료 )
coffee = 10
money = 300
while money:
print("돈을 받았으니 커피를 줍니다.")
coffee = coffee -1
print("남은 커피의 양은 %d개입니다." % coffee)
if coffee == 0:
print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
break
money가 300으로 고정되어 있으므로 while money : 에서 조건문인 money는 0이 아니기 때문에 항상 True 이다.
따라서 무한히 반복되는 무한 루프를 돌게 된다.
그리고 while문의 내용을 한 번 수행할 때마다 coffee = coffee - 1에 의해서 coffee의 개수가 1개씩 줄어든다.
만약 coffee가 0이 되면 if coffee == 0: 문장에서 coffee == 0:이 참이 되므로 if문 다음 문장 "커피가 다 떨어졌습니다. 판매를 중지합니다."가 수행되고 break문이 호출되어 while문을 빠져나가게 된다.
조금 더 복잡한 예
coffee = 10
while True:
money = int(input("돈을 넣어 주세요: "))
if money == 300:
print("커피를 줍니다.")
coffee -= 1
elif money > 300:
print("거스름돈 %d를 주고 커피를 줍니다." % (money -300))
coffee -= 1
else:
print("돈을 다시 돌려주고 커피를 주지 않습니다.")
print("남은 커피의 양은 %d개 입니다." % coffee)
if coffee == 0:
print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")
break
위 코드를 실행하게 되면 아래와 같이 입력 창이 생성된다
돈을 넣어 주세요:
500을 입력하니 elif money > 300: 가 실행이 되었다
다시 while 처음부로 돌아가서 " coffee = 9 " 인 상태에서 다시 while 실행한다
이번에 300을 입력하니 if money == 300: 이 실행이 되었다
다시 while 처음부로 돌아가서 " coffee = 8 " 인 상태에서 다시 while 실행한다
이번에 100을 입력하니 else: 이 실행이 되었다
돈을 넣어 주세요: 500
거스름돈 200를 주고 커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 100
돈을 다시 돌려주고 커피를 주지 않습니다.
남은 커피의 양은 8개입니다.
돈을 넣어 주세요:
coffee 의 변수를 10으로 지정하였다 ( coffee = 10 )
code 를 한 줄 실행할때마다 coffee -= 1 로 coffee 의 변수가 차감된 상태로 변수가 재 선정 된다
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
커피가 다 떨어졌습니다. 판매를 중지 합니다.
이해를 돕고자 300 원을 10회 입력하였다
300 을 1번 입력할때마다 coffee -1 이 되어 다시 while 을 실행하게 된다
coffee 는 결국 == 0 이 되므로 코드는 종료하게 된다
continue
while문을 빠져나가지 않고 while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우가 생기게 된다.
이때 사용하는 것이 바로 continue문이다.
1부터 10까지의 숫자 중에서 홀수만 출력하는 것을 while문을 사용해서 작성한다고 생각해보자
a = 0
while a < 10:
a = a + 1
if a % 2 == 0: continue
print(a)
1
3
5
7
9
a가 10보다 작은 동안 a는 1만큼씩 계속 증가한다.
if a % 2 == 0(a를 2로 나누었을 때 나머지가 0인 경우)이 True가 되는 경우는 a가 짝수일 때이다.
즉 a가 짝수이면 continue 문장을 수행한다.
continue문은 while문의 맨 처음(조건문: a<10)으로 돌아가게 하는 명령어이다.
a가 짝수이면 print(a)는 수행되지 않을 것이다.
무한 루프 ( Loop )
무한 루프란 무한히 반복한다는 의미이다.
우리가 사용하는 일반 프로그램 중에서 무한 루프 개념을 사용하지 않는 프로그램은 거의 없다.
파이썬에서 무한 루프는 while문으로 구현할 수 있다.
다음은 무한 루프의 기본 형태이다.
while True:
수행할 문장1
수행할 문장2
while문의 조건문이 True이므로 항상 참이 된다.
따라서 while문 안에 있는 문장들은 무한하게 수행될 것이다.
다음의 무한 루프 예이다. [ Ctrl+C ]를 눌러 빠져나가자.
while True:
print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
....
'Python' 카테고리의 다른 글
파이썬 상수( Constant ) (0) | 2020.08.29 |
---|---|
indent ( 들여쓰기 ) (0) | 2020.08.29 |
for 문 2개를 이용하여 구구단 만들기 (0) | 2020.08.08 |
for 반복문 (0) | 2020.08.08 |
elif & else (0) | 2020.08.08 |