unit 16. for 반복문으로 Hello, world! 100번 출력하기
-
for와 range 사용하기
반복되는 작업을 간단하게 처리하기 위해 반복문이 주로 쓰이는데, 그 중 for 반복문에 대해 알아보겠다. 파이썬의 for 반복문은 다양한 사용 방법이 있지만, 먼저 range와 함께 사용하는 방법이 있다.
이때, for 반복문은 range에 반복할 횟수를 지정하고 앞에 in과 변수를 입력한다. 그리고 끝에 :(콜론)을 붙인 뒤 다음 줄에 반복할 코드를 넣는다.
for 변수 in range(횟수):
반복할 코드
동작 방식은 다음과 같다.
range(100)과 같이 지정하면 0부터 99까지 숫자 100개를 생성한다. 그리고 for는 in으로 숫자를 하나씩 꺼내서 변수 i에 저장하고, print를 실행한다. 즉, range(100)에서 숫자를 100번 꺼내면서 print를 실행하므로 'Hello, world!'가 100번 출력되는 것이다.
이처럼 for 반복문은 반복 횟수가 정해져 있을 때 주로 사용한다.
-
for와 range 응용하기
시작하는 숫자와 끝나는 숫자 지정하기
range에 다음과 같이 시작하는 숫자와 끝나는 숫자를 지정해서 반복할 수 있다.
- for 변수 in range(시작, 끝):
>>> for i in range(5, 12): # 5부터 11까지 반복
... print('Hello, world!', i)
...
Hello, world! 5
Hello, world! 6
Hello, world! 7
Hello, world! 8
Hello, world! 9
Hello, world! 10
Hello, world! 11
증가폭 사용하기
range는 증가폭을 지정해서 해당 값만큼 숫자를 증가시킬 수 있다.
for 변수 in range(시작, 끝, 증가폭):
>>> for i in range(0, 10, 2): # 0부터 8까지 2씩 증가
... print('Hello, world!', i)
...
Hello, world! 0
Hello, world! 2
Hello, world! 4
Hello, world! 6
Hello, world! 8
숫자를 감소시키기
range에 증가폭을 음수로 지정하면 숫자를 감소시킬 수 있다.
>>> for i in range(10, 0, -1): # 10에서 1까지 1씩 감소
... print('Hello, world!', i)
...
Hello, world! 10
Hello, world! 9
Hello, world! 8
... (생략)
Hello, world! 2
Hello, world! 1
※참고 : range는 숫자가 증가하는 기본 값이 양수 1이기 때문에, 증가폭을 음수로 지정해주지 않으면 숫자가 감소되지 않는다.
증가폭을 음수로 지정하는 방법 말고도 reversed를 사용하면 숫자의 순서를 반대로 뒤집을 수 있다.
- for 변수 in reversed(range(횟수))
- for 변수 in reversed(range(시작, 끝))
- for 변수 in reversed(range(시작, 끝, 증가폭))
>>> for i in reversed(range(10)): # range에 reversed를 사용하여 숫자의 순서를 반대로 뒤집음
... print('Hello, world!', i) # 9부터 0까지 10번 반복
...
Hello, world! 9
Hello, world! 8
Hello, world! 7
... (생략)
Hello, world! 1
Hello, world! 0
입력한 횟수대로 반복하기
사용자가 입력한 횟수대로 반복하기 위해선 input 함수를 쓰면 된다.
count = int(input('반복할 횟수를 입력하세요: '))
for i in range(count):
print('Hello, world!', i)
실행 결과는 다음과 같다.
반복할 횟수를 입력하세요: 3 (입력)
Hello, world! 0
Hello, world! 1
Hello, world! 2
-
시퀀스 객체로 반복하기
for 반복문은 반복 개수가 정해져있을 때 주로 사용하므로 range 대신 시퀀스 객체를 넣어도 된다.
즉, for는 리스트, 튜플, 문자열 등 시퀀스 객체로 반복할 수 있다.
예를 들어, 다음과 같이 for에 range 대신 리스트를 넣으면 리스트의 요소를 꺼내면서 반복한다.
>>> a = [10, 20, 30, 40, 50]
>>> for i in a:
... print(i)
...
10
20
30
40
50
물론 튜플도 마찬가지로 튜플의 요소를 꺼내면서 반복한다.
>>> fruits = ('apple', 'orange', 'grape')
>>> for fruit in fruits:
... print(fruit)
...
apple
orange
grape
※ 참고 : 여기서는 for 반복문의 변수를 i 대신 fruit로 사용했다. for에서 변수 i는 다른 이름으로 만들어도 상관없다.
또한 for에 문자열을 지정하면 문자를 하나씩 꺼내면서 반복한다.
>>> for letter in 'Python':
... print(letter, end=' ')
...
P y t h o n
그럼 문자열 'Python'을 뒤집어서 문자를 출력할 수는 없을까? 이때는 앞에서 배운 reversed를 활용하면 된다.
>>> for letter in reversed('Python'):
... print(letter, end=' ')
...
n o h t y P
reversed는 시퀀스 객체를 넣으면 시퀀스 객체를 뒤집어 준다.(원본 객체 자체는 바뀌지 않으며 뒤집어서 꺼내줌)
unit 17. while 반복문으로 Hello, world! 100번 출력하기
-
while 반복문 사용하기
while 반복문은 조건식으로만 동작하며, 반복할 코드 안에 조건식에 영향을 주는 변화식이 들어간다.
i = 0 # 초기식
while i < 100: # while 조건식
print('Hello, world!') # 반복할 코드
i += 1 # 변화식
조건식 → 반복할 코드 및 변화식 → 조건식으로 순환하는 루프(loop)를 돈다. 그리고 조건식이 거짓일때 루프를 빠져나오게 된다.
반복문 형식을 정리하자면 다음과 같다.
초기식
while 조건식:
반복할 코드
변화식
이제 while 반복문으로 'Hello, world!'를 100번 출력해보겠다.
>>> i = 0
>>> while i < 100:
... print('Hello, world!')
... i += 1
...
Hello, world!
... (생략)
Hello, world!
Hello, world!
Hello, world!
※ 참고 : 만약 조건식만 지정하고 변화식을 생략하면 반복이 끝나지 않고 계속 실행(무한 루프)되므로 주의해야 한다.
* 초깃값을 감소시키기
지금까지 초깃값을 증가시키면서 루프를 실행했다.
그런데 반대로 초깃값을 크게 주고, 변수를 감소시키면서 반복할 수도 있다.
다음은 100부터 1까지 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
while문으로 사용자가 입력한 횟수대로 반복하려면 input 함수를 사용하면 된다.
이번에는 초깃값을 받은 뒤 초깃값만큼 출력해보겠다.
count = int(input('반복할 횟수를 입력하세요: '))
while count > 0: # count가 0보다 클 때 반복
print('Hello, world!', count)
count -= 1 # count를 1씩 감소시킴
먼저, input으로 입력 값을 받아서 count 변수에 저장한다.
이때 입력받은 값이 초기값이며, 이를 감소시키면서 반복문을 돌리면 초깃값만큼 출력이 가능하다.
-
반복 횟수가 정해지지 않은 경우
사실, while 반복문은 반복 횟수가 정해지지 않았을 때 주로 사용한다.
따라서 이번엔 난수를 생성해서 생성된 숫자에 따라 반복을 끝내 보겠다.
난수(random number)란 특정 주기로 반복되지 않으며 규칙 없이 무작위로 나열되는 숫자를 뜻한다.
파이썬에서 난수를 생성하려면 random 모듈이 필요한데,
모듈은 다음과 같이 import 키워드를 사용하여 가져올 수 있다.
import random # random 모듈을 가져옴
이제 random.random()으로 random 모듈의 random 함수를 호출해본다.
>>> random.random()
0.002383731799935007
>>> random.random()
0.3297914484498006
>>> random.random()
0.6923390064955324
random.random()을 실행할 때마다 계속 다른 실수가 출력됨을 확인할 수 있다.
이번엔 실수 말고 정수를 생성하는 random 모듈의 randint 함수를 사용해보겠다.
다음과 같이 randint 함수는 난수를 생성할 범위를 지정하며, 범위에 지정한 숫자도 난수에 포함된다.
randint 함수로 주사위를 만들어보면 다음과 같다.
>>> random.randint(1, 6)
4
>>> random.randint(1, 6)
1
>>> random.randint(1, 6)
5
random.randint(1, 6)을 실행할 때마다 다른 숫자가 나온다. 이제 이 함수를 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 반복문에서 i != 3과 같이 조건식을 지정하여 3이 아닐 때 계속 반복하도록 만든 것이다.
실행 결과를 보면 정수가 무작위로 생성되어 실행할 때마다 반복 횟수가 달라지는 것을 볼 수 있다.
이처럼 while 반복문은 반복 횟수가 정해져 있지 않을 때 유용하다.
-
while 반복문으로 무한 루프 만들기
while에 조건식 대신 True를 지정하면 무한히 반복하는 무한 루프가 만들어진다.
따라서 조건식이 항상 참(True)이므로 변화식도 필요 없다.
while True: # while에 True를 지정하면 무한 루프
print('Hello, world!')
... (생략)
Hello, world!
Hello, world!
Hello, world!
Hello, world!
... (계속 반복)
이 스크립트 파일을 실행한 상태로 두면 'Hello, world!'는 끝나지 않고 계속 출력된다. 따라서 IDLE이나 콘솔(터미널, 명령 프롬프트)에서 Ctrl+C를 입력하여 무한 루프를 끝내야 한다.
※ 참고 : while에 True 대신 True로 취급하는 값을 사용해도 무한 루프로 동작한다.
while 1: # 0이 아닌 숫자는 True로 취급하여 무한 루프로 동작
print('Hello, world!')
while 'Hello': # 내용이 있는 문자열은 True로 취급하여 무한 루프로 동작
print('Hello, world!')
unit 18. break, continue로 반복문 제어하기
-
break로 반복문 끝내기
break는 for와 while 문법에서 제어흐름을 벗어나기 위해 사용한다.
즉, break를 쓰면 반복문의 제어흐름을 중단하고 빠져 나오나게 된다.
1) while에서 break로 반복문 끝내기
다음은 while 무한 루프에서 숫자를 증가시키다가 변수 i가 100일 때 반복문을 끝낸다.
i = 0
while True: # 무한 루프
print(i)
i += 1 # i를 1씩 증가시킴
if i == 100: # i가 100일 때
break # 반복문을 끝냄. while의 제어흐름을 벗어남
실행 결과는 다음과 같다.
0
1
2
... (생략)
97
98
99
if를 사용하여 i가 100이 될 때 break를 실행하는데, 이렇게 하면 무한 루프라도 0부터 99까지만 화면에 출력한다.즉, 반복문 안에서 break를 실행하면 반복문은 바로 끝나게 된다.
2) for에서 break로 반복문 끝내기
for에서도 break의 동작은 같다.
for i in range(10000): # 0부터 9999까지 반복
print(i)
if i == 100: # i가 100일 때
break # 반복문을 끝냄. for의 제어흐름을 벗어남
for에 range(10000)을 지정했으므로 0부터 9999까지 반복한다. 그러나 i가 100일 때 break를 실행하므로 0부터 100까지만 출력하고 반복문을 끝낸다.
-
continue로 코드 실행 건너뛰기
반복문에서 continue를 사용하면 일부 코드를 실행하지 않고 건너뛸 수 있다.
1) for에서 continue로 코드 실행 건너뛰기
다음은 for로 0부터 99까지 반복하면서 홀수만 출력한다.
for i in range(100): # 0부터 99까지 증가하면서 100번 반복
if i % 2 == 0: # i를 2로 나누었을 때 나머지가 0면 짝수
continue # 아래 코드를 실행하지 않고 건너뜀
print(i)
i가 짝수이면 continue를 실행하여 print를 건너뛰고, 홀수이면 print로 숫자를 출력한다.
즉, 반복문 안에서 continue를 실행하면 continue 아래의 코드는 실행하지 않고 건너뛴 뒤 다음 반복을 시작한다.
2) while 반복문에서 continue로 코드 실행하기
for뿐만 아니라 while에서도 continue의 동작은 같다.
i = 0
while i < 100: # i가 100보다 작을 때 반복. 0부터 99까지 증가하면서 100번 반복
i += 1 # i를 1씩 증가시킴
if i % 2 == 0: # i를 2로 나누었을 때 나머지가 0이면 짝수
continue # 아래 코드를 실행하지 않고 건너뜀
print(i)
i가 짝수이면 continue를 실행하는데, i의 값에 따라 짝수 일 때 continue 아래에 있는 print를 건너뛴다.
-
입력한 횟수대로 반복하기
다음은 break를 이용해 사용자가 입력한 횟수대로 while 반복문이 돌아가게 한다.
count = int(input('반복할 횟수를 입력하세요: '))
i = 0
while True: # 무한 루프
print(i)
i += 1
if i == count: # i가 입력받은 값과 같을 때
break # 반복문을 끝냄
실행 결과는 다음과 같다.
반복할 횟수를 입력하세요: 3 (입력)
0
1
2
반복문 안에서는 i의 값을 출력하고, 변화식에서는 i를 1씩 증가시킨다. 그리고 i가 count의 값(입력값)과 같을 때 break를 실행시켜 반복문을 빠져나온다.
* 입력한 숫자까지 홀수 출력하기
count = int(input('반복할 횟수를 입력하세요: '))
for i in range(count + 1): # 0부터 증가하면서 count까지 반복(count + 1)
if i % 2 == 0: # i를 2로 나누었을 때 나머지가 0이면 짝수
continue # 아래 코드를 실행하지 않고 건너뜀
print(i)
다음은 for의 range에 count + 1을 지정하여 count에 들어있는 값만큼 반복하도록 만들었다.
반복문 안에서는 if를 사용하여 i가 짝수이면 continue를 실행하여 print를 실행하지 않고, i가 홀수이면 print를 사용하여 i의 값을 출력한다.
'Programming Languages > Python' 카테고리의 다른 글
[P4C] 파이썬 코딩 도장 : UNIT 22 ~ UNIT 24 (0) | 2021.01.26 |
---|---|
[P4C] 파이썬 코딩 도장 : UNIT 19 ~ UNIT 21 (0) | 2021.01.25 |
[P4C] 파이썬 코딩 도장 : UNIT 13 ~ UNIT 15 (0) | 2021.01.22 |
[P4C] 파이썬 코딩 도장 : UNIT 8 ~ UNIT 12 (0) | 2021.01.21 |
[P4C] 파이썬 코딩 도장 : UNIT 5 ~ UNIT 7 (0) | 2021.01.19 |