러닝스쿨! 파이썬 교과서

기초부터 실전까지

파이썬 기초 문법부터 머신러닝까지 이 한 권에!

이 책은 프로그래밍 언어 중 하나인 파이썬(Python)에 입문하는 분들을 위한 책입니다. 전반부에서는 처음 파이썬을 배우는 사람도 쉽게 알 수 있도록 파이썬 기초 문법을 하나씩 친절하게 설명합니다. 작은 프로그램을 실제로 만들어 보면서 문법이 어떤 것이고, 어떨 때에 사용하면 좋은 것인지 이해하기 쉽게 알려줍니다. 또한 프로그램이 직접 동작하는 즐거움을 누리면서 학습할 수 있게 구성되어 있습니다.

실천편과 응용편에서는 조금 긴 프로그램을 작성해 봅니다. 데스크톱 응용 프로그램과 웹 응용 프로그램을 만들어 보고, 나아가 머신러닝을 통해 판정하는 프로그램도 작성해 보면서 이 책에서 배운 내용의 이해도를 높일 수 있으며, 실제로 동작하는 프로그램을 만드는 즐거움과 성취감을 맛볼 수 있습니다.

초보지만 일단 동작하는 것을 만들어 보면서 배우고 싶다거나, 파이썬을 조금 알지만 더 고급 프로그래밍에도 도전해 보고 싶은 독자에게 많은 도움이 될 것입니다.

 

도서 상세 이미지

쿠지라 히코우즈쿠에(クジラ飛行机)

중학교 시절부터 취미로 하던 프로그래밍이 재미있어 다양한 것들을 만들다가 프로그래머가 되었다. 현재는 소프트웨어 기획 획사 '쿠지라한도'에서 '재미있고 도움되는 도구'를 주제로 윈도우, 안드로이드 등에서 동작하는 앱을 공개하고 있다. 대표작은 도레미로 작곡할 수 있는 음악 소프트웨어 '텍스트 음악 사쿠라'와 '일본어 기반 프로그래밍 언어 나데시코' 등이다. 2001년에는 온라인 소프트웨어 대상을 받았으며, 2004년 IPA 청소년부에서 슈퍼크리에이터로 인정을 받았고, 2010년에 OSS 공헌자 상을 수상했다. 프로그래밍의 즐거움을 전달하기 위해 매일 분투하고 있다.

김범준

일본 호세이대학 경영학부를 졸업했다. 대학 시절 취미로 프로그래밍을 시작한 것을 계기로 이 업계에 발을 들여놓게 됐으며, 한국과 일본에서 임베디드 시스템과 게임 관련 회사에서 개발 프로젝트를 진행했다. 번역서로는 《유니티 UI 디자인 교과서》 《머신러닝 이론 입문》 《모던 C 언어 프로그래밍》 《따라 하면서 배우는 유니티 3D 입문》이 있으며, 저서로는 《만들면서 배우는 OS커널의 구조와 원리》 《뇌를 자극하는 하드웨어 입문》이 있다.

  • ▣ 1장: 파이썬 설치 방법과 프로그램 실행
    • 1-1 프로그래밍과 파이썬
      • 프로그래밍이란
      • 프로그래밍을 배우면 어떤 좋은 일이 생기는가?
      • 프로그래밍 언어인 ‘파이썬’이란 무엇인가
      • 이 책을 읽는 방법
    • 1-2 파이썬 설치
      • 파이썬을 설치하기 전에
      • 파이썬 내려받기
      • 윈도우에서 설치하는 방법
      • 맥 OS X에서 설치하는 방법
    • 1-3 파이썬의 대화형 환경
      • 대화형 실행 환경(REPL)이란?
      • REPL 사용법
      • REPL을 계산기 대신 사용해보자
      • 계산기보다 훨씬 편리한 REPL
    • 1-4 파이썬 개발 환경
      • 파이썬 개발 환경에 대해 결론부터 이야기하자면
      • 파이참(PyCharm) - 실전을 위한 파이썬 통합 개발 환경
      • IDLE - 파이썬 표준 사양
      • 아톰(Atom)
    • 1-5 에디터로 작성한 스크립트 실행하기
      • 첫 번째 파이썬 스크립트
      • 명령 프롬프트에서 프로그램 실행하기
    •  
  • ▣ 2장: 첫 걸음 - 기본적인 문법을 배우자
    • 2-1 계산기보다 편리한 파이썬
      • 파이썬은 계산기보다 편리하다
      • 스크립트에 써서 계산하는 방법
      • 주석에 관하여
      • 복잡한 계산 문제를 스크립트에 써서 풀어보자
    • 2-2 변수
      • 변수란 무엇인가?
      • 파이썬에서 변수를 사용해보자
      • 변수를 사용하면 프로그램을 읽기 편하다
    • 2-3 문자열
      • 문자열이란?
      • 문자열 표현 방법
      • 삼중인용부호
      • 문자열끼리 연결
      • 문자열에 변수의 값을 끼워 넣는다
    • 2-4 사용자 입력 방법
      • 사용자로부터 값을 입력받는다
      • 연산할 때는 형을 맞춰야 한다
      • 사용자로부터 값을 입력받는 프로그램을 만들어 보자
    • 2-5 제어 구문(1) 조건 분기
      • 제어 구문이란?
      • 조건 분기 if 구문의 사용법
      • BMI로 비만도를 측정해보자
      • True, False를 나타내는 bool 형
      • bool 형끼리 연산할 때 사용되는 논리 연산
      • if 구문을 중첩시킨다
    • 2-5 제어 구문(2) 반복
      • 프로그램의 반복
      • 범위 반복을 위한 for 구문
      • 반복을 중지하는 break와 계속하는 continue
    •  
  • ▣ 3장: 리스트와 함수 - 편리한 기능을 알자
    • 3-1 리스트
      • 리스트(list)
      • for와 조합해 리스트를 한 번에 처리
      • 리스트를 다루어 보자
      • 리스트의 사촌 튜플(tuple)
      • 집합(set)
      • 리스트, 튜플, 집합의 특징
    • 3-2 딕셔너리
      • 딕셔너리(dict)란
      • 딕셔너리 사용법
      • 딕셔너리의 요소를 열거하는 방법
      • 딕셔너리를 for 구문과 함께 사용한다
      • 영단어가 출현하는 횟수를 세어보자
    • 3-3 문자열 다루기
      • 문자열을 다뤄보자
      • 문자열 생성과 연산
      • 문자 추출
      • 문자열 분할과 결합
      • 문자열 치환
      • 문자열을 다루는 다른 방법
    • 3-4 함수를 정의하고 이용해보자
      • 함수란?
      • 함수를 정의해보자
      • docstring
      • 함수 안에서 함수를 호출하는 재귀
      • 인수의 기본값을 지정한다
      • 키워드 인수
      • 가변 개수 인수
      • 지역 변수와 전역 변수
    • 3-5 익명 함수
      • 함수는 변수에 대입할 수 있는가?
      • 정의하지 않는 함수-익명 함수
      • 리스트를 다루는 map()과 filter()
      • 리스트와 딕셔너리형의 값을 나열한다
    • 3-6 이터레이터와 제네레이터
      • 이터레이터와 제네레이터
      • for 구문이 반복 실행되는 구조
      • 이터레이터
      • 제네레이터 - 이터레이터를 직접 만들자
    • 3-7 예외 처리
      • 예외 처리란
      • 오류를 해결하는 try..except.. 구문
      • 오류를 발생시킨다
      • for 구문을 자작해보자
    •  
  • ▣ 4장: 모듈과 패키지를 이용해보자
    • 4-1 모듈
      • 모듈이란?
      • 표준 모듈을 사용해보자
      • 표준 라이브러리에서 random 모듈을 사용해보자
      • 표준 라이브러리에서 datetime 모듈을 사용해보자
      • 표준 모듈과 자작 모듈 중에 어느 것이 우선될까?
    • 4-2 PyPI 패키지를 사용해보자
      • PyPI란?
      • 암호화 라이브러리 ‘pycrypto’를 사용해보자
      • pip로 설치한 패키지
    • 4-3 파일 처리와 with 구문
      • 파일을 읽고 써보자
      • 파일을 읽고 쓰는 방법
      • try.. finally..로 확실하게 닫는다
      • with 구문을 사용하여 편리하게
      • 텍스트 파일을 1행씩 처리한다
      • 파이썬 오브젝트와 변수를 저장하자
      • 명령 프롬프트에서 사용하는 도구를 만들자
      • 명령 프롬프트에서 인수를 받아들인다
    • 4-4 명령 프롬프트 도구를 만들자
      • 파일 이름으로 검색하는 도구를 만들자
      • 스크립트의 경로를 얻는 방법
    • 4-5 정규표현
      • 정규표현이란
      • 정규표현을 배우자
    • 4-6 리스트 내장 표기
      • 리스트 내장 표기란?
      • 삼항연산자와 리스트 내장 표기로 FizzBuzz 게임 제작
      • 내장 표기의 종류
    • 4-7 데코레이터
      • 데코레이터란?
      • 다중으로 중첩된 데코레이터
    •  
  • ▣ 5장: 실전편 -파이썬을 실전에 활용하자
    • 5-1 데스크톱 앱을 만들어 보자
      • 데스크톱 앱이란?
      • 대화상자를 사용한 GUI 앱
      • GUI 프로그래밍
      • 문자 개수 카운터를 만들어 보자
    • 5-2 웹 애플리케이션을 만들어 보자
      • 웹 애플리케이션이란?
      • 파이썬으로 웹 서버를 실행해보자
      • 미니 웹 애플리케이션을 만들어 보자
      • URL 매개변수 값을 얻는다
      • 웹 애플리케이션을 디버깅하는 방법
    • 5-3 채팅 웹 애플리케이션을 만들자
      • 채팅 프로그램을 만들자
      • 폼 요소에 관해서
      • 채팅 프로그램
    • 5-4 기계학습에 도전한다
      • 기계학습이란?
      • 사이킷런으로 시작하는 기계학습
      • 기계학습으로 와인의 맛을 판정하려면
    • 5-5 기계학습으로 와인의 맛을 감별하자
      • 와인 데이터
      • 기계학습 프로그램을 작성하자
      • 튜닝해보자
      •  
  • ▣ 6장: 응용편 - 객체지향
    • 6-1 객체지향
      • 객체지향이란?
      • 생성자-인스턴스를 초기화하는 메서드
      • BMI를 계산하는 클래스를 설계한다
      • 시험 점수를 관리한다
      • 클래스 변수와 인스턴스 변수
    • 6-2 상속
      • 상속이란?
      • 메서드 오버라이드
      • 다중상속
    • 6-3 비공개 멤버와 정적 메서드
      • 객체지향의 기능에 대해 더욱 깊이 알아보자
      • 비공개 멤버
      • 빈 클래스
      • 정적인 메서드 staticmethod
      • 오늘의 환율을 알아보자
    • 6-4 특수 메서드
      • 특수 메서드란?
      • 인덱스 번호나 키로 접근하는 __getitem____setitem__
      • 클래스를 이터레이터로 만들자
      • 게터와 세터
    • 6-5 추상 클래스와 덕 타이핑
      • 추상 클래스와 덕 타이핑
      • 추상 클래스란?
      • 덕 타이핑
    • 6-6 유닛 테스트
      • 유닛 테스트란?
      • 테스트 전 준비와 테스트 후 처리
      • 값을 검증하는 메서드
    • 6-7 회원제 웹 사이트를 만들자
      • 회원제 웹 사이트를 만들려면
      • 쿠키(Cookie)
      • 세션(Session)
      • 회원용 메시지 게시판을 만들자

예제코드 관련 GitHub 페이지

참고: 5장 실습 시 'cross_validation'을 임포트할 수 없다는 오류가 발생할 경우

5장의 다음 예제 코드를 실행할 때

  • src/c5/sklearn/handwriting.py
  • src/c5/wine/wine-train.py

"ImportError: cannot import name 'cross_validation' from 'sklearn'" 오류가 발생할 수 있습니다. 이 오류는 sklearn 모듈의 cross_validation이 0.18 버전에서 폐기 예정되고 0.20 버전에서 제거됐기 때문입니다. 이 경우 cross_validation 대신 model_selection을 사용하면 됩니다.

따라서 273쪽 handwriting.py 예제의 1번째 줄은 다음과 같이,

from sklearn import datasets, cross_validation, svm, metrics

==>

from sklearn import datasets, model_selection, svm, metrics

7~8번째 줄은 다음과 같이 수정합니다.

data_train, data_test, label_train, label_test = \
    cross_validation.train_test_split(digits.data, digits.target)

==>

data_train, data_test, label_train, label_test = \
    model_selection.train_test_split(digits.data, digits.target)

마찬가지로 281쪽 wine-train.py 예제의 1번째 줄은 다음과 같이,

from sklearn import cross_validation, svm, metrics

==>

from sklearn import model_selection, svm, metrics

28~29번째 줄은 다음과 같이 수정합니다.

data_train, data_test, label_train, label_test = \
    cross_validation.train_test_split(data, labels)

==>

data_train, data_test, label_train, label_test = \
    model_selection.train_test_split(data, labels)

  • 36쪽, 명령 프롬프트 출력 결과

    $ python3 flowershop.py
    20340.0
    

    ==>

    $ python3 flowershop.py
    203400.0
    
  • 51쪽, 페이지 하단의 src/c2/str-num-ok.py 예제, 첫 번째 줄

    01 # 수치와 문자열을 결합한다(제대로 동작하지 않는 예)
    

    ==>

    01 # 수치와 문자열을 결합한다(제대로 동작하는 예)
    
  • 68쪽, src/c2/calc-fee.py 예제의 8~10번째 줄

    children_price = children * 500
    normal_price = normal * 1000
    elder_price = elder * 700
    

    ==>

    children_price = children * 5000
    normal_price = normal * 10000
    elder_price = elder * 7000
    
  • 69쪽, 페이지 상단의 명령 프롬프트의 6~9번째 줄

    어린이 요금 :3명x 5000= 1500원
    보통 요금 :5명x10000= 5000원
    경로우대요금 :2명x 7000= 1400원
    합계: 10 6320.0원
    

    ==>

    어린이 요금 :3명x 5000= 15000원
    보통 요금 :5명x10000= 50000원
    경로우대요금 :2명x 7000= 14000원
    합계: 10人 63200.0원
    
  • 72쪽, 페이지 상단 예제 코드의 3번째 줄

    result = "보통"
    

    ==>

    result = "가벼운 비만"
    
  • 82쪽, 9번째 줄

    ‘tubo.py’은

    ==>

    ‘pyeong.py’은

  • 82쪽, 페이지 중간 예제 코드의 파일명

    file: src/c2/tubo2.py

    ==>

    file: src/c2/pyeong2.py

  • 138쪽, 40번째 줄 주석

    # calc_animation()을 
    

    ==>

    # calc_animal()을 
    
  • 170쪽, 마지막 줄 주석

    # 여기에 리를 닫는 등의 반드시 실행해야 하는 처리를 추가한다
    

    ==>

    # 여기에 리소스를 닫는 등 반드시 실행해야 하는 처리를 추가한다
    
  • 311쪽, 05~11번째 줄 코드

    class AB:
        def print(self):
            print("AB")
    
    class AC:
        def print(self):
            print("AC")
    

    ==>

    class AB(A):
        def print(self):
            print("AB")
    
    class AC(A):
        def print(self):
            print("AC")