Lectures/CP2/2016

From MCLab
Jump to: navigation, search

Contents

컴퓨터프로그래밍2 Class Overview

인문계 학생 대상 SW연계전공

학습목표

Python Programming Language를 배우고 익혀 논리적 사고와 problem solving 능력을 배양하고 소프트웨어 개발 능력을 키운다.

교재 및 참고문헌

Textbook

Allen B. Downey, Think Python - How to Think Like a Computer Scientist, 2nd Edition, Green Tea Press, 2015.
http://greenteapress.com/wp/think-python-2e/

References

  1. Allen Downey, Think Python, 1판, 한글 번역판 (편집 중) - Python 2 기반 온라인 서적
  2. Practical Programming (2nd edition): An Introduction to Computer Science Using Python 3, by Paul Gries, Jennifer Campbell, Jason Montojo The Pragmatic Bookshelf, 2013. [1]
  3. Mark Lutz, Learning Python, O'Reilly, 5th Ed., 2013
  4. 제니퍼 캠벨 등, 개념을 잡아주는 프로그래밍 정석, 에이콘, 2010. - 교재 1판의 번역본 (Python 2)

수업운영방법

2시간 강의, 2시간 실습으로 운영하는 것을 원칙으로 하되, 강의 중에 직접 코딩 연습을 진행한다. 수강자는 각자 개인 노트북을 지참하고 수강하기를 권한다.

강의시간: 화 1 2 (0305) 목 5 6 (0305)

면담시간: 월 6 7 8

평가

수강생의 수준과 수월성을 감안하여 아래 평가원칙은 강좌가 진행되면서 변경될 수 있다.

시험

  • Quiz (20 ~ 30점/회): 간단한 문답
  • Coding Exam.: (100점/회) 코딩시험으로 중간, 기말 2차례 실시 예정

과제물

  • Lab Report (10점/회)
  • Exercises (10점/회)
  • Programming Assignments (20점/회): 3일 ~ 1주일 기간에 수행하는 problem solving 위주 과제

출석: 결석 -5점, 지각 -2.5점

조교

김왕수, phone : 010-4176-6078 kws5078@nate.com, 공과대학 425호

공지사항

과제물의 제출 요령과 기한

Lab Report
매 실습시간 마다 실습한 결과를 당일 저녁 6시까지 제출한다. (당일 자정까지 지연 제출하면 1점 감점)
Exercises
수업후 당일 자정까지 제출하는 간단한 coding 연습 (지연제출 불가)
Programming Assignments
지정된 마감일 자정까지 제출한다. (지연제출 가능. 지연 제출시 1일 10% 감점)
Cheating은 허용되지 않는다. 
토론은 가능하지만, 다른 학생의 결과를 본 후 수행하거나, 복제하거나, 복제 후 일부 편집하는 일은 이유 여하를 막론하고 용인되지 않는다. 학생들은 제출한 과제물에 대해 조교가 질문하면 답변에 응해야 하고, 충분히 설명할 수 있어야 한다. 한 번의 잘못으로 과목을 이수하지 못하는 불행을 초래하지 않기 바란다.
과제물 제출처
e-class의 과제란에 제출하되 결과물은 첨부파일로 upload한다.
첨부파일명은 <과제물 번호>-<학번> 으로 하고 확장자는 '.docx' 또는 '.zip' (파일이 여러개일 때)
예) Lab-2-201402222.docx

중간시험

퀴즈와 짧은 coding 중심으로 출제된다. 여러분은 노트북을 지참하고 강의자료와 인터넷, 여러분의 그간 숙제 등을 모두 참조해도 좋다. 다만, 토론할 수 없고 제한된 시간에 완수해야 한다.

시간: 10/18(화) 1, 2교시

장소: 0305호 강의실

준비물: 노트북

기말시험 (Coding)

일시: 12/15(목) 5교시 부터 약 4시간

장소: 공과대학 307호 PC실습실

준비물: 노트북

Lectures

  1. Onto Python (pdf) -- updated in 9/5/2016
  2. Functions (pdf)
  3. Interface Design (pdf)
  4. Conditionals [2]
  5. Fruitful functions [3]
  6. Iteration [4]
  7. Strings [5]
  8. Turples [6]
  9. Lists [7]
  10. Dictionaries [8]
  11. More on Lists, Dictionaries, and Sets cp2_more.pdf
  12. Modules [9]
  13. Files [10]
  14. Exceptions [11]
  15. Recursion [12]
  16. List Algorithms [13]
  17. Classes and Objects — the Basics [14]
  18. Classes and Objects — Digging a little deeper [15]
  19. Even more OOP [16]
  20. Collections of objects [17]
  21. Inheritance [18]
  22. OOP Summary Media:oop.pdf

참고자료

  1. Reference Tables from Core Python Application Programming Appendix B

Labs

Lab-1 Setup Python 3 (8/30, 9/1)

이전에 설치한 Python 2.7을 먼저 제거한다.

제어판 -> 프로그램제거 -> Python 2.7을 찾아 우클릭 -> 제거

Python Interpreter를 자신의 Notebook (또는 집에 있는 컴퓨터)에 Python 3.5 Interpreter를 설치한다.

  1. Windows용 최신 버전 Python 3.5.2 설치파일을 download받아 실행시킨다.
  2. Customize installation
  3. Install Python 3.5.2: Install launcher for all users 선택, Add Python 3.5 to PATH 선택 -> Customize installation 클릭
  4. Optional Features: 모두 선택 -> Next
  5. Advanced Options: Install for all users 선택 -> Install

그러면 C:\Program Files (x86)\Python35-32 위치에 설치된다.

  • 이 Lab report 제출은 생략한다.

Lab-2 (9/22)

ppt

Lab-3 Conditionals (9/29)

수업시간에 진행한 Conditionals의 부분 중 exercise를 Lab-3로 제출합니다. 수업자료 및 참고: Lectures -> 4. Conditionals

Lab-4 Iteration (10/6)

Iteration 중 오늘 수업 내용에 해당하는 Exercises를 작성하여 제출합니다. 제출요령은 EX-6과 같습니다.

Lab-5 Dictionary and Set (11/3)

Dictionary 중 오늘 수업 내용에 해당하는 Exercises를 작성하여 제출합니다. 제출요령은 EX-6과 같습니다.

Lab-6 Exceptions and Recursion (11/23)

Exceptions과 Recursion의 Exercise 문제를 풀어 제출합니다

Exercises

EX-1 Practice using the Python interpreter as a calculator (9/1)

MS Word로 작성된 문제 파일을 다운로드 받아 여기에 Python code와 결과를 copy하여 삽입하여 저장하고 e-class에 제출한다.

EX-2 Basics (9/8)

진도가 덜 나가서 다음 시간으로 제출을 미룹니다. -- jphong

EX-3 Loop and Functions (9/13)

EX-4 Loop and Functions (II) (9/21)

EX-5 Turtle World (9/27)

EX-6 Fruitful Functions (10/4)

Fruitful functions 의 Exercises 1 - 19에 답하라.

제출요령
새폴더를 만들고 폴더명을 EX-6-<여러분의 학번>으로 변경한다. 이 폴더내에서 다음 사항을 진행한다.
19개의 function과 이 funtion에 대한 test suit들을 하나 또는 몇 개의 Python script file에 저장하고 (예, ex6.py 또는 ex6_1.py, ex6_2.py)
run 시킨 결과를 보여주는 IDLE Shell 화면을 ex6.txt 이름으로 저장한다.
  • IDLE Shell에서 File > Save copy as ... > 파일 형식을 *.txt로 선택하여 저장
폴더를 우클릭하여 보내기 > 압축(ZIP)폴더를 선택하여 압축시키면 EX-6-<여러분의 학번>.zip 파일이 생긴다. 이것을 e-class에 첨부파일로 upload

EX-7 String (10/11)

String 의 Execises 1 - 13에 답하라.

EX-8 Lists (10/25)

Lists 의 Exercises 4 - 11에 답하라.

윤년인지 여부를 check하는 function is_leap_year과 주어진 연도 사이의 윤년의 횟수를 count하는 function leap_years를 작성하라. Test case들도 함께 제공되어야 한다.

def is_leap_year(year):
    """check if the year is a leap year or not"""

def leap_years(start, stop):
    """Count the leap years between the start and stop year
    (including start year, but not including stop year)""".

EX-9 Sorting the Playing Cards (11/15)

하나의 card는 (suit, rank) pair로 정의할 수 있으며, cards는 임의의 갯수의 card들의 list가 된다. 주어진 source에 sort_by_rank(cards), sort_by_suit(cards) function을 작성하고 unit testing을 하라.

Source: Media:cards.zip

Hint

use sorted() with key function
rank 순으로 sorting하기 위해서는 card의 rank를 (0, 1, ..., 12)의 수로 mapping하는 key function을 생각해 보자.

EX-10 Classes and Objects — the Basics (12/2)

Chapter 15에 있는 Point class에 Exercises 2 ~ 4, Chapter 16의 Exerrcise 1 ~ 4에 기술된 method들을 추가하라. 물론 unit test도 시행해야 한다.

EX-11 (12/6)

Exercises 21.11의 1 ~ 5와 Exercises 22.10의 1에 따라 수행하라.

Programming Assignments

PA-1 Month Calendar (10/31)

연도와 달을 지정하면 해당 월의 달력을 return하는 함수 month_calendar(year, month)를 작성하라. 단, month_calendar는 string을 return하며 이를 print하면 달력 폼이 출력된다.

cal.zip - starting source - updated in 10/25/2016 21:00
윤년 계산 관련 function도 주어지고, test case도 추가했으니 새로운 버전을 다운로드 받으세요. - jphong

PA-2 Calendar (11/2까지)

PA-1에서 year만 주어지면 year calendar를, year와 month가 주어지면 month calendar string을 return하는 다음과 같은 함수를 작성하고 test case들도 제공하라.

def cal(year, month=None):
    """Return the month calendar string to be printed if month is given.
    Otherwise, return the year calendar string.
    """

Year calendar는 calendar.calendar(year)와 같은 string을 산출해야 한다.

  • calendar module과 같은 function name을 쓰면 충돌이 일어나므로 이름을 'cal'로 변경함.

PA-3 Calendar - using list comprehension (11/9까지)

PA-2에서 작성한 code를 list comprehension을 활용하여 가능한한 compact하게 재작성하라. calendar module에서 나온 output과 동일할 필요는 없고, print한 결과가 동일하게 보이면 된다.

PA-4 Word Tools + File Filtering (11/18)

12.11.Exercises의 8번 문제의 지시대로 wordtools.py를 작성하라.

13.11.Exercises의 3문제를 13.7 example에 있는 filter function을 수정하여 filter.py를 작성하라.

위 두 source file과 unit_test.py를 하나의 zip 파일로 만들어 제출하라.

PA-5 Algorithm 비교: Find Unknown Words (11/28)

주어진 책(AliceInWonderland.txt)에 있는 단어들에 대해 단어장(vocab.txt)에 존재하지 않는 단어들을 찾아낼 때 다음 3가지 algorithm의 성능을 비교해 보자. 어느 것이 성능이 가장 좋은가? 왜 그러한가를 algorithm complexity 측면에서 설명해 보자.

  1. Linear search: 14.1 - 14.3은 linear search algorithm이다. 이를 따라서 Python 모듈들을 완성하고 find_unknown_words(bigger_vocab, book_words) function이 수행되는 시간을 측정해 보자.
  2. Binary search: 14.4에 따라 linear_search function 대신 search_binary function으로 대체하여 수행시간을 측정해 보자. Binary search를 사용하려면 bigger_vocab는 sorting되어 있어야 한다.
  3. Hashing: search_hash(xs, target) function을 만들고 대체하여 같은 방식으로 수행시간을 측정해 보자. Hashing을 사용하려면 bigger_vocab는 set type으로 만들어 놓으면 된다.

제출물:

source code
간단한 보고서 (PDF 파일로)

PA-6 SMS_store class (12/2)

15.6 Exercise에서 요구하는데로 class SMS_store를 작성하라. (파일명은 sms_store.py로)

Related Sites

Python Official Site https://www.python.org

Python Books and Sites

Beginners Guide, Programmers https://wiki.python.org/moin/BeginnersGuide/Programmers