반응형

프로그래밍을 막 시작한 사람은, 문법도 알고, 어느정도 지식도 알았으니 프로그램을 만들려고 할텐데,
보통 "이러한 지식을 바탕으로 내가 어떤 프로그램을 만들 수 있을까?"라는 생각으로 접근하곤 한다.

이럴 떄는 "어떤 프로그램을 자야지"라는 생각보다는 다른 사람들이 만든 프로그램 파일을 자세히 들여다보고 분석하는 데서 시작하는 것이 좋다. 

프로그래밍을 하려면 문제를 설정하고 그 문제를 해결하기 위해 체계적인 사고로 접근하는 것이 중요하다.
만약 설정한 문제가 간단한 경우라면, 체계적인 사고로 접근하지 않고, 생각나는데로 막 시도해도 문제를 해결 하는 경우도 있겠지만, 설정한 문제가 복잡할 경우, 체계적인 사고로 접근하지 않는다면 목표에 도달하는 것이 굉장히 어려울 것이다. 

한가지 예제를 통해 체계적인 사고로 접근하는 과정을 소개한다.

# 06-1 내가 프로그램을 만들 수 있을까?

# 프로그램을 막 시작하려고 하는 사람이 제일 처음 부딪히게 되는 벽은 아마 다음과 같지 않을까?

# "문법도 이제 조금 알겠고, 대부분 이해했다. 이러한 지식을 이용해서 내가 도대체 어떤 프로그램을 만들 수 있을까?"

# 이럴 떄는 "어떤 프로그램을 짜야겠어!"라는 생각보다는 다른사람들이 만든 프로그램 파일을 자세히 들여다보고 분석하는 데서 시작하는 것이 좋다.
# 그러다 보면 다른 사람들의 생각도 읽을 수 있고, 거기에 더해 뭔가 새로운 아이디어가 떠오를 수도 있다.
# 하지만 이때 가장 중요한 것은 자신의 수준에 맞는 소스를 찾는 일이다.
# 그래서 6장에서는 아주 쉬운 예제부터 시작해서 차츰 수준을 높여 실용적인 예제까지 다루려고 노력할 것이다.
# 물론 배운 내용을 어떻게 활용하는지는 리뷰를 보는 여러분에게 달려있다.

# 나는 예전에 프로그래밍을 막 시작한 친구에게 구구단 프로그램을 짜 보라고 한 적이 있다.
# 쉬운 과제이고 파이썬 문법도 다 공부한 사람이었는데 프로그램을 어떻게 만들어야 할지 전혀 갈피를 잡지 못했다.
# 그래서 나는 다음과 같은 해결책을 알려 주었다.

# 프로그램을 만들려면 가장 먼저 "입력"과 "출력"을 생각하라.

# 가령 구구단 프로그램 중 2단을 만든다면 2를 입력값으로 주었을 때 어떻게 출력되어야 할지 생각해 보라고 했다.
# 그래도 그림이 그려지지 않는 것 같아 직접 연습장에 적어 가며 설명해 주었다.

# ● 함수 이름은? GuGuDan로 짓자
# ● 입락받는 값은? 2
# ● 출력하는 값은? 2단(2, 4, 6, 8, ..., 18)
# ● 결과는 어떤 형태로 저장하지? 연속된 자료형이니까 리스트!

# 다같이 따라해보길 바란다.

# 1. 먼저 에디터를 열고 다음과 같이 입력한다. GuGuDan이라는 함수에 2를 입력값으로 주면 result라는 변수에 결과값을 넣으라는 뜻이다.
# result = GuGuDan(2)

# 2. 이제 결과값을 어떤 형태로 받을 것인지 고민해 보자. 2단이니까 2, 4, 6,...18까지 갈 것이다.
# 이런 종류의 데이터는 리스트 자료형이 딱이다.
# 따라서 result = [2, 4, 6, 8, 10, 12, 14, 16, 18] 같은 결과를 얻는 것이 좋겠다는 생각을 먼저 하고 나서 프로그래밍을 시작하는 것이 필요하다.
# 이런 식으로 머릿속에 그림이 그려지기 시작하면 의외로 생각이 가볍게 좁혀지는 것을 느낄 수 있을 것이다.

# 3. 어떻게 만들지 생각해 봤으니 1번에서 입력한 문장은 주석처리 하고, 진짜 프로그램을 짜 보자.
# 일단 이름을 GuGuDan으로 지은 함수를 다음과 같이 만든다.
# def GuGuDan(n):
#     print(n)
#
# GuGuDan(2)
# 위와 같은 함수를 만들고 GuGuDan(2)처럼 실행하면 2를 출력하게 된다.
# 즉 입력값으로 2가 잘 들어오는지 확인하는 것이다.

# 4. 이제 결과값을 담을 리스트를 하나 생성하자. 앞에서 작성한 print(n)은 입력이 잘 되는지 확인하기 위한 것이었으므로 지워도 좋다.
def GuGuDan(n):
    result = [ ]

# 5. 다음으로 result에 2, 4, 6...18을 어떻게 넣어야 할지 생각해 보자. 나는 다음과 같이 리스트에 요소를 추가하는 append 내장 함수를 사용하기로 결정했다.
def GuGuDan(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(GuGuDan(2))

# 정말 무식한 방법이지만 입력값 2를 주었을 떄 원하는 결과값을 얻을 수 있었다.


# 6. 그런데 위 함수는 반복이 너무 많다. 가만히 보면 result.append(n*□)의 □위치에 1부터 9까지 숫자만 다르게 들어가 있다는 것을 알 수 있다.
# 똑같은 일을 반복할 떄는 "반복문"을 사용한다고 했다.
# 그렇다면 1부터 9까지 출력해 주는 반복문을 만들면 되지 않을까?

# 대화형 인터프리터를 열고 다음과 같이 테스트해 보았다.
i = 1
while i < 10:
    print(i)
    i = i + 1

# 아주 만족스러운 결과다. 위 소스코드를 GuGuDan 함수에 적용해 보자.

# 7. 이상의 생각을 바탕으로  완성한 GuGuDan함수는 다음과 같다.
def GuGuDan(n):
    result = []
    i = 1
    while i < 10:
        result.append(n*i)
        i = i + 1
    return result

print(GuGuDan(2))

# 결과는 대만족이다.

# 사실 GuGuDan함수는 위와 같은 과정을 거치지 않고도 바로 만들수 있는 사람들이 대부분 일 것이다.
# 하지만 더 복잡한 함수를 만들 떄는 위와 같이 구체적이고 단계적으로 접근하는 방식이 매우 도움이 된다.
# 프로그래밍을 할 땐 매우 구체적으로 접근해야 머리가 덜 아프다는 것을 기억하자.
# 이제 다양한 예제를 접해 보며 여러분 나름대로 멋진 생각을 해보기 바란다.

# Review complete.

체계적인 사고로 접근하기 리뷰의 핵심!

  • 입력과 출력을 생각하라.

리뷰를 작성하며 사용한 코드를 공유한다! 
https://github.com/mgkim-developer/Python-Basic-Grammar/blob/main/(6-1)Systematic%20approach.py

 

GitHub - mgkim-developer/Python-Basic-Grammar: Python Basic Grammar Study

Python Basic Grammar Study. Contribute to mgkim-developer/Python-Basic-Grammar development by creating an account on GitHub.

github.com

 

반응형