while반복문은 조건식으로만 동작하며 반복할 코드 안에 조건식에 영향을 주는 변화식이 들어간다.
i = 0 # 초기식
while i < 100: # while 조건식
print('Hello, world!') # 반복할 코드
i += 1 # 변화식
순환하는 부분(루프, loop) : 조건식 → 반복할 코드 및 변화식 → 조건식
while
반복문은 조건식을 지정하고 끝에 콜론(:
)을 붙인 뒤 반복할 코드와 변화식을 넣는다.
초기식 : 보통 변수에 값을 저장하는 코드
초기식
while 조건식:
반복할 코드
변화식
while
반복문으로 'Hello, world!'
를 100번 출력
>>> i = 0
>>> while i < 100:
print('Hello, world!')
i += 1
# 실행결과
Hello, world!
(생략)
Hello, world!
Hello, world!
Hello, world!
만약 조건식만 지정하고 변화식을 생략하면 반복이 끝나지 안고 계속 실행(무한 루프)되므로 주의해야 한다.
📎 참고) 에러
SyntaxError: invalid syntax:
while
반복문의 형식을 지키지 않았을 때 발생하는 구문 에러
SyntaxError: expected an indented block:
while
다음 줄에 오는 반복할 코드의 들여쓰기가 맞지 않아서 발생하는 구문 에러
i에 0이 아닌 1을 할당하여 'Hello, world!'를 100번 출력
>>> i = 1
>>> while i <= 100: # 100을 포함시켜야 100번 출력 가능
print('Hello, world!', i)
i += 1
# 실행결과
Hello, world! 1
Hello, world! 2
Hello, world! 3
(생략)
Hello, world! 99
Hello, world! 100
초깃값을 크게 주고, 변수를 감소시키면서 반복
>>> i = 100
>>> while i > 0:
print('Hello, world!', i)
i -= 1
Hello, world! 100
Hello, world! 99
Hello, world! 98
(생략)
Hello, world! 2
Hello, world! 1
count = int(input('반복할 횟수를 입력하세요: '))
i = 0
while i < count: # i가 count보다 작을 때 반복
print('Hello, world!', i)
i += 1
'반복할 횟수를 입력하세요:'
가 출력되면 3을 입력하고 엔터
# 실행결과
반복할 횟수를 입력하세요: 3 (입력)
Hello, world! 0
Hello, world! 1
Hello, world! 2
초깃값을 받은 뒤 초깃값만큼 출력
count = int(input('반복할 횟수를 입력하세요: '))
while count > 0: # count가 0보다 클 때 반복
print('Hello, world!', count)
count -= 1 # count를 1씩 감소시킴
# 실행결과
반복할 횟수를 입력하세요: 3 (입력)
Hello, world! 3
Hello, world! 2
Hello, world! 1
변수i
대신 count
를 바로 사용하기 때문에 변화식을 count -= 1
로 지정했다.
while
반복문은 주로 반복 횟수가 정해지지 않았을 때 사용한다.
난수를 생성해서 숫자에 따라 반복을 끝내 본다.
난수(random number)란 특정 주기로 반복되지 않으며 규칙없이 무작위로 나열되는 숫자를 뜻한다.
파이썬에서 난수를 생성하려면 random
모듈이 필요하다. import
키워드를 사용해 모듈을 가져온다.
import random # random 모듈을 가져옴
random
모듈의 randint
함수를 사용하면 숫자를 정수로 생성할 수 있다.
>>> random.randint(1, 6) # 1과 6사이의 난수 생성
4
이 함수를 while
반복문에 사용해본다.
1과 6 사이의 난수를 생성한 뒤 3이 나오면 반복을 끝낸다.
import random # random 모듈을 가져옴
i = 0
while i != 3: # 3이 아닐 때 계속 반복
i = random.randint(1, 6) # randint를 사용하여 1과 6 사이의 난수를 생성
print(i)
# 실행결과
5
1
4
1
1
3
실행 결과를 보면 정수가 무작위로 생성되어 실행할 때마다 반복 횟수가 달라진다.
이처럼 while
반복문은 반복 횟수가 정해져 있지 않을 때 유용하다.
📎 참고) random.choice
random.choice
함수를 사용하면 시퀀스 객체에서 요소를 무작위로 선택할 수 있다.
다음은 1, 2, 3, 4, 5, 6이 들어있는 리스트에서 무작위로 숫자를 선택한다.
random.choice(시퀀스객체)>> dice = [1, 2, 3, 4, 5, 6] >> random.choice(dice) 1 >> random.choice(dice) 4 >> random.choice(dice) 3
물론
random.choice
함수는 시퀀스 객체를 받으므로 리스트 뿐만 아니라 튜플,range
, 문자열 등을 넣어도 된다.
while True: # while에 True를 지정하면 무한 루프
print('Hello, world!')
# 실행결과
(생략)
Hello, world!
Hello, world!
Hello, world!
Hello, world!
(계속 반복)
무한 루프를 끝낼 때에는 Ctrl + C
를 입력
Ctrl + C
로 프로그램을 완전히 종료시킨다.
단순히 무한 루프를 종료시키기 위해서는 if
문으로 조건을 만들어 주어야 한다.
📎 참고) 에러
NameError: name 'true' is not defined:
True
는 첫 글자만 대문자이다. T를 소문자로 입력하지 않았는지, 전부 대문자로 입력하지 않았는지 확인한다.
다음 소스 코드를 완성하여 정수 2 5, 4 4, 8 3, 16 2, 32 1이 각 줄에 출력되게 만드세요. while에 조건식은 두 개 지정하고, 두 변수를 모두 변화시켜야 합니다.
i = 2
j = 5
while i <= 32 or j >= 1:
print(i, j)
i *= 2
j -= 1
# 실행결과
2 5
4 4
8 3
16 2
32 1
숫자의 규칙을 보면 공백 기준 왼쪽 숫자들은 2의 배수, 오른쪽 숫자들은 5부터 1씩 줄어드는 규칙이 있다.
따라서
1. while
반복문 안에서 반복할 때마다 변수 i
는 2의 배수, j
는 1씩 감소시킨다.
2. i
는 32까지, j
는 1까지 출력해야 하므로 while
조건식에 해당 범위 설정