16.1 for와 range 사용하기
https://dojang.io/mod/page/view.php?id=2241
반복문은 반복 횟수, 반복 및 정지 조건을 자유자재로 제어할 수 있다.
range는 연속된 숫자를 생성하는데 range에 10을 지정하면 0부터 9까지 숫자를 생성합니다. 즉, 지정한 횟수 숫자는 생성되는 숫자에 포함되지 않는다.
a = range(10)
print(a)
👉 range(0, 10)
a = list(range(10))
print(a)
👉 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(5): # 반복할 횟수 입력
print('Hello, world!')
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
숫자를 하나씩 꺼냄
0부터 시작
숫자를 꺼낼 때마다 코드 실행
range에서 꺼낼 숫자가 있나? ➡️ 예 ➡️ 반복할 코드
➡️ 아니오 ➡️ 다음 코드
for 변수 in range(횟수)
→ 반복할 코드로 순환하는 것을 루프(loop)
라고 부른다.
range에서 꺼낸 숫자를 눈으로 확인해보자
for i in range(5):
print('Hello, world!', i)
👉
Hello, world! 0
Hello, world! 1
Hello, world! 2
Hello, world! 3
Hello, world! 4
range에서 꺼낸 숫자는 변수 i
에 저장되며 반복할 코드에서 사용할 수 있다.
변수 i
를 루프 인덱스라고도 부르며 index의 첫 머리글자를 따서 i
를 주로 사용한다.
파이썬 2.7과 파이썬 3에서 range는 결과가 조금 다르다. 파이썬 2.7에서는 range를 사용하면 연속된 숫자가 들어있는 '리스트'를 만들어내고(메모리 많이 사용) 파이썬 3에서는 range'객체'(반복가능한객체)를 만들어낸다. 파이썬3에서 값을 보고 싶으면 그래서 list 함수 사용해서 리스트로 바꿔주고 출력한다.
a = range(10)
print(a)
👉 range(0, 10)
a = list(range(10))
print(a)
👉 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
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 i in range(0, 10, 2): # 2씩 증가
print('Hello, world!', i)
👉
Hello, world! 0
Hello, world! 2
Hello, world! 4
Hello, world! 6
Hello, world! 8
range는 숫자가 증가하는 기본 값이 양수 1
이다.
증가폭을 음수로 지정하면 숫자가 감소한다.
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! 7
Hello, world! 6
Hello, world! 5
Hello, world! 4
Hello, world! 3
Hello, world! 2
Hello, world! 1
증가폭을 음수로 지정하는 방법 말고도 reversed
를 사용해서 숫자의 순서를 반대로 뒤집을 수 있다.
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! 6
Hello, world! 5
Hello, world! 4
Hello, world! 3
Hello, world! 2
Hello, world! 1
Hello, world! 0
for 변수 in reversed(range(시작,끝))
for i in reversed(range(1,10)):
print('Hello, world!', i)
----------------------------------
Hello, world! 9
Hello, world! 8
Hello, world! 7
Hello, world! 6
Hello, world! 5
Hello, world! 4
Hello, world! 3
Hello, world! 2
Hello, world! 1
for 변수 in reversed(range(시작,끝,증가폭))
for i in reversed(range(1,10,2)):
print('Hello, world!', i)
----------------------------------
Hello, world! 9
Hello, world! 7
Hello, world! 5
Hello, world! 3
Hello, world! 1
변수 i
는 반복할 때마다 다음 값으로 덮어써지기 때문에 값을 할당해도 변수에 영향을 주지 못한다.
for i in range(10):
print(i, end=' ')
i = 10
------------------------
👉 0 1 2 3 4 5 6 7 8 9
count = int(input('반복할 횟수를 입력하세요: '))
for i in range(count):
print('Hello, world!', i)
-------------------------------------------
반복할 횟수를 입력하세요: 5 (입력)
Hello, world! 0
Hello, world! 1
Hello, world! 2
Hello, world! 3
Hello, world! 4
5를 입력했으므로 'Hello, world!'가 5번 출력된다.
먼저 input
으로 입력 값을 받아서 count 변수
에 저장한다. 이때 반드시 int
를 사용하여 input에서 나온 문자열
을 정수
로 변환해준다.
그리고 반복문에서는 for i in range(count):
와 같이 range
에 count
를 넣어주면 입력받은 숫자만큼
반복된다.
for에 range 대신 시퀀스 객체
를 넣어도 된다.
for는 리스트
, 튜플
, 문자열
등 시퀀스 객체
로 반복할 수 있다.
👇 리스트를 넣으면 리스트의 요소를 꺼내면서 반복한다.
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 letter in 'Python':
print(letter)
------------------------
P
y
t
h
o
n
문자열 'Python'의 문자가 하나씩 분리되어 출력되었다.
for letter in 'Python':
print(letter, end=' ')
-----------------------------
P y t h o n
print에 end=' '
를 지정해서 줄바꿈이 되지 않고, 각 문자가 공백으로 띄워져서 출력된다.
문자열 'Python'을 뒤집어서 출력할 때는 reversed
를 사용한다.
reversed(시퀀스객체)
for letter in reversed('Python'):
print(letter, end=' ')
-----------------------------------
n o h t y P
reversed
는 시퀀스 객체를 넣으면 시퀀스 객체를 그대로 뒤집어 준다.
(원본 객체 자체는 바뀌지 않고 그냥 그대로 뒤집는 것 뿐)
- for 반복문은 반복 개수가 정해져 있을 때 주로 사용한다.
- range의 다양한 사용 방법을 익혀 둔다.
- for 반복문은 range 이외에도 시퀀스 객체를 사용할 수 있다.
표준 입력으로 정수가 입력됩니다. 입력된 정수의 구구단을 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 출력 형식은 숫자 숫자 = 숫자처럼 만들고 숫자와 , = 사이는 공백을 한 칸 띄웁니다.
number = int(input())
for i in range(1,10):
print(f'{number} * {i} = {number*i}')
-------------------------------------------
2 (입력)
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
정수가 입력된다고 했으므로 int(input())
과 같이 입력값을 정수로 변환해준다.
구구단은 1부터 9까지의 곱셈이므로 for i in range(1,10):
과 같이 반복문을 만든다.