-
Chapter 06-1 내가 프로그램을 만들 수 있을까?Do it! 점프 투 파이썬 2022. 6. 8. 21:49
프로그램을 막 시작하려는 사람이 맨 먼저 부딪히게 되는 벽은 아마도 다음과 같지 않을까?
"문법도 어느 정도 알겠고, 책 내용도 대부분 이해된다. 하지만 이러한 지식을 바탕으로 내가 도대체 어떤 프로그램을 만들 수 있을까?"
이럴 때는 '어떤 프로그램을 짜야지'라는 생각보다는 다른 사람들이 만든 프로그램 파일을 자세히 들여다보고 분석하는 데서 시작하는 것이 좋다. 그러다 보면 다른 사람들의 생각도 읽을 수 있고 거기에 더해 뭔가 새로운 아이디어가 떠오를 수도 있다. 하지만 여기에서 가장 중요한 것은 자신의 수준에 맞는 소스를 찾는 일이다. 그래서 이 장에서는 아주 쉬운 예제부터 시작해서 차츰 수준을 높여 실용적인 예제까지 다루려고 노력하였다. 배운 내용을 어떻게 활용하는가는 독자의 몫이다.
필자는 예전에 프로그래밍을 막 시작한 사람에게 구구단 프로그램을 짜 보라고 한 적이 있다. 쉬운 과제이고 파이썬 문법도 다 공부한 사람이었는데 프로그램을 어떻게 만들어야 할지 전혀 갈피를 잡지 못했다. 그래서 필자는 다음과 같은 해결책을 알려 주었다.
프로그램을 만들려면 가장 먼저 '입력'과 '출력'을 생각하라. 가력 구구단 프로그램 중 2단을 만든다면 2를 입력값으로 주었을 때 어떻게 출력되어야 할지 생각해 보라고 했다. 그래도 그림이 그려지지 않는 것 같아 직접 연습장에 적어 가며 설명해 주었다.
- 함수 이름은? GuGu로 짓자
- 입력받는 값은? 2
- 출력하는 값은? 2단(2, 4, 6, 8, ..., 18)
- 결과는 어떤 형태로 저장하지? 연속된 자료형이니까 리스트!
독자들도 함께 따라 해 보기 바란다.
1. 먼저 에디터를 열고 다음과 같이 입력한다. GuGu라는 함수에 2를 입력갓ㅂ으로 주면 result라는 변수에 결괏값을 넣으라는 뜻이다.
result = GuGu(2) 2. 이제 결괏값을 어떤 형태로 받을 것인지 고민해 보자. 2단이니까 2, 4, 6, ... 18까지 갈 것이다. 이런 종류의 데이터는 리스트 자료형이 딱이다. 따라서 result = [2, 4, 6, 8, 10, 12, 14, 16, 18] 같은 결과를 얻는 것이 좋겠다는 생각을 먼저 하고 나서 프로그래밍을 시작하는 것이 필요하다. 이런 식으로 머릿속에 그림이 그려지기 시작하면 의외로 생각이 가볍게 좁혀지는 것을 느낄 수 있을 것이다.
3. 어떻게 만들지 생각해 봤으니 1번에서 입력한 문장은 지우고 진짜 프로그램을 짜 보자. 일단 이름을 GuGu로 지은 함수를 다음과 같이 만든다.
def GuGu(n):
print(n)위와 같은 함수를 만들고 GuGu(2)처럼 실행하면 2를 출력하게 된다. 즉 입력값으로 2가 잘 들어오는지 확인하는 것이다.
4. 이제 결괏값을 담을 리스트를 하나 생성하자. 앞에서 작성한 print(n)은 입력이 잘되는지를 확인하기 위한 것이었으므로 지워도 좋다.
def GuGu(n):
result = [ ]5. 다음으로 result에 2, 4, 6, ... 18을 어떻게 넣어야 할지 생각해 보자. 필자는 다음과 같이 리스트에 요소를 추가하는 append 내장 함수를 사용하기로 결정했다.
def FuFu(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] 정말 무식한 방법이지만 입력값 2를 주었을 때 원하는 결괏값을 얻을 수 있었다.
6. 그런데 위 함수는 반복이 너무 많다. 가만히 보면 result.append(n*ㅁ)의 ㅁ위치에 1부터 9까지 숫자만 다르게 들어가 있다는 것을 알 수 있다. 똑같은 일을 반복할 때는 '반복문'을 사용한다고 했다. 그렇다면 1부터 9까지 출력해 주는 반복문을 만들면 되지 않을까?
대화형 인터프리터를 열고 다음과 같이 테스트해 보았다.
>>> i = 1
>>> while i < 10: <- i가 10보다 작은 동안
... print(i) <- i 값 출력
... i = i + 1 <- i 값 1 증가결괏값:
1
2
3
4
5
6
7
8
9아주 만족스러운 결과이다. 이제 위 소스 코드를 GuGu 함수에 적용해 보자.
7. 이상의 생각을 바탕으로 완성한 GuGu 함수는 다음과 같다.
def GuGu(n):
result = [ ] <- 결괏값을 저장할 리스트 result
i = 1
while i < 10:
result.append(n * i)
i = i + 1
return result다음과 같이 테스트해 보자.
print(GuGu(2)) <- 구구단 2단 출력 결괏값: [2, 4, 6, 8, 10, 12, 14, 16, 18] 결과는 대만족이다.
사실 GuGu 함수는 위와 같은 과정을 거치지 않고도 바로 만들 수 있는 독자들이 많을 것이다. 하지만 더 복잡한 함수를 만들 때는 위와 같이 구체적이고 단계적으로 접근하는 방식이 매우 도움이 된다. 프로그래밍을 할 땐 매우 구체적으로 접근해야 머리가 덜 아프다는 것을 기억하자. 자, 이제 다양한 예제를 접해 보며 여러분 나름대로 멋진 생각을 해보기 바란다.
출처 : "점프 투 파이썬"
'Do it! 점프 투 파이썬' 카테고리의 다른 글
Chapter 06-5~06-6 (0) 2022.06.09 Chapter 06-2~06-4 (0) 2022.06.08 Chapter 05-6 라이브러리 (0) 2022.06.07 Chapter 05-5 내장 함수 (0) 2022.06.07 Chapter 05-4 예외 처리 (0) 2022.06.07