모던 파이썬 입문
더북(TheBook)

모던 파이썬 입문

7개의 프로젝트로 배우자!
파이썬의 기본 문법부터 프로젝트를 해결해 나가는 방법까지!

최신 파이썬 버전으로 기본 문법을 하나하나 배워 나가며 7개의 프로젝트를 만들어 본다. 프로젝트를 작성하면서 프로그래밍으로 사용자와 상호작용하는 법, 프로그램으로 의사 결정을 내리는 법, 코드를 재사용하는 법, 원하는 대로 객체를 만드는 법, 라이브러리를 사용해 프로그램을 개선하는 법 등을 배울 수 있다. 이는 곧 파이썬을 사용하는 방법, 프로그래머 답게 생각하는 방법, 주어진 프로젝트를 해결해 나가는 방법으로 이어진다. 이와 같은 과정을 통해 이 책은 최종적으로 프로그래밍에 필요한 사고방식, 개념, 통찰을 배울 수 있도록 이끌어 줄 것이다.

«모던 파이썬 입문»은 2부(7~12장)를 공개합니다.

목차

  • 제 0 부 프로그래밍 방법 배우기
  • 1장 왜 프로그래밍을 꼭 배워야 할까?
  • 1.1 프로그래밍이 중요한 이유는?
  • 1.1.1 프로그래밍은 전문가용이 아니다
  • 1.1.2 삶을 개선하라
  • 1.1.3 직접 도전하라
  • 1.2 알고 있어야 하는 내용과 이 책에서 배울 내용
  • 1.3 프로그래밍 학습 계획
  • 1.3.1 첫걸음을 떼자
  • 1.3.2 연습하고, 연습하고, 연습하고, 연습하라
  • 1.3.3 프로그래머처럼 생각하라
  • 1.4 요약
  • 2장 프로그래밍 언어를 배우는 기본 원리
  • 2.1 프로그래밍이라는 기술
  • 2.2 빵 굽기와 프로그래밍의 유사성
  • 2.2. 1 ‘빵 하나 굽기’라는 목표 이해하기
  • 2.2.2 레시피 찾기
  • 2.2.3 흐름도로 레시피를 시각화하기
  • 2.2.4 기존 레시피를 사용할 것인가 새로운 레시피를 만들 것인가?
  • 2.3 생각하고 코딩하고 테스트하고 디버깅하기를 반복하기
  • 2.3.1 목표 이해하기
  • 2.3.2 목표 시각화하기
  • 2.3.3 의사 코드 작성하기
  • 2.4 읽기 쉬운 코드 작성하기
  • 2.4.1 의미 있고 서술적인 이름 붙이기
  • 2.4.2 코드에 주석 달기
  • 2.5 요약
  • 제 1 부 변수, 타입, 식, 문
  • 3장 파이썬 프로그래밍 언어 소개
  • 3.1 파이썬 설치하기
  • 3.1.1 파이썬이란 무엇인가?
  • 3.1.2 파이썬 버전 3.7.1 다운로드
  • 3.1.3 아나콘다 파이썬 배포판
  • 3.1.4 통합 개발 환경
  • 3.2 작업 공간 설정하기
  • 3.2.1 아이파이썬 콘솔
  • 3.2.2 파일 에디터
  • 3.3 요약
  • 4장 변수와 식: 사물에 이름과 값 부여하기
  • 4.1 사물에 이름 붙이기
  • 4.1.1 수학과 프로그래밍 비교
  • 4.1.2 컴퓨터가 할 수 있는 일과 할 수 없는 일
  • 4.2 변수 소개
  • 4.2.1 객체는 조작할 수 있는 사물이다
  • 4.2.2 객체에는 이름이 있다
  • 4.2.3 객체 이름으로 사용할 수 있는 것은?
  • 4.2.4 변수 만들기
  • 4.2.5 변수 변경하기
  • 4.3 요약
  • 5장 객체 타입과 코드 명령
  • 5.1 사물의 타입
  • 5.2 프로그래밍에서 객체의 기본 타입
  • 5.2.1 정수를 표현하는 int 타입
  • 5.2.2 소수를 표현하는 float 타입
  • 5.2.3 참/거짓 데이터를 표현하는 bool 타입
  • 5.2.4 문자열을 나타내는 str 타입
  • 5.2.5 값이 없음을 표현하기
  • 5.3 기본 타입의 데이터 값 활용하기
  • 5.3.1 식 블록 만들기
  • 5.3.2 어떤 타입의 값을 다른 타입의 값으로 변환하기
  • 5.3.3 산술 연산이 객체 타입에 미치는 영향
  • 5.4 요약
  • 6장 진급 프로젝트: 첫 번째 파이썬 프로그램 - 분을 시간으로 변환하기
  • 6.1 생각-코딩-테스트-디버깅-반복
  • 6.2 작업 나누기
  • 6.2.1 입력을 정하는 코드
  • 6.2.2 출력을 정하는 코드
  • 6.3 변환 공식 구현하기
  • 6.3.1 몇 시간인지 계산하기
  • 6.3.2 몇 분인지 계산하기
  • 6.4 첫 번째 프로그램: 방법 1
  • 6.5 첫 번째 프로그램: 방법 2
  • 6.6 요약
  • 제 2 부 문자열, 튜플, 사용자 상호작용
  • 7장 문자열 객체 소개: 문자의 순서열
  • 7.1 문자의 순서열인 문자열
  • 7.2 문자열에 대한 기본 연산
  • 7.2.1 문자열 객체 만들기
  • 7.2.2 문자열의 인덱스 이해하기
  • 7.2.3 문자열 슬라이스 이해하기
  • 7.3 문자열에 대한 다른 연산
  • 7.3.1 len( )으로 문자열 안의 문자 개수 알아내기
  • 7.3.2 upper( )와 lower( )로 대문자 소문자 변경하기
  • 7.4 요약
  • 8장 고급 문자열 연산
  • 8.1 부분 문자열 관련 연산
  • 8.1.1 find( )로 문자열에서 부분 문자열 검색하기
  • 8.1.2 어떤 문자열이 다른 문자열의 부분 문자열인지 알아내는 in
  • 8.1.3 부분 문자열의 빈도를 구하는 count( )
  • 8.1.4 replace( )로 부분 문자열 바꾸기
  • 8.2 수학 연산
  • 8.3 요약
  • 9장 간단한 오류 메시지들
  • 9.1 문장을 입력하고 어떤 결과가 나타나는지 시험해 보기
  • 9.2 문자열 오류 메시지 이해하기
  • 9.3 요약
  • 10장 튜플 객체: 여러 종류의 객체를 모아둔 시퀀스
  • 10.1 데이터의 시퀀스인 튜플
  • 10.1.1 튜플 객체 만들기
  • 10.2 튜플에 대한 연산 이해하기
  • 10.2.1 len( )으로 튜플 길이 얻기
  • 10.2. 2 [ ]와 인덱스를 사용해 튜플의 원소를 가져오거나 슬라이스 얻기
  • 10.2.3 수학 연산 수행하기
  • 10.2.4 튜플 안의 객체 서로 맞바꾸기
  • 10.3 요약
  • 11장 사용자 상호작용
  • 11.1 출력 보여 주기
  • 11.1.1 식 출력하기
  • 11.1.2 여러 값 출력하기
  • 11.2 사용자 입력 받기
  • 11.2.1 프롬프트를 표시해서 입력 요청하기
  • 11.2.2 입력 읽기
  • 11.2.3 입력을 변수에 저장하기
  • 11.2.4 사용자 입력을 다른 타입으로 변환하기
  • 11.2.5 더 많은 입력 요청하기
  • 11.3 요약
  • 12장 진급 프로젝트: 이름 매시업
  • 12.1 문제에 대한 설명 이해하기
  • 12.1.1 문제를 그림으로 표현하기
  • 12.1.2 몇 가지 예제 만들기
  • 12.1.3 문제를 의사 코드로 추상화하기
  • 12.2 이름과 성 분리하기
  • 12.2.1 성과 이름 사이의 공백 찾기
  • 12.2.2 변수를 사용해 계산 결과 값 저장하기
  • 12.2.3 지금까지 진행한 일 테스트하기
  • 12.3 성과 이름을 반으로 나눠 각각 저장하기
  • 12.3.1 이름의 중간 지점 찾기
  • 12.4 절반의 이름들 조합하기
  • 12.5 요약
  • 제 3 부 프로그램 안에서 의사 결정 내리기
  • 13장 프로그램에 의사 결정 도입하기
  • 13.1 조건문으로 의사 결정 내리기
  • 13.1.1 예/아니오를 묻는 질문과 참/거짓인 문장
  • 13.1.2 문장에 조건 추가하기
  • 13.2 코드로 의사 결정 내리기
  • 13.2.1 의사 결정을 코드화하기: 예제
  • 13.2.2 의사 결정을 코드화하기: 일반적인 방법
  • 13.3 프로그램의 구조 잡기
  • 13.3.1 조건문 여러 개 사용하기
  • 13.3.2 의사 결정의 결과에 따라 새로운 의사 결정 내리기
  • 13.3.3 내포 조건문을 사용하는 더 복잡한 예제
  • 13.4 요약
  • 14장 더 복잡한 의사 결정 내리기
  • 14.1 여러 조건 조합하기
  • 14.1.1 조건은 참/거짓 값으로 계산되는 조건식
  • 14.1.2 연산자 우선순위 규칙
  • 14.2 코드의 어떤 부분을 실행할지 선택하기
  • 14.2.1 이 일을 하거나 저 일을 하거나
  • 14.2.2 함께 사용하기
  • 14.2.3 코드 블록 측면에서 생각하기
  • 14.3 요약
  • 15장 진급 프로젝트: 게임북 본뜬 게임 만들기
  • 15.1 게임 규칙 소개
  • 15.2 여러 다른 경로 만들기
  • 15.3 더 많은 선택? 좋지요!
  • 15.4 요약
  • 제 4 부 작업 반복하기
  • 16장 루프로 같은 작업 반복하기
  • 16.1 작업 반복하기
  • 16.1.1 프로그램에 비선형성 추가하기
  • 16.1.2 무한 반복
  • 16.2 정해준 횟수 동안 반복하기
  • 16.2.1 for 루프
  • 16.3 N번 반복하기
  • 16.3.1 0부터 N-1까지 수로 이뤄진 시퀀스에 대해 루프 돌기
  • 16.3.2 루프 펼치기
  • 16.4 요약
  • 17장 루프 주무르기
  • 17.1 원하는 대로 루프 돌기
  • 17.2 문자열에 대해 루프 돌기
  • 17.3 요약
  • 18장 조건이 성립하는 동안 반복하기
  • 18.1 조건이 참인 동안에만 루프 반복하기
  • 18.1.1 추측을 위해 루프 돌기
  • 18.1.2 while 루프
  • 18.1.3 무한 루프
  • 18.2 for 루프와 while 루프 비교
  • 18.3 루프 주무르기
  • 18.3.1 루프를 빨리 끝내기
  • 18.3.2 루프를 시작하는 부분으로 돌아가기
  • 18.4 요약
  • 19장 진급 프로젝트: 스크래블:아트 단어 게임
  • 19.1 문제 이해하기
  • 19.1.1 올바른 단어 목록의 표현 방식 바꾸기
  • 19.1.2 주어진 타일로 올바른 단어 만들기
  • 19.2 코드를 여러 부분으로 나누기
  • 19.3 요약
  • 제 5 부 재사용 가능한 블록 단위로 코드를 체계화하기
  • 20장 오래 사용할 수 있는 프로그램 만들기
  • 20.1 큰 작업을 더 작은 작업들로 나누기
  • 20.1.1 온라인으로 상품 주문하기
  • 20.1.2 핵심 이해하기
  • 20.2 프로그래밍에 블랙박스 도입하기
  • 20.2.1 코드 모듈 사용하기
  • 20.2.2 코드 추상화하기
  • 20.2.3 코드 재사용
  • 20.3 자신만의 환경에서 존재하는 하위 작업들
  • 20.4 요약
  • 21장 함수로 모듈화와 추상화하기
  • 21.1 함수 작성하기
  • 21.1.1 함수 기초: 함수 입력
  • 21.1.2 함수 기초: 함수가 하는 일
  • 21.1.3 함수 기초: 함수가 반환하는 값
  • 21.2 함수 사용하기
  • 21.2.1 둘 이상의 값 반환하기
  • 21.2.2 return 문이 없는 함수
  • 21.3 함수 문서화하기
  • 21.4 요약
  • 22장 고급 함수 연산
  • 22.1 함수를 두 가지 관점에서 살펴보기
  • 22.1.1 작성자 관점
  • 22.1.2 사용자 관점
  • 22.2 함수 영역
  • 22.2.1 간단한 영역 규칙
  • 22.2.2 영역 규칙
  • 22.3 내포 함수
  • 22.4 함수를 매개변수로 넘기기
  • 22.5 함수 반환하기
  • 22.6 요약
  • 23장 진급 프로젝트: 친구 분석
  • 23.1 파일 읽기
  • 23.1.1 파일 형식
  • 23.1.2 새줄 문자
  • 23.1.3 새줄 문자 제거하기
  • 23.1.4 정보를 저장하기 위해 튜플 사용하기
  • 23.1.5 반환할 값
  • 23.2 사용자 입력 정리하기
  • 23.3 지금까지 만든 코드 테스트 및 디버깅하기
  • 23.3.1 파일 객체
  • 23.3.2 이름과 전화번호가 들어 있는 텍스트 파일 만들기
  • 23.3.3 파일을 열어서 읽기
  • 23.4 함수 재사용하기
  • 23.5 정보 분석하기
  • 23.5.1 명세
  • 23.5.2 도우미 함수
  • 23.6 요약
  • 제 6 부 변경 가능한 데이터 타입 다루기
  • 24장 변경 가능한 객체와 변경 불가능한 객체
  • 24.1 변경 불가능한 객체
  • 24.2 변경 가능성이 필요한 이유
  • 24.3 요약
  • 25장 리스트 다루기
  • 25.1 리스트와 튜플 비교
  • 25.2 리스트를 만들고 특정 위치에 있는 원소 가져오기
  • 25.3 원소 반복 횟수 세기 및 원소 위치 찾기
  • 25.4 리스트에 원소 추가하기: append, insert, extend
  • 25.4.1 append 사용하기
  • 25.4.2 insert 사용하기
  • 25.4.3 extend 사용하기
  • 25.5 리스트에서 원소 제거하기: pop
  • 25.6 원소 값 변경하기
  • 25.7 요약
  • 26장 리스트 고급 연산
  • 26.1 리스트 정렬 및 원소 순서 거꾸로 하기
  • 26.2 리스트의 리스트
  • 26.3 문자열을 리스트로 변환하기
  • 26.4 리스트 응용
  • 26.4.1 스택
  • 26.4.2 큐
  • 26.5 요약
  • 27장 객체 사이의 맵인 사전
  • 27.1 사전, 키, 값 만들기
  • 27.2 사전에 키-값 쌍 추가하기
  • 27.2.1 키 값 제약에 대한 부연 설명
  • 27.3 사전에서 키-값 쌍 제거하기
  • 27.4 사전의 키와 값을 모두 가져오기
  • 27.4.1 사전에 저장된 키-값 쌍의 순서
  • 27.5 사전을 사용해야 하는 경우는?
  • 27.5.1 빈도수를 사전으로 유지하기
  • 27.5.2 일반적이지 않은 사전 만들기
  • 27.6 요약
  • 28장 리스트와 사전 별명 붙이기와 복사하기
  • 28.1 객체의 별명 사용하기
  • 28.1.1 불변 객체에 대한 별명
  • 28.1.2 변경 가능한 객체에 대한 별명
  • 28.1.3 함수 매개변수로 변경 가능한 객체 전달하기
  • 28.2 변경 가능한 객체의 복사본 만들기
  • 28.2.1 변경 가능한 객체를 복사하는 명령들
  • 28.2.2 리스트 원소를 정렬한 복사본 만들기
  • 28.2.3 변경 가능한 객체에 대한 이터레이션을 수행할 때 조심할 점
  • 28.2.4 별명이 존재하면 어떻게 해야 할까?
  • 28.3 요약
  • 29장 진급 프로젝트: 문서 유사성 분석
  • 29.1 문제를 하위 작업으로 나누기
  • 29.2 파일 정보 읽기
  • 29.3 파일에 있는 모든 단어 저장하기
  • 29.4 단어의 빈도 구하기
  • 29.5 유사도 점수를 사용해 두 문서 비교하기
  • 29.6 하나로 합치기
  • 29.7 이 프로그램을 확장할 방법 한 가지
  • 29.8 요약
  • 제 7 부 객체 지향 프로그래밍을 사용해 원하는 대로 객체 만들기
  • 30장 직접 객체 타입 정의하기
  • 30.1 새로운 객체 타입이 필요한 이유는?
  • 30.2 객체를 이루는 것은 무엇인가?
  • 30.2.1 객체의 프로퍼티
  • 30.2.2 객체의 동작
  • 30.3 마침표 표기법 사용하기
  • 30.4 요약
  • 31장 객체의 타입을 표현하는 클래스 만들기
  • 31.1 클래스를 사용해 새로운 객체 타입 구현하기
  • 31.2 데이터 속성을 나타내는 객체 프로퍼티
  • 31.2.1 객체를 __init__으로 초기화하기
  • 31.2.2 __init__ 내부에서 객체 프로퍼티 만들기
  • 31.3 객체의 동작과 연산인 메서드
  • 31.4 직접 정의한 객체 타입 사용하기
  • 31.5 매개변수를 받는 __init__을 사용해 클래스 만들기
  • 31.6 객체가 아닌 클래스 이름에 마침표 표기를 사용하는 경우
  • 31.7 요약
  • 32장 직접 만든 객체 타입 사용하기
  • 32.1 스택 객체 정의하기
  • 32.1.1 데이터 속성 선택하기
  • 32.1.2 메서드 구현하기
  • 32.2 Stack 객체 사용하기
  • 32.2.1 부침개 스택 만들기
  • 32.2.2 원으로 이뤄진 스택 만들기
  • 32.3 요약
  • 33장 원하는 대로 클래스 바꾸기
  • 33.1 특수 메서드 오버라이드하기
  • 33.2 str( ) 오버라이드하여 print( )가 객체를 출력하는 방법 변경
  • 33.3 내부적으로 벌어지는 일들
  • 33.4 클래스로 할 수 있는 일은 무엇인가?
  • 33.4.1 이벤트 스케줄링
  • 33.5 요약
  • 34장 진급 프로젝트: 카드 게임
  • 34.1 기존 클래스 사용하기
  • 34.2 워 게임 상세 규칙
  • 34.3 Player 클래스 정의하기
  • 34.4 CardDeck 클래스 정의하기
  • 34.5 카드 게임 시뮬레이션하기
  • 34.5.1 객체 초기화하기
  • 34.5.2 게임의 각 라운드 시뮬레이션하기
  • 34.6 클래스를 사용한 모듈화와 추상화
  • 34.7 요약
  • 제 8 부 라이브러리를 사용해 프로그램 개선하기
  • 35장 유용한 라이브러리
  • 35.1 라이브러리 임포트하기
  • 35.2 math 라이브러리로 수학 연산 사용하기
  • 35.3 random 라이브러리를 사용해 난수 활용하기
  • 35.3.1 리스트 임의로 뒤섞기
  • 35.3.2 확률 게임 시뮬레이션하기
  • 35.3.3 시드를 사용해 똑같은 난수 결과를 다시 만들어내기
  • 35.4 time 라이브러리를 사용해 프로그램 실행에 걸리는 시간 측정하기
  • 35.4.1 클럭 사용하기
  • 35.4.2 프로그램 일시 중단하기
  • 35.5 요약
  • 36장 프로그램 테스트 및 디버깅하기
  • 36.1 unittest 라이브러리 사용하기
  • 36.2 프로그램과 테스트 분리하기
  • 36.2.1 검사 유형
  • 36.3 작성한 코드 디버깅하기
  • 36.3.1 코드를 한 단계씩 쫓아갈 때 도움이 되는 도구 사용하기
  • 36.4 요약
  • 37장 그래픽 사용자 인터페이스를 위한 라이브러리
  • 37.1 그래픽 사용자 인터페이스를 위한 라이브러리
  • 37.2 tkinter 라이브러리를 사용해 프로그램 설정하기
  • 37.3 위젯 추가하기
  • 37.4 이벤트 핸들러 추가하기
  • 37.5 요약
  • 38장 진급 프로젝트: 태그 게임
  • 38.1 문제 구성 요소 찾기
  • 38.2 창에 두 가지 모양 만들기
  • 38.3 캔버스 안에서 모양 움직이기
  • 38.4 두 모양 사이의 충돌 검출하기
  • 38.5 개선할 수 있는 부분
  • 38.6 요약
  • 부록 A 연습 문제 해답
  • 부록 B 파이썬 치트 시트
  • 부록 C 흥미로운 파이썬 라이브러리
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.