#!/usr/bin/env python # coding: utf-8 # # Assignment 3 # ### [정보] # #### 1) Due Date: 2016년 11월 02일 (수), 23시 59분 # #### 2) 제출방법: ipython notebook으로 작성된 내용을 github 또는 dropbox와 같은 클라우드에 올려 해당 URL을 다시 http://nbviewer.ipython.org 에 넣어서 산출된 URL을 EL사이트에 제출함. # #### 3) 내용: 반드시 python code와 수행 결과를 ipython notebook 내에 작성하여 넣고 이에 대한 설명등을 해당 코드 아래에 markdown cell에 넣어 기입하시오. # #### 4) 숙제이후 소감: 문제를 모두 푼 이후에 현재까지 강의를 들은 이후의 소감, 숙제를 한 이후의 소감, 또는 전하고자 하는 말 등을 짧막하게라도 좋으니 마지막에 함께 작성하여 제출하시오. # #### 5) 문제 (프로젝트 오일러 3문제 포함하여 총 11개) # - L=[1, 2, 3, 4, 5]일 때 다음 각 문장을 수행한 후의 결과를 보고 납득할 만한 이유를 설명하시오. # - 1)
L[1:3] = [100]
#    print L
# - 2)
L[1:3] = [(100)]
#    print L
# - 3)
L[1:3] = 100
#    print L
# - 4)
L[1:3] = (100)
#    print L
# - 5)
L[1:3] = (100, 101, 102)
#    print L
# - 6)
L[1:3] = [100, 101, 102]
#    print L
# - 7)
L[1:3] = [(100, 101, 102)]
#    print L
# - 8)
L[1:3] = [[100, 101, 102]]
#    print L
# - 문자열 S = 'Hello World and Python'에 대해 다음 요구사항에 대한 Python 코드를 제시하시오. # - 1) 단어의 순서가 역순으로 되어진 문자열 ('Python and World Hello')을 만들고 # - 2) 1)의 결과 문자열에 대해 메소드 split과 join을 이용하여 공백을 모두 없엔 문자열 'PythonandWorldHello'을 만드시오. # - 다음 코드를 보고 물음에 답하시오. #
a = [1, 2, 3]
#   b = a * 3
#   c = [a] * 3
#   print b
#   print c
# # - 1) 위 코드를 수행한 이후 다음 코드를 수행한 후 b와 c의 내용을 확인하시오. #
a[0]=0
# - 2) b와 c 객체의 차이는 무엇인가? # - 다음 문자열을 ':'을 기준으로 분리하여 리스트로 만들고 각 문자열의 좌우 공백을 제거하시오 (즉, 문자열 S에서 l을 만들어라) #
# s = '  first star   :   second star   :    third star  '
# l = ['first star', 'second star', 'third star']
# 
# - 1) for ~ in 문을 이용한 코드를 작성하시오. # - 2) 리스트 내포(list comprehension)를 이용한 코드를 작성하시오. # - 다음과 같이 0보다 큰 정수 리스트 변수 list를 인자로 받는 함수 addall(list)와 addallodd(list)를 for ~ in 리터널과 리스트 내포 방식으로 각각 제시하시오. # - 1) addall(list) 함수 (리스트 내의 모든 정수를 더하는 함수로서 해답으로는 for ~ in 리터럴과 리스트 내포 방식으로 각각 제시하시오.) # -
>>> addall([1])
#     1
# -
>>> addall([1, 2, 3, 4, 5, 6, 7, 8, 9])
#     45
# - 2) addallodd(list) 함수 (리스트내의 모든 홀수를 더하는 함수로서 해답으로는 for ~ in 리터럴과 리스트 내포 방식으로 각각 제시하시오.) # -
>>> addallodd([1])
#     1
# -
>>> addallodd([1, 2, 3, 4, 5, 6, 7, 8, 9])
#     25
# - [참고 1]: 리스트 내포 방식으로 addall() 및 addallodd()함수를 만들 때엔 리스트 내포에 의해 생성된 리스트 결과에 대해 내장 함수를 사용하는 방식을 고려해보시오 (주의: 리스트 내포 방식의 addall() 및 addallodd() 함수의 몸체는 단 1줄로 작성되어야 한다.) # - [참고 2]: sum() 등의 내장함수 사용 가능함 # - 다음 코드를 보고 물음에 답하시오. #
L1 = [1, 2, 3]
# L2 = [4, 5, 6]
# d = {'low':L1, 'high':L2}
# e = d
# f = d.copy()
# print d
# print e
# print f
# print
# d['low'] = [10, 20, 30]
# d['high'][1] = 500
# print d
# print e
# print f
# # - 1) 위 코드의 수행 결과 d와 e는 항상 같은 결과를 출력한다. 그 이유는 무엇인가? # - 2) 위 코드의 수행 결과 마지막 f의 내용은 다음과 같다. 이 때 'high' 키의 값 내용 중 500이 출력된 이유와 'low' 키의 값 내용 중 [1, 2, 3]이 출력된 이유를 설명하시오 ([hint]: shallow copy 관점에서 설명하시오.) #
{'high': [4, 500, 6], 'low': [1, 2, 3]}
# # - 사전 d = {'one':1, 'two':2, 'three':3, 'four':4, 'five':5}가 주어졌을 때 다음 요구사항에 맞는 코드를 제시하시오 # - [참고]: d.keys(), d.values()를 통해 리스트를 얻어낸 후 리스트가 지니고 있는 sort(cmp=None, key=None, reverse=False)함수를 활용하시오. # - 1) 키의 알파벳 오름차순 순서대로 튜플 (키, 값)을 차례대로 출력하시오. # - 2) 키의 알파벳 내림차순 순서대로 튜플 (키, 값)을 차례대로 출력하시오. # - 3) 값의 오름차순 순서대로 튜플 (키, 값)을 차례대로 출력하시오. # - 4) 값의 내림차순 순서대로 튜플 (키, 값)을 차례대로 출력하시오. # - [프로젝트 오일러 문제 7] # - [프로젝트 오일러 문제 8] # - [프로젝트 오일러 문제 9] # - [Incremental Project] 이전 Assignment 2의 마지막 문제는 웹 URL로 지정된 웹페이지를 문자열로 가져와 모든 HTML 태그 및 CSS와 Javascript를 제외한 순수 텍스트를 얻어내고 그 안에 존재하는 단어를 추출하고 단어들의 총 개수를 출력하는 프로그램을 작성하는 것이었다. 이번에는 그 마지막 숙제를 그대로 확장하여 웹 URL로 지정된 웹페이지 내 순수 텍스트 안에 존재하는 각 단어들에 대해 다음 요구사항 대로 출력하는 프로그램을 작성하시오. # - 요구사항 1. 순수 텍스트 안에 존재하는 단어들에 대해 string 모듈을 활용하여 모든 punctuation (구두문자)를 완벽히 제거하시오. # - 예: ['world!', ':', '+hello+', '~python$$$', '=', 'world'] ---> ['world', 'hello', 'python', 'world'] # - 모든 punctuation을 확인하는 방법은 아래와 같다. #
#     import string
#     print string.punctuation
#     
# - 요구사항 2. 만약 punctuation (구두문자)를 제거한 이후 공백으로 판명되는 단어들은 해당 단어 리스트에서 제거하시오. # - 예: ['컴퓨터공학부!', '---?', '%지향~', '...'] ---> ['컴퓨터공학부', '지향'] # - 요구사항 3. 각 단어들의 출현빈도를 사전형태로 저장하여 출력하시오. # - 예: ['world', 'hello', 'python', 'world', '컴퓨터공학부', '지향'] ---> {'world': 2, 'hello': 1, 'python': 1, '컴퓨터공학부': 1, '지향': 1} # - 요구사항 4. 다음 3개의 사이트에 대한 결과를 출력하시오. # - http://www.naver.com # - http://www.daum.net # - http://www.nytimes.com