ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.