{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Assignment 3\n", "### [정보]\n", "#### 1) Due Date: 2019년 11월 01일 (금), 23시 59분\n", "\n", "#### 2) 제출방법: colab으로 작성된 notebook URL을 EL사이트에 제출 (EL 사이트의 본인 게시물에서 클릭이 되도록 함)\n", "\n", "#### 3) 내용: 반드시 python code와 수행 결과를 colab notebook 내에 작성하여 넣고 이에 대한 설명등을 해당 코드 아래에 markdown cell 등에 넣어 기입하시오.\n", "\n", "#### 4) 숙제이후 소감 작성: 모든 문제의 답을 작성한 이후에 현재까지 강의를 들은 후의 소감, 숙제를 한 이후의 소감, 또는 전하고자 하는 말 등을 짧막하게라도 좋으니 마지막에 함께 작성하여 제출하시오. \n", "\n", "#### 5) 반드시 본인 스스로 문제를 해결하세요~~~" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- L=[1, 2, 3, 4, 5]일 때 다음 각 문장을 수행한 후의 결과를 보고 납득할 만한 이유를 설명하시오. \n", " - 1)
L[1:3] = [100]\n",
    "   print(L)
\n", " - 2)
L[1:3] = [(100)]\n",
    "   print(L)
\n", " - 3)
L[1:3] = 100\n",
    "   print(L)
\n", " - 4)
L[1:3] = (100)\n",
    "   print(L)
\n", " - 5)
L[1:3] = (100, 101, 102)\n",
    "   print(L)
\n", " - 6)
L[1:3] = [100, 101, 102]\n",
    "   print(L)
\n", " - 7)
L[1:3] = [(100, 101, 102)]\n",
    "   print(L)
\n", " - 8)
L[1:3] = [[100, 101, 102]]\n",
    "   print(L)
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 문자열 S = 'Hello World and Python'에 대해 다음 요구사항에 대한 Python 코드를 제시하시오. \n", " - 1) 단어의 순서가 역순으로 되어진 문자열 ('Python and World Hello')을 만들고 \n", " - 2) 1)의 결과 문자열에 대해 메소드 split과 join을 이용하여 공백을 모두 없엔 문자열 'PythonandWorldHello'을 만드시오." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 다음 코드를 보고 물음에 답하시오.\n", "
a = [1, 2, 3]\n",
    "  b = a * 3\n",
    "  c = [a] * 3\n",
    "  print(b)\n",
    "  print(c)
\n", "\n", " - 1) 위 코드를 수행한 이후 다음 코드를 수행한 후 b와 c의 내용을 확인하시오.\n", "
a[0]=0
\n", " - 2) b와 c 객체의 차이는 무엇인가?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 다음 문자열을 ':'을 기준으로 분리하여 리스트로 만들고 각 문자열의 좌우 공백을 제거하시오 (즉, 문자열 S에서 l을 만들어라)\n", "
\n",
    "s = '  first star   :   second star   :    third star  '\n",
    "l = ['first star', 'second star', 'third star']\n",
    "
\n", " - 1) for ~ in 문을 이용한 코드를 작성하시오. \n", " - 2) 리스트 내포(list comprehension)를 이용한 코드를 작성하시오." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 다음과 같이 0보다 큰 정수 리스트 변수 list를 인자로 받는 함수 addall(list)와 addallodd(list)를 for ~ in 리터널과 리스트 내포 방식으로 각각 제시하시오.\n", " - 1) addall(list) 함수 (리스트 내의 모든 정수를 더하는 함수로서 해답으로는 for ~ in 리터럴과 리스트 내포 방식으로 각각 제시하시오.)\n", " -
>>> addall([1])\n",
    "    1
\n", " -
>>> addall([1, 2, 3, 4, 5, 6, 7, 8, 9])\n",
    "    45
\n", " - 2) addallodd(list) 함수 (리스트내의 모든 홀수를 더하는 함수로서 해답으로는 for ~ in 리터럴과 리스트 내포 방식으로 각각 제시하시오.)\n", " -
>>> addallodd([1])\n",
    "    1
\n", " -
>>> addallodd([1, 2, 3, 4, 5, 6, 7, 8, 9])\n",
    "    25
\n", " - [참고 1]: 리스트 내포 방식으로 addall() 및 addallodd()함수를 만들 때엔 리스트 내포에 의해 생성된 리스트 결과에 대해 내장 함수를 사용하는 방식을 고려해보시오 (주의: 리스트 내포 방식의 addall() 및 addallodd() 함수의 몸체는 단 1줄로 작성되어야 한다.)\n", " - [참고 2]: sum() 등의 내장함수 사용 가능함" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 다음 코드를 보고 물음에 답하시오.\n", "
L1 = [1, 2, 3]\n",
    "L2 = [4, 5, 6]\n",
    "d = {'low':L1, 'high':L2}\n",
    "e = d\n",
    "f = d.copy()\n",
    "print(d)\n",
    "print(e)\n",
    "print(f)\n",
    "print()\n",
    "d['low'] = [10, 20, 30]\n",
    "d['high'][1] = 500\n",
    "print(d)\n",
    "print(e)\n",
    "print(f)
\n", "\n", " - 1) 위 코드의 수행 결과 d와 e는 항상 같은 결과를 출력한다. 그 이유는 무엇인가?\n", " - 2) 위 코드의 수행 결과 마지막 f의 내용은 다음과 같다. 이 때 'high' 키의 값 내용 중 500이 출력된 이유와 'low' 키의 값 내용 중 [1, 2, 3]이 출력된 이유를 설명하시오 ([hint]: shallow copy 관점에서 설명하시오.)\n", "
{'high': [4, 500, 6], 'low': [1, 2, 3]}
\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 사전 d = {'one':1, 'two':2, 'three':3, 'four':4, 'five':5}가 주어졌을 때 다음 요구사항에 맞는 코드를 제시하시오 \n", " - [참고]: d.keys(), d.values()를 통해 리스트를 얻어낸 후 리스트가 지니고 있는 sort(cmp=None, key=None, reverse=False)함수를 활용하시오.\n", " - 1) 키의 알파벳 오름차순 순서대로 튜플 (키, 값)을 차례대로 출력하시오.\n", " - 2) 키의 알파벳 내림차순 순서대로 튜플 (키, 값)을 차례대로 출력하시오.\n", " - 3) 값의 오름차순 순서대로 튜플 (키, 값)을 차례대로 출력하시오. \n", " - 4) 값의 내림차순 순서대로 튜플 (키, 값)을 차례대로 출력하시오." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [문제]\n", " - **length(X)**를 다음과 같이 정의한다 : 10진수로 표현된 X의 자릿수\n", " - **Strange**라는 숫자를 아래과 같이 정의한다.
\n", " - 음이 아닌 정수 중 자릿수가 1인 모든 숫자는 **Strange**이다.
\n", " - **length(X)** > 1 인 숫자 X 는 다음 2가지를 만족하면 **Strange**이다.\n", " - X는 **length(X)**로 정확히 나누어 떨어진다.\n", " - X / length(X) 가 **strnage**이다.
\n", "
\n", " - 이 문제에서 숫자 하나가 주어질 때, 이 숫자가 Strange인지 판단하는 함수 isStrange(num)을 작성하시오.
\n", " - isStrange(num) 함수가 재귀적인 함수가 되도록 작성해 보세요." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def isStrange(num):\n", " '''\n", " 함수 포맷 변경하지 마세요.\n", " 재귀적인 함수는 함수 안에서 자기 자신 함수를 호출하는 것을 말합니다.\n", " '''\n", " return True # or False or isStrange(매개변수 숫자)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [예시]\n", " ```\n", " 1. num = 0 => True\n", " 2. num = 56 => True\n", " 3. num = 100 => False\n", " 4. num = 7882602506492313600 => True\n", " 5. num = 6012302549522098651 => False\n", " ```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [문제]\n", " - 1번 그룹, 2번 그룹, ... n번 그룹으로 번호가 매겨진 **총 n개의 그룹**이 존재하고, **ith** 그룹에는 임의의 팀원 수 **ai** 명이 있다.
\n", " 하나의 버스 정류장이 있고, 버스는 오직 한 대만 운영한다. 버스는 버스 정류장에 도착하고 모든 그룹은 버스를 통해 여행하길 원한다.
\n", " 하지만, 같은 그룹에 속한 팀원들은 분리되기를 원치 않는다. 그래서 그룹의 모든 팀원이 탈 수 있을 때 에만 그 그룹은 버스에 탑승한다.
\n", " 또한, 이들은 그룹의 번호순으로 여행을 하길 원한다. 예를 들어, 3번 그룹은 1번 그룹과 2번 그룹이 여행을 한 뒤에 버스를 탈 수 있거나, 1번 그룹과 2번 그룹이 이미 버스에 탑승한 상태에 있을 때 동시에 버스를 탈 수 있다.
\n", " 마지막으로, 버스는 빈 좌석이 없을 때 에만 여행을 떠난다.
\n", "
\n", " - 이 문제에서 각 그룹의 팀원 수가 리스트로 주어질 때, 가능한 모든 버스의 사이즈 **x**(x명의 사람들이 동시에 탈 수 있음)를 반환하는 함수 solve(a) 를 작성하시오.\n", " - [주의] 반드시 계산 복잡도를 최대한 낮추세요. 아래 예시 3번을 실행했을 때 결과가 바로 나타날 수 있도록!!" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def solve(a):\n", " '''\n", " 함수 포맷 변경하지 마세요.\n", " 필요시 solve(a)를 해결하기위한 다른 함수를 만들 수는 있음.\n", " '''\n", " return []" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [예시]\n", " ```\n", " 1. a = [1, 2, 1, 1, 1, 2, 1, 3] => [3, 4, 6, 12]\n", " 2. a = [1, 1, 1, 1] => [1, 2, 4]\n", " 3. a = [9999] * 10**5 => \n", " [9999,19998,39996,49995,79992,99990,159984,199980,249975,319968,399960,499950,799920,999900,1249875,1599840,1999800,2499750,3999600,4999500,6249375,7999200,9999000,12498750,19998000,24997500,31246875,39996000,49995000,62493750,99990000,124987500,199980000,249975000,499950000,999900000]\n", " ```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [Incremental Project] 이전 Assignment 2의 마지막 문제는 웹 URL로 지정된 웹페이지를 문자열로 가져와 모든 HTML 태그를 제외한 순수 텍스트를 얻어내고 그 안에 존재하는 단어를 추출하고 단어들의 총 개수를 출력하는 프로그램을 작성하는 것이었다. 이번에는 그 마지막 숙제를 그대로 확장하여 웹 URL로 지정된 웹페이지 내 순수 텍스트 안에 존재하는 각 단어들에 대해 다음 요구사항 대로 출력하는 프로그램을 작성하시오.\n", " - 요구사항 1. CSS와 Javascript 내용도 모두 제거하시오 (이전 숙제에서 이미 제외하였다면 본 요구사항 무시)\n", " - 즉, 아래와 같은 코드는 태그 뿐만 아니라 그 안의 내용 전체를 모두 제거\n", " ```\n", " \n", " ``` \n", " \n", " ```\n", " \n", " ```\n", " - 요구사항 2. 순수 텍스트 안에 존재하는 단어들에 대해 string 모듈을 활용하여 모든 punctuation (구두문자)를 완벽히 제거하시오.\n", " - 예: ['world!', ':', '+hello+', '~python$$$', '=', 'world'] ---> ['world', 'hello', 'python', 'world']\n", " - 모든 punctuation을 확인하는 방법은 아래와 같다.\n", "
\n",
    "    import string\n",
    "    print(string.punctuation)\n",
    "    
\n", " - 요구사항 3. 만약 punctuation (구두문자)를 제거한 이후 공백으로 판명되는 단어들은 해당 단어 리스트에서 제거하시오.\n", " - 예: ['컴퓨터공학부!', '---?', '%지향~', '...'] ---> ['컴퓨터공학부', '', '지향', ''] ---> ['컴퓨터공학부', '지향'] \n", "

\n", " - 요구사항 3. 각 단어들의 출현빈도를 사전형태로 저장하여 출력하시오.\n", " - 예: ['world', 'hello', 'python', 'world', '컴퓨터공학부', '지향'] ---> {'world': 2, 'hello': 1, 'python': 1, '컴퓨터공학부': 1, '지향': 1}\n", "

\n", " - 요구사항 4. 다음 5개의 사이트에 대한 단어 출현빈도 결과를 출력하시오.\n", " - http://cse.koreatech.ac.kr\n", " - https://www.koreatech.ac.kr\n", " - http://www.naver.com\n", " - http://www.daum.net\n", " - http://www.nytimes.com " ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 1 }