파이썬 | while 반복문

CHOI·2021년 10월 25일
0

Python

목록 보기
10/33
post-thumbnail

1. while 사용하기

이전에는 for 을 사용하여 'hello'를 100번 출력했었다. 그러면 이번에는 while 을 통해서 똑같은 작업을 해보자.

i = 0  # 초기식
while i < 100:  # 조건식
	print('hello')
	i += 1  # 변화식

먼저 초기식으로 i = 0 을 해준다. 그 이유는 조건식이 True 인지 False 인지 판단하기 위해서 먼저 i 를 확인하는데 아무값도 정의되어 있지 않다면 조건식이 충족이 되는지도 알 수 없기 때문이다.

while 반복문은 조건식으로만 동작되는 코드이며 코드 안에 조건식에 영향을 주는 변화식을 넣어준다. 왜냐하면만약 변화식을 넣지 않는다면 항상 참이거나 항상 거짓이 되기 때문이다.

조건식이 '참'일 경우 while 문 안에있는 코드들이 계속 반복되고 조건문이 '거짓'이 되는 순간 while 문을 빠져나온다.

(참고로 i++ 과 같은 수식은 파이썬에서는 사용할 수 없다.)

초깃값 감소

앞서 i 를 0으로 정의한 다음에 1씩 증가시켰는데 반대로 초깃값을 100으로 설정한 다음에 1씩 감소 시킬 수도 있다.

i = 100
while i > 0:
	print('hello')
	i -= 1

입력 횟수 만큼 출력

nb = int(input())

i = 0
while i < nb:
	print('hello')
	i += 1

2. 반복 횟수가 정의되지 않았을 때

지금까지는 i 를 정의하고 증가시키거나 감소시켜서 while 반복문을 사용하였다. 그런데 대부분 while 반복문은 반복 횟수가 정의되지 않았을 때 주로 사용한다.

이번에는 난수를 생성하여 숫자에 따라 반복을 끝내보겠다. 난수(random number)란 특정 주기로 반복되지 않으며 규칙 없이 무작위로 나열되는 숫자를 말한다. 현실에서 쉽게 볼 수 있는 난수로는 주사위를 굴려서 나온 숫자가 있다.

파이썬에서 난수를 생성하려면 random 모듈이 필요하다. 모듈은 import 키워드를 통해서 가져올 수 있다. 모듈에 대한 자세한 내용은 나중에 하겠다.

import random

print(random.random())
print(random.random())
print(random.random())
0.2647712821012206
0.3768107993057185
0.4949961718264718

먼저 import random 을 통해서 random 모듈을 가져오고 random.random() 를 통해서 무작위 숫자를 생성하였다. 숫자를 생성할 때마다 서로 다른 랜덤된 숫자가 출력되는 것을 확인할 수 있다. 이것이 바로 난수이다.

그런데 위 숫자는 정수가 아니기 때문에 우리는 좀더 보기 편한 정수 난수들을 생성해보자. 이때 사용하는 함수는 random 모듈의 randint 함수이다.

그러면 randint 함수를 통해서 주사위를 만들어보자. 보통 정육면체 주사위는 1부터 6까지 숫자가 있다. 따라서 random.randint(1, 6) 처럼 1과 6을 넣어주면 1부터 6사이의 난수가 생성이 된다.

import random

print(random.randint(1, 6))
print(random.randint(1, 6))
print(random.randint(1, 6))
4
2
5

그러면 이번에는 간단하게 난수가 3이 나올때 까지 반복문이 실행되도록 해보자. 단순히 말하면 주사위를 던져서 3이 나올때까지 계속 던진다고 생각하면 된다.

import random

i = 0
while i != 3:
	i = random.randint(1, 6)
	print(i)
2
5
2
6
2
6
1
4
5
1
3

while 반복문에서 i != 3 을 조건식을 주어서 i 가 3이 아닐 경우에는 반복문이 계속 실행되도록 하였다. 그리고 반복문 안에서는 새롭게 난수를 지정해주어 반복문이 실행될 때 마다 i 의 값이 계속 변하도록 설정한 것이다. 그러다가 i 에 3이 되면 print(i) 를 한 뒤에 while 조건문을 확인할 때 조건에 충족이 되지 않기 때문에 반복문이 끝나게 되는 것이다.

이제 이 코드를 여러번 실행해보자 그러면 정수가 무작위로 생성되기 때문에 실행할 때 마다 반복횟수가 바뀌는 것을 볼 수 있다. 이처럼 **while 반복문은 반복 횟수가 정의되지 않을 때 유용하다.**

% random.choice

random.choice 를 활용하면 시퀀스 객체에서 요소를 무작위로 가져올 수 있다. 다음은 1, 2, 3, 4, 5, 6이 들어있는 리스트에서 무작위로 숫자를 선택한다.

import random

dice = [1, 2, 3, 4, 5, 6]
print(random.choice(dice))
print(random.choice(dice))
print(random.choice(dice))
1
4
5

위 예시에서는 리스트를 사용했지만 같은 시퀀스 객체인 튜플, 문자열, range 또한 당연히 사용이 가능하다.

3. 무한루프 만들기

이번에는 while 문을 가지고 무한루프를 만들어보자. 무한루프를 만드는 것은 간단하다. 조건식에 True 를 넣어주면 된다. 그러면 조건식은 항상 '참' 이 되기 때문에 무한히 반복되는 무한 루프가 만들어지는 것이다.

while True:
	print('hello')
hello
hello
hello
.
.
.
(계속 반복)

조건식은 항상 참이 되므로 변화식도 필요가 없다. 이 스크립트 파일을 실행한 상태로 계속 두면 'hello'는 끝나지 않고 계속해서 출력될 것이다. 따라서 IDLE이나 콘솔(터미널, 명령 프롬프트)에서 Ctrl+C 를 입력하면 무한 루프를 끝낼 수 있다.

참고로 True 대신 True로 취급되는 값을 사용해도 무한 루프는 동작한다.

while 1:
	print('hello')
while 'hi':
	print('hello')

지금까지 while 반복문에 대해서 알아보았다. while 반복문은 조건식이 참(True)일 때 반복하고 거짓(False)일 때 반복을 끝내게 된다. 특히 while 반복문은 반복 횟수가 정해지지 않았을 때 주로 사용한다는 점을 꼭 기억해야한다. 반면 for 반복문은 반복 횟수가 정해져 있을 때 주로 사용한다. 그러므로 forwhile 의 차이점을 정확히 익혀두고 적절한 곳에 사용하는 것이 좋다.

profile
벨로그보단 티스토리를 사용합니다! https://flight-developer-stroy.tistory.com/

0개의 댓글