for 반복문, range 사용하기

Jeongyun Heo·2021년 1월 7일
0

Python

목록 보기
21/36
post-thumbnail

16.1 for와 range 사용하기
https://dojang.io/mod/page/view.php?id=2241

반복문은 반복 횟수, 반복 및 정지 조건을 자유자재로 제어할 수 있다.

for와 range 사용하기

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부터 시작

숫자를 꺼낼 때마다 코드 실행

for 반복문은 반복 횟수가 정해져 있을 때 주로 사용한다.

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

변수 i루프 인덱스라고도 부르며 index의 첫 머리글자를 따서 i를 주로 사용한다.

파이썬 버전별 range 차이점

파이썬 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]

for와 range 응용하기

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 를 변경할 수 있을까?

변수 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):와 같이 rangecount를 넣어주면 입력받은 숫자만큼 반복된다.

시퀀스 객체로 반복하기

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):과 같이 반복문을 만든다.

0개의 댓글