{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Assignment 4\n", "### [정보]\n", "#### 1) Due Date: 2019년 11월 22일 (금), 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": [ "##### [1번 문제] \n", "파일 s.txt 내의 다음 내용과 함께 아래 문제의 코드를 제시하시오. \n", ">pig ham
\n", ">cat dog
\n", ">ham bird
\n", ">dog pig
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "           - 1) 파일 s.txt을 읽어서 각 라인에 있는 첫 번째 단어(문자열) 자체들을 기준으로 라인별 정렬후 파일 s1.txt에 그 결과를 기록하는 코드를 작성하시오. 즉, 프로그램 수행 후 s1.txt에 있는 파일 내용은 다음과 같다.\n", ">cat dog
\n", ">dog pig
\n", ">ham bird
\n", ">pig ham
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "           - 2) 파일 s.txt을 읽어서 각 라인에 있는 두 번째 단어(문자열) 자체들을 기준으로 라인별 정렬후 파일 s2.txt에 그 결과를 기록하는 코드를 작성하시오. 즉, 프로그램 수행 후 s2.txt에 있는 파일 내용은 다음과 같다.\n", ">ham bird
\n", ">cat dog
\n", ">pig ham
\n", ">dog pig
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "           - 3) 파일 s.txt을 읽어서 각 라인들에 있는 모든 단어들을 순차적으로 다시 나열하되 각 라인에 세 개의 단어들이 오도록 하여 s3.txt에 기록하는 코드를 작성하시오. 즉, 프로그램 수행 후 s3.txt에 있는 파일 내용은 다음과 같다.\n", ">pig ham cat
\n", ">dog ham bird
\n", ">dog pig
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### [2번 문제] \n", "다음과 같은 조건들을 참고하여 회원 가입 및 로그인 프로그램을 작성하시오. \n", " - 1) 프로그램 시작 후 다음과 같은 메시지가 출력되어 1, 2, 3 중 하나의 값을 입력 받도록 한다.\n", ">Welcome to Our Service
\n", ">1. Sign Up
\n", ">2. Sign In
\n", ">3. Quit
\n", " - 2) 1을 선택하면 ID, Password, Name, School의 4가지 정보를 입력받아 파일에 저장하는 프로그램을 작성한다.\n", " - 2-1) 입력된 내용은 access.txt 라는 이름의 텍스트 파일 내에 저장된다. \n", " - 2-2) access.txt 파일의 각 라인에는 가입된 회원 각각의 정보가 \"[id]: [password], [name], [school]\" 형태로 저장된다.\n", " - 2-3) 즉, 가입 회원이 10명이면 access.txt 파일 내에 라인 수도 정확히 10개이다.\n", " - 2-4) 암호화 방식은 sha 모듈을 활용한다. sha 모듈 활용 방법은 본 문제의 마지막에 제시된 sha 활용 예를 참고한다.\n", " - 즉, access.txt 파일 내에 password 정보는 암호화 되어 저장되어야 한다.\n", " - 2-5) 회원 정보를 입력 받을 때 id를 입력 받은 직후 access.txt를 확인하여 이미 존재하는 id가 입력되었다면 다음 메시지를 출력하고 id 정보를 다시 입력받는다.\n", " - Sorry, the entered ID is already used.\n", " - 3) 2를 선택하면 ID, Password의 2가지 정보를 입력받는 프로그램을 작성한다.\n", " - 3-1) 입력된 ID 정보가 access.txt에 존재하지 않으면 다음과 같은 메시지를 출력하고 다시 입력받는다.\n", " - Sorry, you are not a registered member.\n", " - 3-2) 입력된 ID가 올바르게 존재하지만 Password 정보가 access.txt 파일에 있는 정보와 불일치하면 다음과 같은 메시지를 출력하고 Password를 다시 입력받는다.\n", " - Sorry, the entered password is not correct.\n", " - 이 때에도 사용자가 입력한 Password 정보와 함께 sha 모듈이 활용되어야 한다.\n", " - 3-3) 입력된 ID와 Password가 모두 올바르면 다음과 같은 메시지를 출력한다.\n", " - Hello [name]!\n", " - 위 [name]에는 access.txt에 기록되어 있는 name 정보를 출력한다.\n", " - 4) 3을 선택하면 프로그램이 끝난다.\n", " - [참고] sha 모듈 활용 예" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "import sha\n", "password_plain = \"12345678\"\n", "password_encrypted = sha.new(password_plain).hexdigest()\n", "print password_encrypted\n", "\n", "# import hashlib\n", "# hasher = hashlib.sha1()\n", "# password_plain = 'ripemd160'\n", "# password_encrypted = hashlib.new(password_plain)\n", "# password_encrypted.hexdigest()\n", "# print(password_encrypted)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### [3번 문제]\n", "range() 함수와 유사한 frange() 함수를 다음 조건을 참고하여 만드시오.\n", " - 1) frange()의 인자 구성은 다음과 같이 range와 동일하지만 각 인수들은 음수를 받지 않는다고 가정한다.\n", " > range(stop)
\n", " > range(start, stop[, step])
\n", " - 2) frange() 함수의 인자에 대한 기본 시작(start) 값은 0.0이고, 기본 단계(step) 값은 0.1이다. \n", " - 3) frange 사용 예\n", " - 3-1) frange(0.5)\n", " - [0.0, 0.1, 0.2, 0.3, 0.4]\n", " - 3-2) frange(1.0, 2.0)\n", " - [1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9]\n", " - 3-3) frange(2.2, 4.0, 0.5)\n", " - [2.2, 2.7, 3.2, 3.7]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### [4번 문제] \n", "가변인수를 받는 함수 sum()을 다음과 같은 조건을 참고하여 구현하시오\n", "- sum() 사용 예 \n", " - sum()\n", " - 0\n", " - sum(1, 2)\n", " - 3\n", " - sum(1, 2, 3, 4, 5)\n", " - 15\n", " - sum(1, 5, 7, 2, -10)\n", " - 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### [5번 문제] \n", "여러 단어로 이루어진 문자열을 입력받아 각 단어의 첫글자로 이루어진 단어를 대문자로 출력하는 myinitial() 함수를 다음 조건을 참고하여 작성하시오.\n", "- 1) 다음에 제시되는 함수들을 모두 이용해야 한다. \n", " - split\n", " - map\n", " - join\n", "- 2) myinitial() 함수 사용 예\n", " - myinitial(\"as soon as possible\")\n", " - ASAP" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### [6번 문제]\n", "음이 아닌 정수 n를 입력받으면 n! (factorial)을 계산하는 myfact() 함수를 재귀적 함수로 구현하시오.\n", "- [옵션] 참을 수 있는 정도 만큼의 수행시간을 직접 기다려보면서 n을 늘려보도록 합시다. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### [7번 문제] \n", "(서술형) import string 과 from string import * 의 차이점을 설명하시오." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### [8번 문제] \n", "이전 Assignment 3의 마지막 문제는 웹 URL로 지정된 웹페이지를 문자열로 가져와 모든 HTML 태그 및 CSS와 Javascript를 제외한 순수 텍스트를 얻어내고 그 안에 존재하는 단어를 추출하여 각 단어들에 대해 출현빈도를 사전형태({'world': 2, 'hello': 1, 'python': 1})로 저장하여 출력하는 것이었다. 이번에는 Assignment 3를 확장하여 다음과 같은 조건을 만족하도록 구현하시오.\n", " - 1) 다음 사이트에서 제시되는 불용어 (Stop words)를 참고하여 이전 숙제에서 구성했던 단어 사전에서 불용어들을 모두 제거하는 코드를 추가하시오.\n", " - 영어 불용어: http://www.lextek.com/manuals/onix/stopwords1.html\n", " - 한글 불용어: https://raw.githubusercontent.com/stopwords-iso/stopwords-ko/master/stopwords-ko.txt\n", " - 2) 각 URL로 지정된 웹페이지의 HTML 소스를 파일로 저장하시오. \n", " - URL이 http://URL 이라면 파일명은 URL.html 이다. \n", " - 예: URL이 http://www.cnn.com 이라면 파일명은 www.cnn.com.html 이다. \n", " - 3) 단어의 출현빈도가 담긴 사전 객체를 위 HTML 소스 파일과 동일한 폴더에 파일로 저장하시오.\n", " - 파일입출력 (E-learning 13주차) 마지막에 학습한 pickle 모듈을 활용하시오. \n", " - URL이 http://URL 이라면 사전 객체를 담고 있는 파일명은 URL.words_frequency.pickle 이다.\n", " - 예: URL이 http://www.cnn.com 이라면 파일명은 www.cnn.com.words_frequency.pickle 이다.\n", " - 4) 최소 5개 이상의 웹 사이트 각각에 대한 HTML 소스 파일과 단어 출현빈도 파일을 저장하시오. \n", " - 즉, 5개의 웹 사이트에 대해 총 10개의 파일을 동일한 폴더에 생성하시오.\n", " - [주의] 가능하면 웹사이트에 단어들이 많고 다루는 주제가 서로 다른 웹 사이트들로 선정하는 것 추천\n", " - 5) 위 문제에서 저장한 모든 pickle 파일들을 객체로 다시 로드하여 본인이 저장하여 분석한 사이트들 각각에 대해서 가장 많이 출현한 단어 3개씩를 뽑아 제시하시오. \n", " - 반드시 pickle 모듈로 저장한 5개 이상의 pickle 파일들을 다시 5개 이상의 사전 객체로 로드 하는 코드가 추가되어야 함\n", " - 6) 간단한 검색엔진 코딩 (Like Google!!!)\n", " - 사용자에게 임의의 검색어 (하나 또는 여러 단어로 구성) 를 입력받으시오.\n", " - 예: \n", " - 대한민국\n", " - 컴퓨터 공학\n", " - 맛있는 음식\n", " - 파이썬\n", " - 한기대 장점\n", " - 입력받은 검색어들에 대해서도 1)에서 제시하는 방법처럼 불용어 처리를 하여 정리\n", " - 입력 받은 검색어와 유사도(Similarity)가 높은 웹 사이트 기준으로 위 4)에서 미리 지정해 놓은 5개 이상의 웹 사이트 URL들을 일렬로 나열하여 출력하시오.\n", " - 검색어와 웹 사이트 간의 유사도는 본인이 스스로 정하시오.\n", " - 유사도를 정하는 최소한의 기준은 단어 출현 빈도를 기반으로 해야 하며, 이외의 본인이 생각하는 방안이 있으면 함께 사용해도 됨.\n", " - 유사도가 높은 웹 사이트가 상위에 출력되어야 함 (즉, 유사도 기준 내림 차순)\n", " - 유사도가 동일한 웹 사이트들에 대해서는 임의 배치함.\n", " - 7) [주의] 필수사항\n", " - 위에서 만든 검색엔진 코딩은 매우 간단한 것이라 부족한 점이 많이 존재한다.\n", " - 본인이 생각하기에 상업적인 완성도 높은 검색 로봇/엔진이 되려면 어떤 기능들이 추가적으로 구현되어야 할지 최소 1가지 이상 제시하시오. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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 }