오늘은 '핵심 파이썬 기초 프로그래밍' 수업의 3번째 학습 내용을 기록하고자 한다. 지난 번 수업에서는 if문에 대해서 배웠고, 오늘 학습을 통해서는 for문에 대해서 배우게 되었다. 그렇다면 오늘 배운 _for문은 어떤 내용들이 있었을까?
똑같은 말을 100번 반복하라고 하면 어떨까? 아니, 10,000번 똑같은 말을 반복하라고 하면 할 수 있을까? 가능은 하겠지만, 분명 시간과 노력이 엄청나게 투입되어야 할 것이다.
코딩에서도 이러한 문제가 발생하곤 한다. 같은 명령을 반복하는 코드가 있다면 어떻게 처리해야 할까? 계속해서 Ctrl+C, Ctrl+V를 해야할까..?
그렇게 멍청한 짓은 또 없을 것이다. 이러한 경우, 즉 같은 명령을 반복하는 코드의 경우에는 묶어서 표현할 수 있다.
반복문에 대해 좀 더 구체적으로 알아보자. 반복문이란 어떠한 조건이나, 범위 내에서 특정 명령을 반복적으로 수행하는 것이다.
예를들어, '코딩 공부를 밤 11시까지 하겠어!' 혹은 '오늘은 4강까지 학습하겠어!'와 같은 말이라고 보면 된다. '밤 11시까지' 혹은 '4강까지'라는 조건이나 범위를 주고 그 안에서 명령(코딩 공부/학습)을 반복하는 것이다.
for문은 원소로 반복하는 방법이며, 시퀀스의 원소를 하나씩 변수에 넣어가면서 명령을 실행한다.
for 변수 in 시퀀스:
<수행할 명령>
이러한 형태를 띄고 있다. 기본 구조 내 시퀀스에서 각각의 원소에는 인덱스가 존재하는데, 그 인덱스로 나눠진 원소들을 변수에 하나씩 넣어가면서 명령을 실행한다는 의미이다. 예시를 통해 한 번 더 살펴보자.
sum = 0
for i in [1, 2, 3]:
sum = sum + i
[1,2,3]의 각각의 원소들을 i에 넣어주면서 명령을 실행하는 것이다. 첫번째 원소를 i에 넣어주면, sum = sum + i = 0 + 1 = 1이라는 값이 나온다. 다음으로, 두번째 원소를 i에 넣어주면, sum = sum + i이라는 명령을 동일하게 처리하지만, sum의 값이 1로 바뀌었기 때문에 이 부분을 고려해준다. sum = 1 + 2 = 3이라는 값이 나오게 된다. 마지막 원소를 동일한 방식으로 계산해주면, sum = 6이라는 값이 나온다.
이 말을 다시하면, 명령이 시퀀스의 길이만큼 반복한다는 의미이다.
length = 0
for x in 'abcdefg':
length = length + 1
이 'abcdefg'라는 문자열의 길이는 7이며, 해당 반복문은 7번 실행된다고 말할수 있다. 해당 반복문은 len('abcdefg')의 값을 구하는 것과 같은 값을 출력한다.
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in nums:
print(i)
print()문이 몇 번 실행되었을까? # 10번
## 변수 mix에 있는 "쌀"의 개수를 세보자!
mix = "쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰"
count_ssal = 0
for i in mix:
if i=='쌀':
count_ssal+=1
print(count_ssal)
# 300
그런데 우리가 반복을 할때, 어떠한 문자열이나 리스트 같은 자료를 아는 것이 아닌 단지 횟수만 알고 있을 때가 존재한다. 이러한 경우에 사용할 수 있는 것이 바로 for-range문이다.
이때 사용하게 되는 range를 먼저 알아보겠다. range는 연속되는 숫자를 만들어주는 시퀀스 자료형이다.
range(a, b) # a, a+1, a+2, ..., b-1
range(0, 9) # 0, 1, 2, ..., 8
range(5) # range(0, 5) = 0, 1, 2, 3, 4
즉, range(a, b)라고 했을 때 start = a가 되고, end = b가 되는 것이다. 범위로 보았을 때는 'a <= range(a, b) < b'이다.
for-range에서 숫자를 두 개 적어주게 되면, 구간으로 반복하는 방법으로 a이상 b미만의 수를 변수에 넣어가면서 명령을 수행하게 된다.
for 변수 in range(a,b):
<수행할 명령>
a = [1]
for i in range(2, 4):
a.append(i)
print(a)
# [1, 2, 3]이 나온다.
range(2, 4)는 [2,3]이며, a 리스트 뒤에 [2,3]을 합쳐주는 것이다. (append는 '리스트의 값을 맨 마지막에 넣어주는 것'이다.)
횟수로 반복하는 방법도 존재한다. 이는 특정 횟수 a번만큼 명령을 수행하도록 하는 것이다.
for 변수 in range(a):
<수행할 명령>
count = 0
for i in range(10):
count = count + 1
print(count)
# 10
해당 예제에서는 수행할 명령에서 i가 쓰이지 않았다. 여기서 i의 역할은 'range' 안에 있는 시퀀스에서 값을 받아오는 용도이지, 반드시 쓰여야 하는 것은 아니다.
이번 실습에서는 19단을 만들어 19단의 계산식을 출력하는 문제를 풀어보았다.
for i in range(1, 20):
print("19 *", i, "=", 19*i)
19 x 1 = 19
19 x 2 = 38
...
19 x 19 = 361
해당 코드를 실행하면, 이러한 형태의 답이 나오게 된다. (코드 상에서는 ''을 썼지만, velog 내에서 '' 마크다운 언어로 처리하여 부득이하게 'x' 임의로 썼다. 원래는 'x'가 아닌 '*'이 맞다.)
오늘은 이렇게 for문에 대한 학습을 해보았다. 4강까지 듣고 난 후에는 그동안 배운 내용들을 바탕으로 예제 문제를 찾아서 풀어볼 예정이다. 지금까지 꾸준히 잘 해오고 있으니 앞으로도 열심히 해봐야겠다!!!