while 반복문

Jeongyun Heo·2021년 1월 8일
0

Python

목록 보기
22/36
post-thumbnail

while 반복문으로 Hello, world! 100번 출력하기
https://dojang.io/mod/page/view.php?id=2247

while 반복문 사용하기

while 반복문은 조건식으로만 동작하며 반복할 코드 안에 조건식에 영향을 주는 변화식이 들어간다.

i = 0                      # 초기식
while i < 100:             # while 조건식
    print('Hello, world!')  # 반복할 코드
    i += 1                  # 변화식

while 반복문 실행 과정

  • 먼저 초기식부터 시작하여 조건식을 판별한다.
  • 이때 조건식이 참(True)이면 반복할 코드와 변화식을 함께 수행한다.
  • 그리고 다시 조건식을 판별하여 참(True)이면 코드를 계속 반복하고, 거짓(False)이면 반복문을 끝낸 뒤(loop를 빠져온다) 다음 코드를 실행한다.

조건식반복할 코드 및 변화식조건식으로 순환하는 부분이 루프(loop)이다.

while 반복문 사용하기

while 반복문은 조건식을 지정하고 끝에 :(콜론)을 붙인 뒤 다음 줄에 반복할 코드변화식을 넣는다.

초기식
while 조건식
    반복할 코드
    변화식

while 다음 줄에 오는 코드는 반드시 들여쓰기 해준다.

while 반복문으로 'Hello, world!'를 100번 출력해보자.

i = 0                      # 초기식
while i < 100:             # while 조건식
    print('Hello, world!')  # 반복할 코드
    i += 1                  # 변화식

-----------------------------------------
Hello, world!
... (생략)
Hello, world!
Hello, world!
Hello, world!

while 반복문의 기본 형태

초깃값을 1부터 시작하기

이번에는 i에 0이 아니라 1을 할당하여 100번 출력해보자.

i = 1                       # 초기식
while i <= 100:             # while 조건식
    print('Hello, world!', i)  # 반복할 코드
    i += 1                     # 변화식

------------------------------------------
Hello, world! 1
Hello, world! 2
Hello, world! 3
...  (생략)
Hello, world! 99
Hello, world! 100

i에 1 을 넣었으므로 while 조건식은 i <= 100과 같이 지정한다.
i가 1 부터 증가하므로 100번 반복하게 된다.
만약 i가 101 이 되면 i <= 100은 거짓(False)이 되므로 반복문을 끝낸다.

i = 1                       # 초기식
while i <= 100:             # while 조건식
    print('Hello, world!', i)  # 반복할 코드
    i += 2                     # 변화식

-------------------------------------------
Hello, world! 1
Hello, world! 3
Hello, world! 5
...  (생략)
Hello, world! 97
Hello, world! 99

변화식을 +2로 바꾸면 홀수만 출력된다.

i = 2                       # 초기식
while i <= 100:             # while 조건식
    print('Hello, world!', i)  # 반복할 코드
    i += 2                     # 변화식

-------------------------------------------
Hello, world! 2
Hello, world! 4
Hello, world! 6
...  (생략)
Hello, world! 98
Hello, world! 100

초기식을 2로 바꿔주면 짝수만 출력된다.

초깃값을 감소시키기

반대로 초깃값을 크게 주고, 변수를 감소시키면서 반복할 수도 있다.

다음은 100부터 1까지 100번 반복한다.

i = 100                       # 초기식
while i > 0:                  # while 조건식
    print('Hello, world!', i)   # 반복할 코드
    i -= 1                      # 변화식

--------------------------------------------
Hello, world! 100
Hello, world! 99
Hello, world! 98
... (생략)
Hello, world! 2
Hello, world! 1

i 에 100을 할당한다.

while 조건식은 i > 0 과 같이 지정하여 1까지만 반복하도록 만든다.

변화식을 i -= 1 로 지정하여 변수의 값을 1씩 감소시킨다.

이렇게 하면 i 가 100부터 1까지 감소하면서 반복한다.

i 가 0이 되면 i > 0 은 거짓(False)이므로 반복문을 끝낸다.

입력한 횟수대로 반복하기

입력한 횟수대로 반복하기

count = int(input('반복할 횟수를 입력하세요: '))

i = 0
while i < count:
    print('Hello, world!', i)
    i += 1

---------------------------------------------
반복할 횟수를 입력하세요: 3 (입력)
Hello, world! 0
Hello, world! 1
Hello, world! 2

코드를 실행하면 '반복할 횟수를 입력하세요: '가 출력된다.
여기에 3을 입력하고 엔터를 누른다.

input으로 입력값을 받아서 conut 변수에 저장했다.
그리고 i에는 0을 할당하고,
while 반복분의 조건식에서 i < count와 같이 지정하여 count에 들어있는 값만큼 반복하도록 만들었다.
여기서는 3을 입력했으므로 'Hello, world!'는 3번만 출력된다.

이번에는 초깃값을 받은 뒤 초깃값 만큼 출력해보자.

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

input으로 입력값을 받아서 count 변수에 저장했다.
조건식에서 count > 0와 같이 지정하여 count에 들어있는 값만큼 반복하도록 만들었다.
여기서는 변수 i 대신 count를 바로 사용하므로 변화식을 count -= 1로 지정하여 반복할 때마다 count를 감소시키고 count가 0이 되면 반복문을 끝낸다.

반복 횟수가 정해지지 않은 경우

난수(random number): 특정 주기로 반복되지 않으며 규칙 없이 무작위로 나열되는 숫자

파이썬에서 난수를 생성하려면 random 모듈이 필요하다.
모듈은 import 키워드를 사용하여 가져올 수 있다.

import random

print(random.random())

-----------------------------
👉 0.8202557619301757
👉 0.0650261259749908
👉 0.019305069712103995

random.random()을 실행할 때마다 계속 다른 실수가 출력된다. 이 숫자가 난수이다.

random 모듈randint 함수를 사용해보자.
randint 함수는 난수를 생성할 범위를 지정하며, 범위에 지정한 숫자도 난수에 포함된다.

random.randint(a, b)

randint 함수로 주사위를 만들어보자.

random.randint(1, 6)처럼 1과 6을 넣으면 1과 6 사이의 난수가 생성된다. (6 포함)

import random

print(random.randint(1, 6))

------------------------------
👉 1
👉 3
👉 5
👉 6

random.randint(1, 6)을 실행할 때마다 다른 숫자가 나온다.

이 함수를 while 반복문에 사용해보자.

import random     # random 모듈을 가져옴

i = 0
while i != 3:     # 3이 아닐 때 계속 반복
    i = random.randint(1, 6)  # randint를 사용하여 1과 6 사이의 난수를 생성
    print(i)

------------------------------
6
5
4
5
5
2
2
6
5
2
6
2
4
3

while 반복문에서 i != 3과 같이 조건식을 지정하여 3이 아닐 때 계속 반복하도록 만든다. 그리고 반복할 코드에서 i = random.randint(1,6)과 같이 1과 6 사이의 난수를 생성하여 변수 i에 저장합니다.

정수가 무작위로 생성되어 실행할 때마다 반복 횟수가 달라진다.

while 반복문은 반복 횟수가 정해져 있지 않을 때 유용하다.

random.choice(시퀀스객체)

random.choice(시퀀스객체) 함수를 사용하면 '시퀀스 객체'에서 요소를 무작위로 선택할 수 있다.
(시퀀스 객체: 리스트, 튜플, 문자열, range 등)

👇 리스트에서 무작위로 숫자를 선택한다.

import random

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

----------------------------
👉 1
👉 6
👉 5

while 반복문으로 무한 루프 만들기

while에 True를 지정하면 무한 루프

while에 조건식 대신 True를 지정하면 무한히 반복하는 무한 루프가 만들어진다. 따라서 조건식이 항상 참(True)이므로 변화식도 필요 없다.

Ctrl+C 를 누르면 무한 루프에서 나올 수 있다.

while True:
    print('Hello, world!')

-----------------------------
Hello, world!
Hello, world!
Hello, world!
Hello, world!
... (계속 반복)

while에 True 대신 True로 취급하는 값을 사용해도 무한 루프로 동작

👇 0이 아닌 숫자는 True로 취급하여 무한 루프로 동작

while 1:
    print('Hello, world!')

👇 내용이 있는 문자열은 True로 취급하여 무한 루프로 동작

while 'Hello':
    print('Hello, world!')

- while 반복문은 조건식이 참(True)일 때 반복하고 거짓(False)일 때 반복을 끝낸다.
- while 반복문은 반복 횟수가 정해져 있지 않을 때 자주 사용한다.
- for 반복문은 반복 횟수가 정해져 있을 때 자주 사용한다.
- for와 while의 차이점을 정확히 익혀 두고 적절한 곳에 사용하는 것이 좋다.

연습문제: 변수 두 개를 다르게 반복하기

다음 소스 코드를 완성하여 정수 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

심사문제: 교통카드 잔액 출력하기

표준 입력으로 금액(정수)이 입력됩니다. 1회당 요금은 1,350원이고, 교통카드를 사용했을 때마다의 잔액을 각 줄에 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 단, 최초 금액은 출력하지 않아야 합니다. 그리고 잔액은 음수가 될 수 없으며 잔액이 부족하면 출력을 끝냅니다.

x = int(input())

while x >= 1350:
    x -= 1350
    print(x)

--------------------
13500 (입력)
12150
10800
9450
8100
6750
5400
4050
2700
1350
0

0개의 댓글