파이썬의 문법을 어느 정도 공부하고 나면 이런 생각이 들 수 있다.
문법은 알겠는데, 이걸 가지고 프로그램을 어떻게 만들어야 하지?
프로그램을 처음부터 완벽하게 만들려고 하기보다는 다른 사람이 만든 프로그램을 살펴보고 분석하면서 프로그램을 만드는 방법을 익히는 것이 중요하다.
프로그램을 만들 때는 가장 먼저 입력(Input) 과 출력(Output) 을 생각해 보는 것이 좋다.
예를 들어 구구단 프로그램을 만든다고 생각해 보자.
gugu22, 4, 6, 8, ..., 18리스트(List)즉 다음과 같은 형태를 먼저 생각할 수 있다.
result = gugu(2)
결과는 다음과 같이 나오도록 만드는 것이 목표이다.
[2, 4, 6, 8, 10, 12, 14, 16, 18]
먼저 gugu() 함수를 만들어 입력값이 정상적으로 전달되는지 확인한다.
def gugu(n):
print(n)
gugu(2)
실행 결과
2
gugu(2)를 실행하면 숫자 2가 매개변수 n으로 전달된다.
구구단의 결과는 여러 개의 숫자로 이루어져 있으므로 리스트에 저장한다.
def gugu(n):
result = []
result라는 빈 리스트를 만들어 구구단의 결과를 하나씩 추가할 것이다.
리스트에 값을 추가할 때는 append()를 사용할 수 있다.
def gugu(n):
result = []
result.append(n * 1)
result.append(n * 2)
result.append(n * 3)
result.append(n * 4)
result.append(n * 5)
result.append(n * 6)
result.append(n * 7)
result.append(n * 8)
result.append(n * 9)
return result
print(gugu(2))
실행 결과
[2, 4, 6, 8, 10, 12, 14, 16, 18]
원하는 결과는 얻을 수 있지만 같은 코드가 계속 반복되고 있다.
result.append(n * 1)
result.append(n * 2)
result.append(n * 3)
...
숫자만 바뀌고 동일한 작업이 반복되므로 반복문을 사용할 수 있다.
먼저 while문을 이용해 1~9까지 출력해 보자.
i = 1
while i < 10:
print(i)
i = i + 1
실행 결과
1
2
3
4
5
6
7
8
9
i가 1부터 시작해서 반복할 때마다 1씩 증가한다.
i = i + 1
그리고
i < 10
조건을 만족하는 동안 반복하기 때문에 1~9까지 실행된다.
앞에서 만든 while문을 gugu() 함수에 적용하면 반복되는 코드를 줄일 수 있다.
def gugu(n):
result = []
i = 1
while i < 10:
result.append(n * i)
i = i + 1
return result
사용
print(gugu(2))
실행 결과
[2, 4, 6, 8, 10, 12, 14, 16, 18]
gugu(2)를 실행했다고 가정하면 다음과 같이 동작한다.
| i | 계산 | result |
|---|---|---|
| 1 | 2 * 1 | [2] |
| 2 | 2 * 2 | [2, 4] |
| 3 | 2 * 3 | [2, 4, 6] |
| ... | ... | ... |
| 9 | 2 * 9 | [2, 4, 6, 8, 10, 12, 14, 16, 18] |
i가 10이 되면
i < 10
조건이 거짓이 되어 반복문이 종료된다.
마지막으로
return result
를 통해 완성된 리스트를 반환한다.
프로그램을 처음 만들 때는 바로 코드를 작성하기보다 다음과 같이 하나씩 생각해 보는 것이 좋다.
구구단 프로그램의 경우에는 다음과 같다.
입력
↓
2
↓
gugu(2)
↓
while문으로 1~9 반복
↓
2 × 1 ~ 2 × 9 계산
↓
리스트에 저장
↓
결과 반환
def gugu(n):
result = []
i = 1
while i < 10:
result.append(n * i)
i = i + 1
return result
print(gugu(2))
[2, 4, 6, 8, 10, 12, 14, 16, 18]
프로그램을 만들 때 막막하다면 입력 → 출력 → 자료형 → 처리 과정 순서로 하나씩 구체화해 보자.