├── .gitignore ├── README.md ├── _config.yml ├── data ├── credit_sample.txt ├── girls.csv ├── mathematics_wiki.txt └── sms_data.txt ├── img ├── ROC.jpg ├── SVM_optimize.png ├── adjMat.png ├── adjlist.png ├── anaconda.png ├── bagging.png ├── beeline_logo.jpg ├── binsearch.png ├── boosting_overfitting.png ├── bubblepass.png ├── classifiers.png ├── confusion_matrix.png ├── contingency.png ├── decision_tree1.png ├── decision_tree2.gif ├── decision_tree3.png ├── decision_tree4.png ├── decision_tree5.png ├── deck.png ├── digraph.png ├── dijkstra.png ├── dir_tree.png ├── fig_2_1_2_1.png ├── fig_2_1_2_2.gif ├── fig_2_1_2_3.png ├── fig_2_1_2_4.png ├── fig_2_1_2_5.png ├── figure_2_1_3_1.png ├── first_tree.dot ├── first_tree.gif ├── first_tree.pdf ├── firstsplit.png ├── for_cycle.png ├── forest.png ├── gboost_cv-test_acc_car.png ├── girl1.jpg ├── girl2.jpg ├── girl3.jpg ├── girl4.jpg ├── girl5.jpg ├── girl6.jpg ├── girl7.jpg ├── git_add.png ├── git_branch_develop.png ├── git_checkout_file.png ├── git_conflict.png ├── git_conflict_resolved.png ├── git_push.png ├── github_commits.png ├── github_new_repo.png ├── heap1.png ├── heapadd.jpg ├── hotpotato.png ├── insertionsort.png ├── intro │ ├── curl.png │ ├── text-sent-request.png │ ├── text-sent-response.png │ ├── vk-browser.png │ ├── vk2.png │ └── vk3.png ├── ipython-logo.jpg ├── ipython_ex.png ├── kNN.png ├── kassa_bills.paint ├── kassa_bills.png ├── kassa_paid_emails_table.png ├── kassa_payments.png ├── kernel_trick.jpeg ├── kfold.jpg ├── knn_cv-test_acc_car_insurance.png ├── linalg_task.png ├── linalg_task2.png ├── linalg_task3.png ├── link.png ├── locally_best_tree.gif ├── logit.png ├── matplotlib-logo.png ├── mccme_task.png ├── mergesortB.png ├── mlclass_logo.jpg ├── motivation.png ├── msortA.png ├── namequeue.png ├── numpy-logo.png ├── operations.png ├── operations_priority.png ├── outlier_detection.png ├── paid_emails_output.png ├── pandas-logo.png ├── partitionA.png ├── partitionB.png ├── plot_pca_3d_1.png ├── plot_pca_3d_2.png ├── prime-sieve.png ├── pycharm_screen.png ├── python_theme.png ├── qsort-recur1.png ├── qsort-recur2.png ├── qsort_tree.gif ├── scikit-learn-flow-chart.jpg ├── scikit-learn-logo.png ├── scipy-logo.png ├── seqsearch.png ├── shellsortA.png ├── shellsortB.png ├── smalltree.png ├── smart_git.png ├── svm_linear2.png ├── svm_linear3.png ├── swap.png ├── task_5B.png ├── timsort_wiki.png ├── tree-partition.png ├── tree-simple.png ├── treedef1.png ├── treedef2.png ├── trigonometry.png └── while_cycle.png ├── index.ipynb ├── ipython_demonstration ├── Playboy_girls_outlier_detection.ipynb └── ipython_decision_tree.ipynb ├── python_lesson1_tools ├── lesson1_optional_github.ipynb └── lesson1_part1_python_intro_tools.ipynb ├── python_lesson2_python_basics ├── lesson2_part1_data_types.ipynb ├── lesson2_part2_numbers.ipynb ├── lesson2_part3_strings.ipynb ├── lesson2_part4_conditions.ipynb └── lesson2_part5_while_for.ipynb ├── python_lesson3_data_structures1 ├── lesson3_part1_lists_tuples.ipynb ├── lesson3_part2_search_sort.ipynb ├── lesson3_part2_sorting.ipynb ├── lesson3_part3_string_algo.ipynb ├── lesson3_part4_dictionaries.ipynb ├── lesson3_part5_reading_file_to_dict.ipynb └── lesson3_part6_sets.ipynb ├── python_lesson4_data_structures2 ├── lesson4_part1_data_structures.ipynb └── lesson4_part2_graph_algo.ipynb ├── python_lesson5_func_recursion ├── lesson5_part1_functions.ipynb └── lesson5_part2_recursion.ipynb ├── tasks ├── lesson2_tasks.ipynb ├── lesson2_tasks_solutions.ipynb ├── lesson3_tasks.ipynb ├── lesson3_tasks_solutions.ipynb ├── lesson4_tasks.ipynb ├── lesson4_tasks_solutions.ipynb ├── lesson5_tasks.ipynb └── lesson5_tasks_solutions.ipynb └── unstructured └── restful_api.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | *.DS_Store 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *,cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | 56 | # Sphinx documentation 57 | docs/_build/ 58 | 59 | # PyBuilder 60 | target/ 61 | 62 | #Ipython Notebook 63 | .ipynb_checkpoints 64 | 65 | # tutor's tasks 66 | *private/ 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Курс языка Python и базовых алгоритмов и структур данных 2 | ![](https://habrastorage.org/files/b63/833/7a8/b638337a8df741af84ea0cae4cf110f9.png) 3 | 4 | В курсе рассматриваются основы програмирования на языке Python, а также есть материал про базовые алгоритмы и структуры данных. 5 | 6 | Курс разработан в виде тетрадок Jupyter - это удобное средство представления материала с интерактивным выполнением кода. 7 | Инструкции по локальному развертыванию сервера Jupyter для использования тетрадок представлены в [тетрадке](https://github.com/Yorko/python_intro/blob/master/python_lesson1_tools/lesson1_part1_python_intro_tools.ipynb) с обзором средств разработки. 8 | 9 | [Начать курс →](https://github.com/Yorko/python_intro/blob/master/python_lesson1_tools/lesson1_part1_python_intro_tools.ipynb) 10 | 11 | ### Урок 1. Введение в Python и средства разработки. [Видео](https://youtu.be/JzhVk4gofpk) 12 | - Установка Anaconda и знакомство с интерпретатором Python 13 | - Обзор и настройка среды разработки PyCharm 14 | - IPython и Jupyter для воспроизводимых исследований 15 | - Введение в систему контроля версий git и веб-сервис GitHub 16 | - Обзор возможностей сборки библиотек Anaconda 17 | - Регистрация на сайте дистанционного курса по информатике 18 | 19 | ### Урок 2. Основы языка Python. [Видео](https://youtu.be/kAsWr3Vc4Zs) 20 | - Типы объектов языка Python 21 | - Основные операции с типами 22 | - Обзор стандартной библиотеки 23 | - Операторы, условные конструкции, циклы 24 | - Практика решения простейших задач 25 | 26 | ### Урок 3. Структуры данных I. [Видео](https://youtu.be/j1cl-91PIQ0) 27 | - Последовательности: строки, списки, кортежи 28 | - Алгоритмы поиска в одномерных списках 29 | - Обзор стандартной библиотеки 30 | - Методы сортировки одномерных списков 31 | - Алгоритмы на строках 32 | - Разбор распространенных задач на списки и строки 33 | 34 | ### Урок 4. Структуры данных II. [Видео](https://youtu.be/bDVbNhEHKaM) 35 | - Введение в продвинутые структуры данных 36 | - Словари 37 | - Стек, очередь, куча, дерево, граф 38 | - Поиск в глубину и поиск в ширину 39 | - Обзор классических алгоритмов на графах 40 | - Разбор задач на слова и множества. Задачи на стек и очередь 41 | 42 | ### Урок 5. Функции. Рекурсия. [Видео](https://youtu.be/zO07-fhJwBI) 43 | - Понятие функции, ее сигнатуры 44 | - Модули 45 | - Понятие индукции 46 | - Рекурсия 47 | - Парадигма "Разделяй и Властвуй" 48 | - Разбор практических задач на рекурсию 49 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-minimal -------------------------------------------------------------------------------- /data/credit_sample.txt: -------------------------------------------------------------------------------- 1 | lastname,age,debt,occupation 2 | Adrianov,25,30000,artist 3 | Belkin,42,4000,programmer 4 | Koltunov,32,100,sportsman 5 | Loptev,25,30000,artist 6 | Bobrov,42,4000,programmer 7 | Karelin,32,100,sportsman -------------------------------------------------------------------------------- /data/girls.csv: -------------------------------------------------------------------------------- 1 | Month,Year,Bust,Waist,Hips,Height,Weight December,1953,91,61,91,165,54 March,1954,86,61,89,168,54 July,1955,91,61,91,166,52 December,1955,91,61,91,166,52 July,1956,91,61,86,157,48 August,1956,94,61,91,170,55 October,1956,91,61,91,166,52 November,1956,99,56,91,160,58 December,1956,89,58,89,157,48 January,1957,91,64,91,165,54 March,1957,91,51,91,170,54 November,1957,86,56,84,157,44 May,1958,97,53,86,175,56 June,1958,102,51,91,165,54 November,1958,86,57,86,165,54 December,1958,86,61,86,169,54 February,1959,102,56,94,174,61 April,1959,91,61,91,165,57 May,1959,91,61,91,168,56 July,1959,91,61,91,160,48 September,1959,86,61,86,168,50 October,1959,99,64,94,173,59 November,1959,91,56,91,161,52 December,1959,89,51,89,163,50 February,1960,94,58,91,170,59 March,1960,94,61,91,173,57 April,1960,97,58,93,163,51 May,1960,91,58,91,165,57 June,1960,91,51,91,157,49 July,1960,94,56,89,165,50 August,1960,86,58,89,163,54 September,1960,97,51,89,157,48 October,1960,86,53,86,165,52 November,1960,84,46,81,157,45 December,1960,94,58,89,168,54 January,1961,94,53,91,165,50 February,1961,91,61,91,170,54 March,1961,94,56,91,163,53 April,1961,91,61,91,170,57 May,1961,91,56,89,160,49 June,1961,91,56,86,163,48 July,1961,89,58,89,175,57 September,1961,97,56,91,165,55 October,1961,97,61,94,163,54 November,1961,91,56,89,170,54 December,1961,89,56,89,169,52 January,1962,97,56,86,165,51 February,1962,91,58,89,163,53 March,1962,99,58,89,155,47 April,1962,86,53,86,157,46 May,1962,94,58,91,174,57 June,1962,91,56,91,164,53 July,1962,99,58,99,170,59 August,1962,99,58,89,165,54 September,1962,91,46,86,152,45 October,1962,91,64,91,168,57 November,1962,99,56,91,166,56 December,1962,91,51,86,157,46 January,1963,86,56,84,155,45 February,1963,97,56,91,165,54 March,1963,97,56,91,170,57 April,1963,94,61,91,174,62 May,1963,91,58,91,163,50 June,1963,86,58,86,168,52 July,1963,99,61,91,165,56 August,1963,86,56,89,155,52 September,1963,89,56,89,160,50 October,1963,94,66,94,183,68 November,1963,91,53,89,168,54 December,1963,97,56,94,163,54 January,1964,89,56,89,157,49 February,1964,91,53,91,168,48 March,1964,86,64,86,168,54 April,1964,94,61,91,165,54 May,1964,91,58,91,165,53 June,1964,86,58,86,159,50 July,1964,99,56,89,157,50 August,1964,89,56,89,163,51 September,1964,91,58,91,170,54 October,1964,104,64,97,168,66 November,1964,89,58,89,160,53 December,1964,91,61,91,163,51 January,1965,89,56,86,165,50 February,1965,91,58,91,165,52 March,1965,91,58,91,174,59 April,1965,86,51,86,150,44 May,1965,91,56,91,160,48 June,1965,86,56,89,166,54 July,1965,91,58,89,165,54 August,1965,86,56,91,168,52 September,1965,86,48,86,165,51 October,1965,91,61,91,168,53 November,1965,89,56,89,170,54 December,1965,94,58,91,173,52 January,1966,91,56,86,160,45 February,1966,97,58,91,163,54 March,1966,86,48,89,157,48 April,1966,89,56,90,150,44 May,1966,94,61,94,164,54 June,1966,86,56,85,152,45 July,1966,86,58,86,165,49 September,1966,94,61,93,170,59 October,1966,99,61,91,165,57 November,1966,89,58,89,173,60 December,1966,89,56,89,160,48 January,1967,89,56,86,157,45 February,1967,89,51,86,163,49 March,1967,99,61,91,157,50 April,1967,89,58,86,152,45 May,1967,89,58,89,163,49 June,1967,99,62,91,168,58 July,1967,93,51,89,168,53 August,1967,86,53,84,157,44 September,1967,91,53,89,165,49 October,1967,102,64,89,178,61 November,1967,90,58,86,168,52 December,1967,86,58,86,152,45 January,1968,89,58,91,165,54 February,1968,90,56,89,170,52 March,1968,97,58,89,164,50 April,1968,89,61,89,168,54 May,1968,84,53,89,157,42 June,1968,86,55,86,163,49 July,1968,86,58,86,165,45 August,1968,91,56,89,163,50 September,1968,91,61,89,163,55 October,1968,86,56,86,165,49 November,1968,91,61,91,165,54 December,1968,99,61,91,160,54 January,1969,91,61,94,170,59 February,1969,93,53,91,168,54 March,1969,91,61,86,164,54 April,1969,89,58,86,163,48 May,1969,91,61,89,163,50 June,1969,90,61,86,160,50 July,1969,91,61,86,157,48 August,1969,91,62,91,160,51 September,1969,91,58,88,160,50 October,1969,86,58,91,163,53 November,1969,89,58,91,168,52 December,1969,86,58,86,157,48 January,1970,94,61,91,163,54 February,1970,89,58,89,160,52 March,1970,89,61,89,170,54 April,1970,93,61,89,168,54 May,1970,91,56,86,164,48 June,1970,89,61,89,165,50 July,1970,89,64,91,168,54 August,1970,89,61,91,168,52 September,1970,89,61,91,166,54 October,1970,91,64,91,166,52 November,1970,99,66,94,175,64 December,1970,95,62,89,165,54 January,1971,91,57,86,171,49 February,1971,86,58,86,163,49 March,1971,94,64,91,160,54 April,1971,90,61,90,171,57 May,1971,90,58,90,173,56 June,1971,90,58,90,166,53 July,1971,81,58,85,163,47 August,1971,89,58,89,166,50 September,1971,94,56,89,170,54 October,1971,91,61,91,180,60 November,1971,91,64,86,164,54 December,1971,94,61,91,165,54 January,1972,91,61,89,173,54 February,1972,91,64,91,164,55 March,1972,93,60,89,160,49 April,1972,86,56,86,173,52 May,1972,89,56,89,170,50 June,1972,91,61,91,170,55 July,1972,89,64,89,168,53 August,1972,90,58,88,157,48 September,1972,98,64,99,185,64 October,1972,102,56,94,173,57 November,1972,86,66,91,168,50 December,1972,91,58,91,163,52 January,1973,97,56,91,163,49 February,1973,86,56,86,165,47 March,1973,91,58,91,166,51 April,1973,89,61,89,173,57 May,1973,89,58,89,163,48 June,1973,89,58,89,157,47 July,1973,91,58,89,168,50 August,1973,89,58,89,170,54 September,1973,97,61,91,173,57 October,1973,94,61,91,170,57 November,1973,94,62,91,159,49 December,1973,97,58,93,173,57 January,1974,89,58,89,173,54 February,1974,91,61,86,165,50 March,1974,91,61,91,160,51 April,1974,91,64,91,174,57 May,1974,99,61,91,170,59 June,1974,89,61,86,168,52 July,1974,94,56,89,168,52 September,1974,86,58,89,166,51 October,1974,91,61,91,171,56 November,1974,88,61,89,177,54 December,1974,97,66,95,178,65 January,1975,94,56,89,170,54 February,1975,94,61,91,165,50 March,1975,91,61,91,169,53 April,1975,91,58,89,168,52 May,1975,89,58,86,168,48 June,1975,91,58,93,168,54 July,1975,91,57,89,160,49 August,1975,91,61,89,173,57 September,1975,89,61,86,164,50 October,1975,86,58,86,170,47 November,1975,99,61,91,168,57 December,1975,91,61,89,168,50 January,1976,91,64,91,170,58 February,1976,89,64,94,165,54 March,1976,86,64,89,166,50 April,1976,91,64,91,166,54 May,1976,86,61,94,173,57 June,1976,91,61,86,168,54 July,1976,86,56,88,164,46 August,1976,89,61,89,168,45 September,1976,89,58,86,160,48 October,1976,93,64,91,173,54 November,1976,89,58,89,165,52 December,1976,89,58,89,173,54 January,1977,94,61,94,173,61 March,1977,85,58,89,165,51 April,1977,89,61,89,173,54 May,1977,97,64,91,173,59 June,1977,91,56,81,159,48 July,1977,86,61,89,168,50 August,1977,91,58,81,168,51 September,1977,89,61,91,163,52 October,1977,86,62,86,168,54 November,1977,91,58,91,178,57 December,1977,91,61,89,173,54 January,1978,91,61,89,173,54 February,1978,86,61,89,163,50 March,1978,86,61,89,168,50 April,1978,89,61,89,165,52 May,1978,86,58,86,170,50 June,1978,86,56,86,155,47 July,1978,81,56,81,168,43 August,1978,91,61,91,170,53 September,1978,91,58,86,157,46 October,1978,89,58,89,173,53 November,1978,91,66,91,170,53 December,1978,91,61,91,171,54 January,1979,94,61,86,170,50 February,1979,89,58,89,163,49 March,1979,94,61,84,160,47 April,1979,86,56,81,163,43 May,1979,86,61,86,165,49 June,1979,89,58,86,164,50 July,1979,90,62,86,170,54 August,1979,91,61,91,175,56 September,1979,85,56,86,170,48 October,1979,84,58,84,168,47 November,1979,86,58,86,170,50 December,1979,89,58,86,170,50 January,1980,97,61,91,173,52 February,1980,90,64,90,166,54 March,1980,89,64,91,174,57 April,1980,88,61,85,165,50 May,1980,94,61,89,175,59 June,1980,86,66,89,157,48 July,1980,89,56,86,170,47 August,1980,91,64,89,173,54 September,1980,86,56,86,170,52 October,1980,86,61,89,168,48 November,1980,86,58,84,170,48 December,1980,91,61,91,175,54 January,1981,97,66,94,165,56 February,1981,91,58,86,173,54 March,1981,91,61,91,173,56 April,1981,89,56,86,160,47 May,1981,91,61,91,165,48 June,1981,97,66,94,173,58 July,1981,91,61,86,171,54 August,1981,95,58,86,163,49 September,1981,91,61,91,173,54 October,1981,91,61,91,170,54 November,1981,91,64,91,178,58 December,1981,91,64,91,160,52 January,1982,94,56,86,160,46 February,1982,81,58,86,173,51 March,1982,89,58,84,168,48 April,1982,86,58,86,154,44 May,1982,91,51,86,165,48 June,1982,86,56,84,160,46 July,1982,91,56,91,168,52 August,1982,86,56,86,163,46 September,1982,86,56,89,170,52 October,1982,86,53,81,173,48 November,1982,86,61,86,175,57 December,1982,86,58,86,175,53 January,1983,91,56,89,170,54 February,1983,89,58,86,163,46 March,1983,86,56,81,157,47 April,1983,86,56,84,163,48 May,1983,86,58,86,165,49 June,1983,94,61,94,173,57 July,1983,89,56,86,165,49 August,1983,86,61,86,160,45 September,1983,89,58,86,165,48 October,1983,89,61,89,173,54 November,1983,86,56,86,173,51 December,1983,89,58,84,168,45 January,1984,89,56,86,173,52 February,1984,91,64,89,175,54 March,1984,94,61,89,170,54 April,1984,86,56,81,165,49 May,1984,91,58,81,165,49 June,1984,91,56,86,170,50 July,1984,89,58,86,170,53 August,1984,91,61,91,174,52 September,1984,91,64,89,160,48 October,1984,89,53,86,165,46 November,1984,102,64,91,173,57 December,1984,94,58,89,170,54 January,1985,91,61,89,173,54 February,1985,86,58,86,175,53 March,1985,94,61,89,170,48 April,1985,86,58,86,170,52 May,1985,89,61,89,175,55 June,1985,86,56,86,170,50 July,1985,91,56,81,170,51 August,1985,95,61,89,170,56 September,1985,86,61,86,165,48 October,1985,91,64,91,174,57 December,1985,89,60,89,170,54 January,1986,91,56,86,165,47 February,1986,91,61,89,170,52 March,1986,89,58,89,168,54 April,1986,86,53,86,170,49 May,1986,86,61,86,168,49 June,1986,86,61,86,165,48 July,1986,89,61,89,169,50 August,1986,91,61,86,170,52 September,1986,86,58,81,170,50 October,1986,89,58,86,168,49 November,1986,91,58,89,178,58 December,1986,86,53,84,170,47 January,1987,89,58,86,165,48 February,1987,97,61,91,173,59 April,1987,81,58,86,155,44 May,1987,86,61,89,173,54 June,1987,89,53,84,170,49 July,1987,89,58,89,170,52 August,1987,81,56,86,157,45 September,1987,91,61,91,170,54 October,1987,91,61,89,165,48 November,1987,86,58,85,165,48 December,1987,89,61,86,180,58 January,1988,91,61,91,175,55 February,1988,86,56,84,165,46 March,1988,89,64,89,173,53 April,1988,91,64,89,173,57 May,1988,91,61,89,170,54 June,1988,89,61,89,170,50 July,1988,91,56,81,169,49 September,1988,91,62,86,160,48 October,1988,91,53,81,160,43 November,1988,89,61,89,174,56 December,1988,89,61,89,168,52 January,1989,89,61,89,178,55 February,1989,94,61,89,166,53 March,1989,94,62,91,178,57 April,1989,97,61,86,170,53 May,1989,91,58,89,170,52 June,1989,91,61,86,175,54 July,1989,86,61,81,165,49 August,1989,97,61,86,170,50 September,1989,89,58,86,164,47 October,1989,91,53,81,163,48 November,1989,91,58,81,168,51 December,1989,94,61,89,173,54 January,1990,91,58,89,170,52 February,1990,91,56,86,170,48 March,1990,86,58,86,168,50 April,1990,94,61,91,175,54 May,1990,86,61,91,173,57 June,1990,89,61,89,174,58 July,1990,91,61,86,163,51 August,1990,86,61,89,168,51 September,1990,91,56,84,166,50 October,1990,91,61,86,168,54 November,1990,86,61,81,168,51 December,1990,97,61,86,180,57 January,1991,91,58,89,170,52 February,1991,91,58,66,168,50 March,1991,86,56,81,165,50 April,1991,86,58,86,173,49 May,1991,91,61,86,173,54 June,1991,97,69,97,175,59 July,1991,86,58,89,168,51 August,1991,86,56,86,160,48 September,1991,91,64,91,178,61 October,1991,86,56,89,168,50 November,1991,86,58,86,170,49 December,1991,89,61,91,178,54 January,1992,91,58,86,165,45 February,1992,91,64,89,174,56 March,1992,86,58,86,168,53 April,1992,91,61,91,170,54 May,1992,91,66,97,180,64 June,1992,91,66,89,168,52 July,1992,89,64,94,174,60 August,1992,86,61,86,174,56 September,1992,86,56,86,174,54 October,1992,91,64,91,168,54 November,1992,86,60,86,175,52 December,1992,91,61,89,168,54 January,1993,91,58,84,170,50 February,1993,86,61,89,178,54 March,1993,86,61,86,173,52 April,1993,91,58,86,168,49 May,1993,86,61,86,174,54 June,1993,91,64,91,173,57 July,1993,97,66,86,170,54 August,1993,81,56,81,163,45 September,1993,86,61,88,174,54 October,1993,97,61,86,170,54 November,1993,97,53,86,171,50 December,1993,86,66,91,180,59 January,1994,91,61,89,175,56 February,1994,86,61,89,180,57 March,1994,91,58,91,173,54 April,1994,91,61,91,178,59 May,1994,86,58,86,163,48 June,1994,86,61,89,175,56 July,1994,91,61,91,180,59 August,1994,81,58,84,157,43 September,1994,86,61,89,168,48 October,1994,91,58,86,175,54 November,1994,86,64,89,180,61 December,1994,86,56,86,168,49 January,1995,86,61,86,168,50 February,1995,86,53,85,157,47 March,1995,86,61,91,178,59 April,1995,86,61,89,178,56 May,1995,86,58,86,164,51 June,1995,86,61,84,170,48 July,1995,86,58,84,170,48 August,1995,88,61,89,170,56 September,1995,86,56,86,165,50 October,1995,86,58,86,173,50 November,1995,86,61,86,165,51 December,1995,86,61,86,175,53 January,1996,91,61,86,173,56 February,1996,86,61,86,163,49 March,1996,91,64,86,173,54 April,1996,86,61,84,168,52 May,1996,84,56,84,163,44 June,1996,86,60,86,175,56 July,1996,86,56,86,163,50 August,1996,86,61,86,165,47 September,1996,86,61,86,173,54 October,1996,86,56,86,168,46 November,1996,86,64,89,170,54 December,1996,89,64,94,178,63 January,1997,91,56,89,173,54 February,1997,91,61,91,177,57 March,1997,91,61,86,165,52 April,1997,86,55,80,160,43 May,1997,86,64,89,170,54 June,1997,86,61,86,168,52 July,1997,86,61,91,171,54 August,1997,91,61,81,170,57 September,1997,91,58,89,173,54 October,1997,91,61,91,177,55 November,1997,91,61,91,173,56 December,1997,86,61,86,173,57 January,1998,91,61,89,173,53 February,1998,86,64,91,175,57 March,1998,89,61,89,170,54 April,1998,86,58,86,171,57 May,1998,91,61,89,164,49 June,1998,86,61,86,173,57 July,1998,86,61,86,174,54 August,1998,86,58,85,159,43 September,1998,86,58,81,165,50 October,1998,86,58,86,165,51 November,1998,91,64,89,170,52 December,1998,86,89,86,173,52 January,1999,86,58,86,165,50 February,1999,86,61,89,175,54 March,1999,86,58,86,170,49 April,1999,86,57,88,180,58 May,1999,91,53,86,170,54 June,1999,91,61,86,168,53 July,1999,86,61,86,173,54 August,1999,97,71,97,173,64 September,1999,86,61,84,173,53 October,1999,81,58,88,165,51 November,1999,86,61,89,165,51 December,1999,86,61,89,171,54 January,2000,81,58,86,170,50 February,2000,89,58,84,163,48 March,2000,81,61,81,165,48 April,2000,89,61,86,170,53 May,2000,91,62,86,173,52 June,2000,86,61,91,168,51 July,2000,91,58,89,175,54 August,2000,86,58,84,179,57 September,2000,86,66,84,174,52 October,2000,91,61,91,165,52 November,2000,91,61,86,165,49 December,2000,86,66,91,188,61 January,2001,89,62,91,177,54 February,2001,86,53,84,168,45 March,2001,86,64,90,163,51 April,2001,81,56,81,163,47 May,2001,86,64,89,175,57 June,2001,91,56,81,168,50 July,2001,86,61,86,168,48 August,2001,81,56,81,160,48 September,2001,86,61,89,165,51 October,2001,86,64,86,160,50 November,2001,86,61,89,173,54 December,2001,86,61,86,173,53 January,2002,86,69,89,163,50 February,2002,86,58,89,178,57 March,2002,86,61,86,165,52 April,2002,86,56,76,163,44 May,2002,86,61,86,170,55 June,2002,81,58,84,160,47 July,2002,86,61,89,175,57 August,2002,86,61,84,165,49 September,2002,86,61,91,178,57 October,2002,86,66,84,168,53 November,2002,86,64,86,173,59 December,2002,91,64,89,170,57 January,2003,86,61,86,165,50 February,2003,86,61,86,173,54 March,2003,86,61,89,170,57 April,2003,86,61,69,173,54 May,2003,86,61,89,173,52 June,2003,86,61,86,163,50 July,2003,86,61,86,170,52 August,2003,86,64,91,170,57 September,2003,86,64,89,178,59 October,2003,86,61,86,173,52 November,2003,91,61,91,173,57 December,2003,91,64,91,173,56 January,2004,86,64,86,157,49 February,2004,86,61,89,170,54 March,2004,86,56,86,163,47 April,2004,86,64,89,177,58 May,2004,81,61,86,163,50 June,2004,86,57,86,163,49 July,2004,86,61,84,170,53 August,2004,86,64,86,166,50 September,2004,86,61,86,165,48 October,2004,86,58,84,165,46 November,2004,86,64,86,168,54 December,2004,86,58,89,168,52 January,2005,91,61,61,165,50 February,2005,91,71,91,168,58 March,2005,91,61,91,165,53 April,2005,86,61,86,160,48 May,2005,86,58,86,170,51 June,2005,86,61,86,168,50 July,2005,91,64,91,175,59 August,2005,86,61,86,173,52 September,2005,91,64,91,168,54 October,2005,86,61,84,173,53 November,2005,86,58,89,163,50 December,2005,86,61,86,165,52 January,2006,86,64,91,168,54 February,2006,81,61,86,165,50 March,2006,91,61,91,168,52 April,2006,86,64,86,173,52 May,2006,86,61,86,168,53 June,2006,86,58,86,163,48 July,2006,81,61,79,160,47 August,2006,81,58,84,165,49 September,2006,91,66,91,168,50 October,2006,86,61,86,175,59 November,2006,86,58,81,165,50 December,2006,86,61,86,175,54 January,2007,86,61,89,175,53 February,2007,86,61,86,160,52 March,2007,86,61,86,173,52 April,2007,84,64,89,168,52 May,2007,86,58,86,173,52 June,2007,86,61,89,170,51 July,2007,86,61,86,170,52 August,2007,84,61,86,168,49 September,2007,86,58,84,173,53 October,2007,81,69,91,163,50 November,2007,86,69,86,174,54 December,2007,86,58,89,178,56 January,2008,89,66,89,175,56 February,2008,81,61,89,170,52 March,2008,81,53,89,163,49 May,2008,81,61,89,170,51 June,2008,86,64,91,170,54 July,2008,86,61,86,165,53 August,2008,86,61,86,157,48 September,2008,86,64,91,170,52 October,2008,86,61,86,165,52 November,2008,86,53,81,168,49 December,2008,86,64,89,173,52 January,2009,86,60,91,170,55 -------------------------------------------------------------------------------- /data/mathematics_wiki.txt: -------------------------------------------------------------------------------- 1 | Mathematics is the study of numbers, quantity, space, structure, and change. Mathematics is used throughout the world as an essential tool in many fields, including natural science, engineering, medicine, and the social sciences. Applied mathematics, the branch of mathematics concerned with application of mathematical knowledge to other fields, inspires and makes use of new mathematical discoveries and sometimes leads to the development of entirely new mathematical disciplines, such as statistics and game theory. Mathematicians also engage in pure mathematics, or mathematics for its own sake, without having any application in mind. There is no clear line separating pure and applied mathematics, and practical applications for what began as pure mathematics are often discovered. -------------------------------------------------------------------------------- /img/ROC.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/ROC.jpg -------------------------------------------------------------------------------- /img/SVM_optimize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/SVM_optimize.png -------------------------------------------------------------------------------- /img/adjMat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/adjMat.png -------------------------------------------------------------------------------- /img/adjlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/adjlist.png -------------------------------------------------------------------------------- /img/anaconda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/anaconda.png -------------------------------------------------------------------------------- /img/bagging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/bagging.png -------------------------------------------------------------------------------- /img/beeline_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/beeline_logo.jpg -------------------------------------------------------------------------------- /img/binsearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/binsearch.png -------------------------------------------------------------------------------- /img/boosting_overfitting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/boosting_overfitting.png -------------------------------------------------------------------------------- /img/bubblepass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/bubblepass.png -------------------------------------------------------------------------------- /img/classifiers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/classifiers.png -------------------------------------------------------------------------------- /img/confusion_matrix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/confusion_matrix.png -------------------------------------------------------------------------------- /img/contingency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/contingency.png -------------------------------------------------------------------------------- /img/decision_tree1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/decision_tree1.png -------------------------------------------------------------------------------- /img/decision_tree2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/decision_tree2.gif -------------------------------------------------------------------------------- /img/decision_tree3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/decision_tree3.png -------------------------------------------------------------------------------- /img/decision_tree4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/decision_tree4.png -------------------------------------------------------------------------------- /img/decision_tree5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/decision_tree5.png -------------------------------------------------------------------------------- /img/deck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/deck.png -------------------------------------------------------------------------------- /img/digraph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/digraph.png -------------------------------------------------------------------------------- /img/dijkstra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/dijkstra.png -------------------------------------------------------------------------------- /img/dir_tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/dir_tree.png -------------------------------------------------------------------------------- /img/fig_2_1_2_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/fig_2_1_2_1.png -------------------------------------------------------------------------------- /img/fig_2_1_2_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/fig_2_1_2_2.gif -------------------------------------------------------------------------------- /img/fig_2_1_2_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/fig_2_1_2_3.png -------------------------------------------------------------------------------- /img/fig_2_1_2_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/fig_2_1_2_4.png -------------------------------------------------------------------------------- /img/fig_2_1_2_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/fig_2_1_2_5.png -------------------------------------------------------------------------------- /img/figure_2_1_3_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/figure_2_1_3_1.png -------------------------------------------------------------------------------- /img/first_tree.dot: -------------------------------------------------------------------------------- 1 | digraph Tree { 2 | 0 [label="X[1] <= 2450.0000\ngini = 0.499453923585\nsamples = 817", shape="box"] ; 3 | 1 [label="X[1] <= 1250.0000\ngini = 0.398632164688\nsamples = 382", shape="box"] ; 4 | 0 -> 1 ; 5 | 2 [label="X[1] <= 550.0000\ngini = 0.27584120983\nsamples = 230", shape="box"] ; 6 | 1 -> 2 ; 7 | 3 [label="X[0] <= 9.5000\ngini = 0.16406879871\nsamples = 122", shape="box"] ; 8 | 2 -> 3 ; 9 | 4 [label="X[0] <= 4.5000\ngini = 0.15632989992\nsamples = 117", shape="box"] ; 10 | 3 -> 4 ; 11 | 5 [label="gini = 0.1680\nsamples = 108\nvalue = [ 98. 10.]", shape="box"] ; 12 | 4 -> 5 ; 13 | 6 [label="gini = 0.0000\nsamples = 9\nvalue = [ 9. 0.]", shape="box"] ; 14 | 4 -> 6 ; 15 | 7 [label="X[1] <= 400.0000\ngini = 0.32\nsamples = 5", shape="box"] ; 16 | 3 -> 7 ; 17 | 8 [label="gini = 0.0000\nsamples = 3\nvalue = [ 3. 0.]", shape="box"] ; 18 | 7 -> 8 ; 19 | 9 [label="gini = 0.5000\nsamples = 2\nvalue = [ 1. 1.]", shape="box"] ; 20 | 7 -> 9 ; 21 | 10 [label="X[0] <= 9.5000\ngini = 0.375\nsamples = 108", shape="box"] ; 22 | 2 -> 10 ; 23 | 11 [label="X[1] <= 950.0000\ngini = 0.352653061224\nsamples = 105", shape="box"] ; 24 | 10 -> 11 ; 25 | 12 [label="gini = 0.4163\nsamples = 44\nvalue = [ 31. 13.]", shape="box"] ; 26 | 11 -> 12 ; 27 | 13 [label="gini = 0.2956\nsamples = 61\nvalue = [ 50. 11.]", shape="box"] ; 28 | 11 -> 13 ; 29 | 14 [label="gini = 0.0000\nsamples = 3\nvalue = [ 0. 3.]", shape="box"] ; 30 | 10 -> 14 ; 31 | 15 [label="X[1] <= 1550.0000\ngini = 0.492988227147\nsamples = 152", shape="box"] ; 32 | 1 -> 15 ; 33 | 16 [label="X[0] <= 3.0000\ngini = 0.472612041648\nsamples = 47", shape="box"] ; 34 | 15 -> 16 ; 35 | 17 [label="X[1] <= 1450.0000\ngini = 0.486749594375\nsamples = 43", shape="box"] ; 36 | 16 -> 17 ; 37 | 18 [label="gini = 0.5000\nsamples = 16\nvalue = [ 8. 8.]", shape="box"] ; 38 | 17 -> 18 ; 39 | 19 [label="gini = 0.4664\nsamples = 27\nvalue = [ 17. 10.]", shape="box"] ; 40 | 17 -> 19 ; 41 | 20 [label="gini = 0.0000\nsamples = 4\nvalue = [ 4. 0.]", shape="box"] ; 42 | 16 -> 20 ; 43 | 21 [label="X[0] <= 9.5000\ngini = 0.497777777778\nsamples = 105", shape="box"] ; 44 | 15 -> 21 ; 45 | 22 [label="X[0] <= 7.0000\ngini = 0.496182486568\nsamples = 103", shape="box"] ; 46 | 21 -> 22 ; 47 | 23 [label="gini = 0.4976\nsamples = 101\nvalue = [ 54. 47.]", shape="box"] ; 48 | 22 -> 23 ; 49 | 24 [label="gini = 0.0000\nsamples = 2\nvalue = [ 2. 0.]", shape="box"] ; 50 | 22 -> 24 ; 51 | 25 [label="gini = 0.0000\nsamples = 2\nvalue = [ 0. 2.]", shape="box"] ; 52 | 21 -> 25 ; 53 | 26 [label="X[1] <= 5150.0000\ngini = 0.395360021139\nsamples = 435", shape="box"] ; 54 | 0 -> 26 ; 55 | 27 [label="X[0] <= 3.0000\ngini = 0.479393973656\nsamples = 133", shape="box"] ; 56 | 26 -> 27 ; 57 | 28 [label="X[1] <= 3450.0000\ngini = 0.459950160199\nsamples = 106", shape="box"] ; 58 | 27 -> 28 ; 59 | 29 [label="X[1] <= 3250.0000\ngini = 0.4872\nsamples = 50", shape="box"] ; 60 | 28 -> 29 ; 61 | 30 [label="gini = 0.4673\nsamples = 43\nvalue = [ 16. 27.]", shape="box"] ; 62 | 29 -> 30 ; 63 | 31 [label="gini = 0.4082\nsamples = 7\nvalue = [ 5. 2.]", shape="box"] ; 64 | 29 -> 31 ; 65 | 32 [label="X[1] <= 3900.0000\ngini = 0.422831632653\nsamples = 56", shape="box"] ; 66 | 28 -> 32 ; 67 | 33 [label="gini = 0.1653\nsamples = 11\nvalue = [ 1. 10.]", shape="box"] ; 68 | 32 -> 33 ; 69 | 34 [label="gini = 0.4583\nsamples = 45\nvalue = [ 16. 29.]", shape="box"] ; 70 | 32 -> 34 ; 71 | 35 [label="X[1] <= 2800.0000\ngini = 0.493827160494\nsamples = 27", shape="box"] ; 72 | 27 -> 35 ; 73 | 36 [label="gini = 0.0000\nsamples = 2\nvalue = [ 2. 0.]", shape="box"] ; 74 | 35 -> 36 ; 75 | 37 [label="X[1] <= 4900.0000\ngini = 0.4992\nsamples = 25", shape="box"] ; 76 | 35 -> 37 ; 77 | 38 [label="gini = 0.4991\nsamples = 23\nvalue = [ 11. 12.]", shape="box"] ; 78 | 37 -> 38 ; 79 | 39 [label="gini = 0.0000\nsamples = 2\nvalue = [ 2. 0.]", shape="box"] ; 80 | 37 -> 39 ; 81 | 40 [label="X[1] <= 10050.0000\ngini = 0.337814130959\nsamples = 302", shape="box"] ; 82 | 26 -> 40 ; 83 | 41 [label="X[1] <= 7450.0000\ngini = 0.385943417242\nsamples = 134", shape="box"] ; 84 | 40 -> 41 ; 85 | 42 [label="X[1] <= 6550.0000\ngini = 0.280654410525\nsamples = 77", shape="box"] ; 86 | 41 -> 42 ; 87 | 43 [label="gini = 0.3427\nsamples = 41\nvalue = [ 9. 32.]", shape="box"] ; 88 | 42 -> 43 ; 89 | 44 [label="gini = 0.1975\nsamples = 36\nvalue = [ 4. 32.]", shape="box"] ; 90 | 42 -> 44 ; 91 | 45 [label="X[0] <= 2.5000\ngini = 0.473991997538\nsamples = 57", shape="box"] ; 92 | 41 -> 45 ; 93 | 46 [label="gini = 0.4200\nsamples = 40\nvalue = [ 12. 28.]", shape="box"] ; 94 | 45 -> 46 ; 95 | 47 [label="gini = 0.4844\nsamples = 17\nvalue = [ 10. 7.]", shape="box"] ; 96 | 45 -> 47 ; 97 | 48 [label="X[1] <= 22100.0000\ngini = 0.293367346939\nsamples = 168", shape="box"] ; 98 | 40 -> 48 ; 99 | 49 [label="X[1] <= 10550.0000\ngini = 0.242969028124\nsamples = 106", shape="box"] ; 100 | 48 -> 49 ; 101 | 50 [label="gini = 0.0000\nsamples = 10\nvalue = [ 0. 10.]", shape="box"] ; 102 | 49 -> 50 ; 103 | 51 [label="gini = 0.2637\nsamples = 96\nvalue = [ 15. 81.]", shape="box"] ; 104 | 49 -> 51 ; 105 | 52 [label="X[1] <= 70400.0000\ngini = 0.36680541103\nsamples = 62", shape="box"] ; 106 | 48 -> 52 ; 107 | 53 [label="gini = 0.4105\nsamples = 52\nvalue = [ 15. 37.]", shape="box"] ; 108 | 52 -> 53 ; 109 | 54 [label="gini = 0.0000\nsamples = 10\nvalue = [ 0. 10.]", shape="box"] ; 110 | 52 -> 54 ; 111 | } -------------------------------------------------------------------------------- /img/first_tree.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/first_tree.gif -------------------------------------------------------------------------------- /img/first_tree.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/first_tree.pdf -------------------------------------------------------------------------------- /img/firstsplit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/firstsplit.png -------------------------------------------------------------------------------- /img/for_cycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/for_cycle.png -------------------------------------------------------------------------------- /img/forest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/forest.png -------------------------------------------------------------------------------- /img/gboost_cv-test_acc_car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/gboost_cv-test_acc_car.png -------------------------------------------------------------------------------- /img/girl1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/girl1.jpg -------------------------------------------------------------------------------- /img/girl2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/girl2.jpg -------------------------------------------------------------------------------- /img/girl3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/girl3.jpg -------------------------------------------------------------------------------- /img/girl4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/girl4.jpg -------------------------------------------------------------------------------- /img/girl5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/girl5.jpg -------------------------------------------------------------------------------- /img/girl6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/girl6.jpg -------------------------------------------------------------------------------- /img/girl7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/girl7.jpg -------------------------------------------------------------------------------- /img/git_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/git_add.png -------------------------------------------------------------------------------- /img/git_branch_develop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/git_branch_develop.png -------------------------------------------------------------------------------- /img/git_checkout_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/git_checkout_file.png -------------------------------------------------------------------------------- /img/git_conflict.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/git_conflict.png -------------------------------------------------------------------------------- /img/git_conflict_resolved.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/git_conflict_resolved.png -------------------------------------------------------------------------------- /img/git_push.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/git_push.png -------------------------------------------------------------------------------- /img/github_commits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/github_commits.png -------------------------------------------------------------------------------- /img/github_new_repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/github_new_repo.png -------------------------------------------------------------------------------- /img/heap1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/heap1.png -------------------------------------------------------------------------------- /img/heapadd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/heapadd.jpg -------------------------------------------------------------------------------- /img/hotpotato.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/hotpotato.png -------------------------------------------------------------------------------- /img/insertionsort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/insertionsort.png -------------------------------------------------------------------------------- /img/intro/curl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/intro/curl.png -------------------------------------------------------------------------------- /img/intro/text-sent-request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/intro/text-sent-request.png -------------------------------------------------------------------------------- /img/intro/text-sent-response.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/intro/text-sent-response.png -------------------------------------------------------------------------------- /img/intro/vk-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/intro/vk-browser.png -------------------------------------------------------------------------------- /img/intro/vk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/intro/vk2.png -------------------------------------------------------------------------------- /img/intro/vk3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/intro/vk3.png -------------------------------------------------------------------------------- /img/ipython-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/ipython-logo.jpg -------------------------------------------------------------------------------- /img/ipython_ex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/ipython_ex.png -------------------------------------------------------------------------------- /img/kNN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/kNN.png -------------------------------------------------------------------------------- /img/kassa_bills.paint: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/kassa_bills.paint -------------------------------------------------------------------------------- /img/kassa_bills.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/kassa_bills.png -------------------------------------------------------------------------------- /img/kassa_paid_emails_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/kassa_paid_emails_table.png -------------------------------------------------------------------------------- /img/kassa_payments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/kassa_payments.png -------------------------------------------------------------------------------- /img/kernel_trick.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/kernel_trick.jpeg -------------------------------------------------------------------------------- /img/kfold.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/kfold.jpg -------------------------------------------------------------------------------- /img/knn_cv-test_acc_car_insurance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/knn_cv-test_acc_car_insurance.png -------------------------------------------------------------------------------- /img/linalg_task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/linalg_task.png -------------------------------------------------------------------------------- /img/linalg_task2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/linalg_task2.png -------------------------------------------------------------------------------- /img/linalg_task3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/linalg_task3.png -------------------------------------------------------------------------------- /img/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/link.png -------------------------------------------------------------------------------- /img/locally_best_tree.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/locally_best_tree.gif -------------------------------------------------------------------------------- /img/logit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/logit.png -------------------------------------------------------------------------------- /img/matplotlib-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/matplotlib-logo.png -------------------------------------------------------------------------------- /img/mccme_task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/mccme_task.png -------------------------------------------------------------------------------- /img/mergesortB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/mergesortB.png -------------------------------------------------------------------------------- /img/mlclass_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/mlclass_logo.jpg -------------------------------------------------------------------------------- /img/motivation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/motivation.png -------------------------------------------------------------------------------- /img/msortA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/msortA.png -------------------------------------------------------------------------------- /img/namequeue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/namequeue.png -------------------------------------------------------------------------------- /img/numpy-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/numpy-logo.png -------------------------------------------------------------------------------- /img/operations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/operations.png -------------------------------------------------------------------------------- /img/operations_priority.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/operations_priority.png -------------------------------------------------------------------------------- /img/outlier_detection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/outlier_detection.png -------------------------------------------------------------------------------- /img/paid_emails_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/paid_emails_output.png -------------------------------------------------------------------------------- /img/pandas-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/pandas-logo.png -------------------------------------------------------------------------------- /img/partitionA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/partitionA.png -------------------------------------------------------------------------------- /img/partitionB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/partitionB.png -------------------------------------------------------------------------------- /img/plot_pca_3d_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/plot_pca_3d_1.png -------------------------------------------------------------------------------- /img/plot_pca_3d_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/plot_pca_3d_2.png -------------------------------------------------------------------------------- /img/prime-sieve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/prime-sieve.png -------------------------------------------------------------------------------- /img/pycharm_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/pycharm_screen.png -------------------------------------------------------------------------------- /img/python_theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/python_theme.png -------------------------------------------------------------------------------- /img/qsort-recur1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/qsort-recur1.png -------------------------------------------------------------------------------- /img/qsort-recur2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/qsort-recur2.png -------------------------------------------------------------------------------- /img/qsort_tree.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/qsort_tree.gif -------------------------------------------------------------------------------- /img/scikit-learn-flow-chart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/scikit-learn-flow-chart.jpg -------------------------------------------------------------------------------- /img/scikit-learn-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/scikit-learn-logo.png -------------------------------------------------------------------------------- /img/scipy-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/scipy-logo.png -------------------------------------------------------------------------------- /img/seqsearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/seqsearch.png -------------------------------------------------------------------------------- /img/shellsortA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/shellsortA.png -------------------------------------------------------------------------------- /img/shellsortB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/shellsortB.png -------------------------------------------------------------------------------- /img/smalltree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/smalltree.png -------------------------------------------------------------------------------- /img/smart_git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/smart_git.png -------------------------------------------------------------------------------- /img/svm_linear2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/svm_linear2.png -------------------------------------------------------------------------------- /img/svm_linear3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/svm_linear3.png -------------------------------------------------------------------------------- /img/swap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/swap.png -------------------------------------------------------------------------------- /img/task_5B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/task_5B.png -------------------------------------------------------------------------------- /img/timsort_wiki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/timsort_wiki.png -------------------------------------------------------------------------------- /img/tree-partition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/tree-partition.png -------------------------------------------------------------------------------- /img/tree-simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/tree-simple.png -------------------------------------------------------------------------------- /img/treedef1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/treedef1.png -------------------------------------------------------------------------------- /img/treedef2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/treedef2.png -------------------------------------------------------------------------------- /img/trigonometry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/trigonometry.png -------------------------------------------------------------------------------- /img/while_cycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yorko/python_intro/9b8b6017ad3f44b99fb6d30c9e4f6c3ef2682ee1/img/while_cycle.png -------------------------------------------------------------------------------- /index.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Содержание курса\n", 8 | "\n", 9 | "1. [Урок 1. Введение в Python и средства разработки](python_lesson1_tools/lesson1_part1_python_intro_tools.ipynb)\n", 10 | " - [Git и GitHub](python_lesson1_tools/lesson1_optional_github.ipynb)\n", 11 | "2. Урок 2. Основы языка Python\n", 12 | " - [Часть 1. Встроенные типы данных](python_lesson2_python_basics/lesson2_part1_data_types.ipynb)\n", 13 | " - [Часть 2. Числа](python_lesson2_python_basics/lesson2_part2_numbers.ipynb)\n", 14 | " - [Часть 3. Строки](python_lesson2_python_basics/lesson2_part3_strings.ipynb)\n", 15 | " - [Часть 4. Переменные типа Bool. Условный оператор](python_lesson2_python_basics/lesson2_part4_conditions.ipynb)\n", 16 | " - [Часть 5. Циклы](python_lesson2_python_basics/lesson2_part5_while_for.ipynb)\n", 17 | " - [Практика решения простейших задач](tasks/lesson2_tasks.ipynb)\n", 18 | "3. Урок 3. Структуры данных I\n", 19 | " - [Часть 1. Списки, кортежи](python_lesson3_data_structures1/lesson3_part1_lists_tuples.ipynb)\n", 20 | " - [Часть 2. Алгоритм бинарного поиска в списке и сортировка списков](python_lesson3_data_structures1/lesson3_part2_search_sort.ipynb)\n", 21 | " - [Часть 2. Методы сортировки](python_lesson3_data_structures1/lesson3_part2_sorting.ipynb)\n", 22 | " - [Часть 3. Алгоритмы на строках](python_lesson3_data_structures1/lesson3_part3_string_algo.ipynb)\n", 23 | " - [Часть 4. Словари](python_lesson3_data_structures1/lesson3_part4_dictionaries.ipynb)\n", 24 | " - [Часть 5. Пример чтения данных из файла в словарь](python_lesson3_data_structures1/lesson3_part5_reading_file_to_dict.ipynb)\n", 25 | " - [Часть 6. Множества](python_lesson3_data_structures1/lesson3_part6_sets.ipynb)\n", 26 | " - [Разбор самых распространенных задач на списки и строки](tasks/lesson3_tasks.ipynb)\n", 27 | "4. Урок 4. Структуры данных II\n", 28 | " - [Часть 1. Стек, очередь, дерево, куча, граф](python_lesson4_data_structures2/lesson4_part1_data_structures.ipynb)\n", 29 | " - [Часть 2. Классические алгоритмы на графах](python_lesson4_data_structures2/lesson4_part2_graph_algo.ipynb)\n", 30 | " - [Разбор задач на слова и множества. Задачи на стек и очередь](tasks/lesson4_tasks.ipynb)\n", 31 | "5. Урок 5. Функции. Рекурсия\n", 32 | " - [Часть 1. Функции](python_lesson5_func_recursion/lesson5_part1_functions.ipynb)\n", 33 | " - [Часть 2. Рекурсивные функции](python_lesson5_func_recursion/lesson5_part2_recursion.ipynb)\n", 34 | " - [Разбор практических задач на рекурсию](tasks/lesson5_tasks.ipynb)" 35 | ] 36 | } 37 | ], 38 | "metadata": { 39 | "kernelspec": { 40 | "display_name": "Python 2", 41 | "language": "python", 42 | "name": "python2" 43 | }, 44 | "language_info": { 45 | "codemirror_mode": { 46 | "name": "ipython", 47 | "version": 2 48 | }, 49 | "file_extension": ".py", 50 | "mimetype": "text/x-python", 51 | "name": "python", 52 | "nbconvert_exporter": "python", 53 | "pygments_lexer": "ipython2", 54 | "version": "2.7.11" 55 | } 56 | }, 57 | "nbformat": 4, 58 | "nbformat_minor": 0 59 | } 60 | -------------------------------------------------------------------------------- /python_lesson1_tools/lesson1_optional_github.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "## Урок 1. Введение в Python и средства разработки" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "### Git и GitHub" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "Создадим на GitHub репозиторий *mccme_python_tasks* для домашних заданий по этому курсу. Репозиторий будет публичный. Приватный может быть только с платным аккаунтом. \n", 37 | "" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "Конфигурируем учетные данные клиента Git \n", 45 | "

>> git config --global user.name \"Your Name\"

\n", 46 | "

>> git config --global user.email \"your_email@whatever.com\"

" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "Переходим в каталог с задачами из соответствующего проекта PyCharm. Предполагаю, что структура проекта такая - в каталоге *tasks*, где мы инициализируем репозиторий, каталоги семинаров с *.py*-файлами. \n", 54 | "" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "### Создание локального репозитория и изменения" 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "В каталоге *tasks* создаем репозиторий:\n", 69 | "

>> git init

\n", 70 | "\n", 71 | "Если запустить, будет сообщение, что есть неотслеживаемые файлы.\n", 72 | "

>> git status

\n", 73 | "\n", 74 | "Добавляем файлы:\n", 75 | "

>> git add '*.py'

" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "Теперь изменения надо подтвердить (\"закоммитить\"):\n", 90 | "

>> git commit -m \"add seminar 2 tasks\"

\n", 91 | "\n", 92 | "Файлы были добавлены в областью подготовленных файлов (Staging Area). Чтобы отправить изменения на сервер, надо сначала указать путь к репозиторию GitHub (origin), а потом ипользовать команду *push* для отправки изменений в репозиторий в ветку *master* репозитория *origin*\n", 93 | "

>> git remote add origin https://github.com/Yorko/mccme_python_tasks.git

\n", 94 | "

>> git push -u origin master

\n" 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "metadata": {}, 100 | "source": [ 101 | "" 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": {}, 107 | "source": [ 108 | "Посмотреть историю коммитов можно командой\n", 109 | "

>> git log

\n", 110 | "\n", 111 | "А если с более приятным форматированием\n", 112 | "

>> git log --all --pretty=format:\"%h %cd %s (%an)\" --since='7 days ago'

" 113 | ] 114 | }, 115 | { 116 | "cell_type": "markdown", 117 | "metadata": {}, 118 | "source": [ 119 | "Историю коммитов удаленного репозитория GitHub можно посмотреть на сайте\n", 120 | "\n", 121 | "" 122 | ] 123 | }, 124 | { 125 | "cell_type": "markdown", 126 | "metadata": {}, 127 | "source": [ 128 | "Предположим, мы поменяли файл *seminar3/3P_3551_sum_factorials.py*, но поняли, что неправильно и хотим вернуть к последней \"закомиченной\" версии этого файла. Это делается командой *git checkout*. \n", 129 | "\n", 130 | "

>> git checkout seminar3/3P_3551_sum_factorials.py

" 131 | ] 132 | }, 133 | { 134 | "cell_type": "markdown", 135 | "metadata": {}, 136 | "source": [ 137 | "" 138 | ] 139 | }, 140 | { 141 | "cell_type": "markdown", 142 | "metadata": {}, 143 | "source": [ 144 | "Изменения, внесенные в область подготовленных файлов (Staging Area), отменяются командой *git reset HEAD file*.\n", 145 | "Подтвержденные (\"закоммиченные\") изменения отменяются командой *git revert HEAD*" 146 | ] 147 | }, 148 | { 149 | "cell_type": "markdown", 150 | "metadata": {}, 151 | "source": [ 152 | "### Добавление ветви" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": {}, 158 | "source": [ 159 | "Работу с репозиторием принято разделять по ветвям. Главная ветвь - по умолчанию *master*. Это работающий код текущего состояния приложения (production). Основная разработка происходит в ветви *develop*. Но могут быть и тематические ветви, например ветвь \"GUI\". " 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": {}, 165 | "source": [ 166 | "Добавим ветку *develop*\n", 167 | "

>> git checkout -b develop

\n", 168 | "\n", 169 | "Добавим файл с задачей, которую пока решили частично\n", 170 | "

>> git add seminar3/3N_lost_card.py

\n", 171 | "

>> git commit -m \"add lost card task (not ready)\"

\n", 172 | "\n", 173 | "Отправим в ветвь *develop* удаленного репозитория *origin*\n", 174 | "

>> git push origin develop

\n", 175 | "" 176 | ] 177 | }, 178 | { 179 | "cell_type": "markdown", 180 | "metadata": {}, 181 | "source": [ 182 | "Переключаться между ветками можно командой *git checkout branch_name*, посмотреть все ветки - *git branch*" 183 | ] 184 | }, 185 | { 186 | "cell_type": "markdown", 187 | "metadata": {}, 188 | "source": [ 189 | "Чтобы отправить изменения из одной ветви в другую (\"слить ветви\", в данном случае - из *develop* в *master*):\n", 190 | "\n", 191 | "

>> git checkout master

\n", 192 | "

>> git merge develop

\n", 193 | "\n", 194 | "То есть здесь перешли в ветвь *master* и приняли изменения из ветви *develop*." 195 | ] 196 | }, 197 | { 198 | "cell_type": "markdown", 199 | "metadata": {}, 200 | "source": [ 201 | "Но что если состояния файлов в двух ветвях разные, противоречащие друг другу? Что если в ветке *master* с файлом *seminar3/3N_lost_card.py* поработал один человек, а в ветке *develop* с этим же файлом - другой?" 202 | ] 203 | }, 204 | { 205 | "cell_type": "markdown", 206 | "metadata": {}, 207 | "source": [ 208 | "### Разрешение конфликтов" 209 | ] 210 | }, 211 | { 212 | "cell_type": "markdown", 213 | "metadata": {}, 214 | "source": [ 215 | "Сейчас в обеих ветках в файле *seminar3/3N_lost_card.py* всего одно строка. Добавим второй строкой комментарий \"# here we are solving a lost card task\" и закоммитим в ветку *master*. \n", 216 | "Теперь удалим этот комментарий, добавим строку кода \"print(n)\" и закоммитим в ветку *develop*. " 217 | ] 218 | }, 219 | { 220 | "cell_type": "markdown", 221 | "metadata": {}, 222 | "source": [ 223 | "(добавили комментарий)\n", 224 | "

>> git checkout master

\n", 225 | "

>> git add seminar3/3N_lost_card.py

\n", 226 | "

>> git status

\n", 227 | "

>> git commit -m \"add comment to seminar3/3N_lost_card.py\"

\n", 228 | "

>> git checkout develop

\n", 229 | "(теперь вместо комментария код)\n", 230 | "

>> git add seminar3/3N_lost_card.py

\n", 231 | "

>> git status

\n", 232 | "

>> git commit -m \"add code to seminar3/3N_lost_card.py\"

" 233 | ] 234 | }, 235 | { 236 | "cell_type": "markdown", 237 | "metadata": {}, 238 | "source": [ 239 | "Попробуем \"смерджить\" ветки:\n", 240 | "

>> git checkout master

\n", 241 | "

>> git merge develop

" 242 | ] 243 | }, 244 | { 245 | "cell_type": "markdown", 246 | "metadata": {}, 247 | "source": [ 248 | "Пишется сообщение, что автоматически слить ветки не получилось, как раз из-з аконфликта в файле *seminar3/3N_lost_card.py*" 249 | ] 250 | }, 251 | { 252 | "cell_type": "markdown", 253 | "metadata": {}, 254 | "source": [ 255 | "Теперь содержимое файла стало таким:\n", 256 | "\n", 257 | "" 258 | ] 259 | }, 260 | { 261 | "cell_type": "markdown", 262 | "metadata": {}, 263 | "source": [ 264 | "Первая строка \"n = int(input())\" одинакова в обеих ветвях. Далее две секции, разделенные строками с *<<<<<<< HEAD*, *=======* и \">>>>>>> develop\". \n", 265 | "\n", 266 | "В первой секции - строка файла в текущей ветке *master* (комментарий),\n", 267 | "а во второй - та же строка файла в ветке *develop* (код)" 268 | ] 269 | }, 270 | { 271 | "cell_type": "markdown", 272 | "metadata": {}, 273 | "source": [ 274 | "Чтобы разрешить конфликт, надо вручную отредактировать файл и отправить новые изменения\n", 275 | "\n", 276 | "" 277 | ] 278 | }, 279 | { 280 | "cell_type": "markdown", 281 | "metadata": {}, 282 | "source": [ 283 | "

>> git add seminar3/3N_lost_card.py

\n", 284 | "

>> git commit -m \"fix 3N_lost_card conflict\"

\n", 285 | "

>> git push

" 286 | ] 287 | } 288 | ], 289 | "metadata": { 290 | "kernelspec": { 291 | "display_name": "Python 2", 292 | "language": "python", 293 | "name": "python2" 294 | }, 295 | "language_info": { 296 | "codemirror_mode": { 297 | "name": "ipython", 298 | "version": 2 299 | }, 300 | "file_extension": ".py", 301 | "mimetype": "text/x-python", 302 | "name": "python", 303 | "nbconvert_exporter": "python", 304 | "pygments_lexer": "ipython2", 305 | "version": "2.7.10" 306 | }, 307 | "name": "seminar2_part2_lists_tuples.ipynb" 308 | }, 309 | "nbformat": 4, 310 | "nbformat_minor": 0 311 | } 312 | -------------------------------------------------------------------------------- /python_lesson2_python_basics/lesson2_part1_data_types.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "## Урок 2. Основы языка Python" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "### Часть 1. Встроенные типы данных" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "Зачем нужны встроенные типы данных (объекты)?\n", 37 | "- Встроенные объекты упрощают создание программ. Так как избавляют от необходимости\n", 38 | "реализации структур данных.\n", 39 | "- Встроенные объекты – это компоненты расширений. Для решения сложных задач вы можете\n", 40 | "создавать собственные объекты, используя для этого встроенные классы языка Python\n", 41 | "- Встроенные объекты часто более эффективны, чем созданные вручную структуры данных.\n", 42 | "Встроенные типы языка Python используют уже оптимизированные структуры данных,\n", 43 | "реализованные на языке C для достижения высокой производительности\n", 44 | "- Встроенные объекты – это стандартная часть языка. В определенной степени Python многое\n", 45 | "заимствует как из языков, полагающихся на использование встроенных инструментальных\n", 46 | "средств (таких как LISP), так и полагающихся на мастерство программиста, который должен\n", 47 | "выполнить собственную реализацию инструментов и структур данных (таких как C++). В языке\n", 48 | "Python можно создавать собственные типы объектов, но в самом начале делать это не\n", 49 | "рекомендуется. Более того, из-за того, что встроенные компоненты являются стандартными\n", 50 | "составляющими языка Python, они всегда остаются неизменными, тогда как собственные\n", 51 | "структуры имеют свойство изменяться от случая к случаю." 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "Мы рассмотрим следующие встроенные типы данных:\n", 59 | " - Числа (7382, 3.14, 3+4j, Decimal, Fraction)\n", 60 | " - Строки ('net', \"your's\", u'радость')\n", 61 | " - Списки ([1, [2, 'three'], 4])\n", 62 | " - Словари ({'Alex': 2, 'Brian': 4})\n", 63 | " - Кортежи ('Leo', 21.7, 'single')\n", 64 | " - Множества (set(1,2,3), {'a', 'b', 'c'})\n", 65 | " - Файлы (open('myfile', 'r'))" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": {}, 71 | "source": [ 72 | "**Динамическая типизация**\n", 73 | "\n", 74 | "Типы данных в языке Python определяются автоматически во время выполнения, а не в результате\n", 75 | "объявлений в программном коде. Переменные создаются при выполнении операции присваивания,\n", 76 | "могут ссылаться на объекты любых типов и им должны быть присвоены некоторые значения, прежде\n", 77 | "чем к ним можно будет обратиться." 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": {}, 83 | "source": [ 84 | "" 85 | ] 86 | }, 87 | { 88 | "cell_type": "markdown", 89 | "metadata": {}, 90 | "source": [ 91 | " - Переменные – это записи в системной таблице, где предусмотрено место для хранения ссылок на\n", 92 | "объекты.\n", 93 | " - Объекты – это области памяти с объемом, достаточным для представления значений этих объектов.\n", 94 | "Каждый объект имеет два стандартных поля: описатель типа, используемый для хранения\n", 95 | "информации о типе объекта, и счетчик ссылок, используемый для определения момента, когда\n", 96 | "память, занимаемая объектом, может быть освобождена.\n", 97 | " - Ссылки – это указатели на объекты." 98 | ] 99 | } 100 | ], 101 | "metadata": { 102 | "kernelspec": { 103 | "display_name": "Python 2", 104 | "language": "python", 105 | "name": "python2" 106 | }, 107 | "language_info": { 108 | "codemirror_mode": { 109 | "name": "ipython", 110 | "version": 2 111 | }, 112 | "file_extension": ".py", 113 | "mimetype": "text/x-python", 114 | "name": "python", 115 | "nbconvert_exporter": "python", 116 | "pygments_lexer": "ipython2", 117 | "version": "2.7.10" 118 | }, 119 | "name": "seminar2_part1_variables_strings_numbers.ipynb" 120 | }, 121 | "nbformat": 4, 122 | "nbformat_minor": 0 123 | } 124 | -------------------------------------------------------------------------------- /python_lesson2_python_basics/lesson2_part2_numbers.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "# Урок 2. Основы языка Python" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "### Часть 2. Числа" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "Числа в Python бывают разные:\n", 37 | " - Целые числа (int): 122, -4, 99999999999, 0o177, 0x9ff, 0b101010\n", 38 | " - Вещественные числа (float): 1.0, 3.14, .5, 4E21, 4.0e21 \n", 39 | " - Комплексные числа (complex): 3 + 4j, 3.0 + 4.0j, \n", 40 | " - Числа фиксированной точности% decimal.Decimal('0.1')\n", 41 | " - Рациональные числа: fractions.Fraction(3, 4)" 42 | ] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": {}, 47 | "source": [ 48 | "### Операции с целыми и вещественными числами\n", 49 | "\n", 50 | "" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 2, 56 | "metadata": { 57 | "collapsed": true 58 | }, 59 | "outputs": [], 60 | "source": [ 61 | "# Python 2 and 3 compatibility\n", 62 | "# pip install future\n", 63 | "from __future__ import (absolute_import, division,\n", 64 | " print_function, unicode_literals)\n", 65 | "from builtins import *" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": {}, 71 | "source": [ 72 | "### Целые числа" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": 1, 78 | "metadata": { 79 | "collapsed": false 80 | }, 81 | "outputs": [ 82 | { 83 | "name": "stdout", 84 | "output_type": "stream", 85 | "text": [ 86 | "5\n" 87 | ] 88 | } 89 | ], 90 | "source": [ 91 | "print(3+2)" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 2, 97 | "metadata": { 98 | "collapsed": false 99 | }, 100 | "outputs": [ 101 | { 102 | "name": "stdout", 103 | "output_type": "stream", 104 | "text": [ 105 | "1\n" 106 | ] 107 | } 108 | ], 109 | "source": [ 110 | "print(3-2)" 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "execution_count": 3, 116 | "metadata": { 117 | "collapsed": false 118 | }, 119 | "outputs": [ 120 | { 121 | "name": "stdout", 122 | "output_type": "stream", 123 | "text": [ 124 | "6\n" 125 | ] 126 | } 127 | ], 128 | "source": [ 129 | "print(3*2)" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 4, 135 | "metadata": { 136 | "collapsed": false 137 | }, 138 | "outputs": [ 139 | { 140 | "name": "stdout", 141 | "output_type": "stream", 142 | "text": [ 143 | "1\n" 144 | ] 145 | } 146 | ], 147 | "source": [ 148 | "print(3 / 2)" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 5, 154 | "metadata": { 155 | "collapsed": false 156 | }, 157 | "outputs": [ 158 | { 159 | "name": "stdout", 160 | "output_type": "stream", 161 | "text": [ 162 | "9\n" 163 | ] 164 | } 165 | ], 166 | "source": [ 167 | "print(3 ** 2)" 168 | ] 169 | }, 170 | { 171 | "cell_type": "markdown", 172 | "metadata": {}, 173 | "source": [ 174 | "Можно использовать скобки для управления порядком операций" 175 | ] 176 | }, 177 | { 178 | "cell_type": "code", 179 | "execution_count": 6, 180 | "metadata": { 181 | "collapsed": false 182 | }, 183 | "outputs": [ 184 | { 185 | "name": "stdout", 186 | "output_type": "stream", 187 | "text": [ 188 | "14\n", 189 | "20\n" 190 | ] 191 | } 192 | ], 193 | "source": [ 194 | "standard_order = 2 + 3*4\n", 195 | "print(standard_order)\n", 196 | "my_order = (2 + 3)*4\n", 197 | "print(my_order)" 198 | ] 199 | }, 200 | { 201 | "cell_type": "markdown", 202 | "metadata": {}, 203 | "source": [ 204 | "### Вещественные числа" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": 7, 210 | "metadata": { 211 | "collapsed": false 212 | }, 213 | "outputs": [ 214 | { 215 | "name": "stdout", 216 | "output_type": "stream", 217 | "text": [ 218 | "0.2\n" 219 | ] 220 | } 221 | ], 222 | "source": [ 223 | "print(.1 + .1)" 224 | ] 225 | }, 226 | { 227 | "cell_type": "markdown", 228 | "metadata": {}, 229 | "source": [ 230 | "#### Целые числа в Python 2 и Python 3\n", 231 | "В Python 2 результат деления двух челых чисел - тоже целое, а в Python 3 - float." 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": 3, 237 | "metadata": { 238 | "collapsed": false 239 | }, 240 | "outputs": [ 241 | { 242 | "name": "stdout", 243 | "output_type": "stream", 244 | "text": [ 245 | "1.5\n" 246 | ] 247 | } 248 | ], 249 | "source": [ 250 | "print(3 / 2)" 251 | ] 252 | }, 253 | { 254 | "cell_type": "markdown", 255 | "metadata": {}, 256 | "source": [ 257 | "В Python 3 результат - 1.5, в Python 2 (без подключения future) - 1 " 258 | ] 259 | }, 260 | { 261 | "cell_type": "markdown", 262 | "metadata": {}, 263 | "source": [ 264 | "### Комплексные числа" 265 | ] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": 11, 270 | "metadata": { 271 | "collapsed": false 272 | }, 273 | "outputs": [ 274 | { 275 | "name": "stdout", 276 | "output_type": "stream", 277 | "text": [ 278 | "|(2+3j)| = 3.60555127546\n", 279 | "(1+1j) * (2+3j) = (-1+5j)\n" 280 | ] 281 | } 282 | ], 283 | "source": [ 284 | "print \"|{0}| = {1}\".format(complex(2, 3), abs(complex(2, 3)))\n", 285 | "print \"{0} * {1} = {2}\".format(complex(1, 1), complex(2, 3), complex(1, 1) * complex(2, 3))" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": 12, 291 | "metadata": { 292 | "collapsed": false 293 | }, 294 | "outputs": [ 295 | { 296 | "data": { 297 | "text/plain": [ 298 | "(-5+10j)" 299 | ] 300 | }, 301 | "execution_count": 12, 302 | "metadata": {}, 303 | "output_type": "execute_result" 304 | } 305 | ], 306 | "source": [ 307 | "(1 + 2j) * (3+4j)" 308 | ] 309 | }, 310 | { 311 | "cell_type": "markdown", 312 | "metadata": {}, 313 | "source": [ 314 | "### Числа фиксированной точности и рациональные числа" 315 | ] 316 | }, 317 | { 318 | "cell_type": "markdown", 319 | "metadata": {}, 320 | "source": [ 321 | "Для решения проблем, связанных с точностью представления простых вещественных чисел введены\n", 322 | "вещественные числа с фиксированной точностью и рациональные числа (числа, представленные дробью, то есть парой целых чисел – числителем и знаменателем)." 323 | ] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "execution_count": 13, 328 | "metadata": { 329 | "collapsed": false 330 | }, 331 | "outputs": [ 332 | { 333 | "name": "stdout", 334 | "output_type": "stream", 335 | "text": [ 336 | "0.366666666667\n" 337 | ] 338 | }, 339 | { 340 | "data": { 341 | "text/plain": [ 342 | "True" 343 | ] 344 | }, 345 | "execution_count": 13, 346 | "metadata": {}, 347 | "output_type": "execute_result" 348 | } 349 | ], 350 | "source": [ 351 | "print(1.1/3)\n", 352 | "from decimal import Decimal\n", 353 | "from decimal import getcontext\n", 354 | "getcontext().prec = 3\n", 355 | "Decimal('4') / 3 == Decimal('1.33')" 356 | ] 357 | }, 358 | { 359 | "cell_type": "code", 360 | "execution_count": 14, 361 | "metadata": { 362 | "collapsed": false 363 | }, 364 | "outputs": [ 365 | { 366 | "name": "stdout", 367 | "output_type": "stream", 368 | "text": [ 369 | "0.37\n" 370 | ] 371 | } 372 | ], 373 | "source": [ 374 | "from decimal import Decimal\n", 375 | "from decimal import getcontext\n", 376 | "getcontext().prec = 2\n", 377 | "print(Decimal('1.10') / 3)" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": 15, 383 | "metadata": { 384 | "collapsed": false 385 | }, 386 | "outputs": [ 387 | { 388 | "name": "stdout", 389 | "output_type": "stream", 390 | "text": [ 391 | "0\n", 392 | "False\n" 393 | ] 394 | } 395 | ], 396 | "source": [ 397 | "print(7/71)\n", 398 | "print(7/71*71 == 7)" 399 | ] 400 | }, 401 | { 402 | "cell_type": "code", 403 | "execution_count": 16, 404 | "metadata": { 405 | "collapsed": false 406 | }, 407 | "outputs": [ 408 | { 409 | "name": "stdout", 410 | "output_type": "stream", 411 | "text": [ 412 | "True\n" 413 | ] 414 | } 415 | ], 416 | "source": [ 417 | "from fractions import Fraction\n", 418 | "print(Fraction(7, 71) * 71 == 7)" 419 | ] 420 | }, 421 | { 422 | "cell_type": "markdown", 423 | "metadata": {}, 424 | "source": [ 425 | "### Приоритет арифметических операций в Python\n", 426 | "\n", 427 | "" 428 | ] 429 | }, 430 | { 431 | "cell_type": "markdown", 432 | "metadata": {}, 433 | "source": [ 434 | " \n", 435 | "#### Полезные ссылки\n", 436 | "\n", 437 | "- [сайт Python](http://python.org/)\n", 438 | "\n", 439 | " Основной сайт Python, содержит исчерпывающую документацию.\n", 440 | " \n", 441 | "\n", 442 | " \n", 443 | "- [StackOverflow](http://stackoverflow.com/)\n", 444 | "\n", 445 | " StackOverflow - популярный форум для вопросов и ответов о программировании. Решения для очень многих ошибок, появляющихся в процессе программирования, можно найти, используя поисковик и StackOverflow.\n", 446 | "\n", 447 | "\n", 448 | "\n", 449 | "- [CodeAcademy](https://www.codecademy.com/)\n", 450 | "\n", 451 | " CodeAcademy - это простое интерактивное введение во многие языки, включая Python." 452 | ] 453 | } 454 | ], 455 | "metadata": { 456 | "kernelspec": { 457 | "display_name": "Python 2", 458 | "language": "python", 459 | "name": "python2" 460 | }, 461 | "language_info": { 462 | "codemirror_mode": { 463 | "name": "ipython", 464 | "version": 2 465 | }, 466 | "file_extension": ".py", 467 | "mimetype": "text/x-python", 468 | "name": "python", 469 | "nbconvert_exporter": "python", 470 | "pygments_lexer": "ipython2", 471 | "version": "2.7.10" 472 | }, 473 | "name": "seminar2_part1_variables_strings_numbers.ipynb" 474 | }, 475 | "nbformat": 4, 476 | "nbformat_minor": 0 477 | } 478 | -------------------------------------------------------------------------------- /python_lesson2_python_basics/lesson2_part4_conditions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "# Урок 2. Основы языка Python" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "## Часть 4. Переменные типа Bool. Условный оператор" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": null, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "# Python 2 and 3 compatibility\n", 41 | "# pip install future\n", 42 | "from __future__ import (absolute_import, division,\n", 43 | " print_function, unicode_literals)\n", 44 | "from builtins import *" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "#### Для управления логикой программы нужен еще один тип переменной - bool. Переменная типа bool имеет всего два значения - True и False." 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 4, 57 | "metadata": { 58 | "collapsed": false 59 | }, 60 | "outputs": [ 61 | { 62 | "name": "stdout", 63 | "output_type": "stream", 64 | "text": [ 65 | "\n", 66 | "False\n", 67 | "\n", 68 | "True\n", 69 | "\n" 70 | ] 71 | } 72 | ], 73 | "source": [ 74 | "is_connected = True\n", 75 | "print(type(is_connected))\n", 76 | "\n", 77 | "a, b = 5, 6\n", 78 | "a_greater_b = a > b\n", 79 | "print(a_greater_b)\n", 80 | "print(type(a_greater_b))\n", 81 | "\n", 82 | "c = bool(1)\n", 83 | "print(c)\n", 84 | "print(type(c))" 85 | ] 86 | }, 87 | { 88 | "cell_type": "markdown", 89 | "metadata": {}, 90 | "source": [ 91 | "#### В простейшем виде условная инструкция в Питоне имеет следующий синтаксис:\n", 92 | "\n", 93 | "if Условие:\n", 94 | " \n", 95 | " Блок инструкций 1\n", 96 | "\n", 97 | "else:\n", 98 | " \n", 99 | " Блок инструкций 2" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": {}, 105 | "source": [ 106 | "#### Пример \n", 107 | "Если число делится на 7, напечатать это число и строку \"YES\", в противном случае - \"NO\"" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 9, 113 | "metadata": { 114 | "collapsed": false 115 | }, 116 | "outputs": [ 117 | { 118 | "name": "stdout", 119 | "output_type": "stream", 120 | "text": [ 121 | "Insert a number: 45\n", 122 | "NO\n" 123 | ] 124 | } 125 | ], 126 | "source": [ 127 | "a = int(input(\"Insert a number: \"))\n", 128 | "if a % 7 == 0:\n", 129 | " print(a)\n", 130 | " print(\"YES\")\n", 131 | "else:\n", 132 | " print(\"NO\")" 133 | ] 134 | }, 135 | { 136 | "cell_type": "markdown", 137 | "metadata": {}, 138 | "source": [ 139 | "#### Если в каждом блоке всего по одной инструкции, можно использовать сокращенный синтаксис:\n", 140 | "\n", 141 | "Инструкция 1 if Условие else Инструкция 2" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 13, 147 | "metadata": { 148 | "collapsed": false 149 | }, 150 | "outputs": [ 151 | { 152 | "name": "stdout", 153 | "output_type": "stream", 154 | "text": [ 155 | "0.07\n" 156 | ] 157 | } 158 | ], 159 | "source": [ 160 | "has_debts = True\n", 161 | "comission = 0.07 if has_debts else 0.05\n", 162 | "print(comission)" 163 | ] 164 | }, 165 | { 166 | "cell_type": "markdown", 167 | "metadata": {}, 168 | "source": [ 169 | "#### Пример \n", 170 | "Написать, что число четное или нечетное" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 12, 176 | "metadata": { 177 | "collapsed": false 178 | }, 179 | "outputs": [ 180 | { 181 | "name": "stdout", 182 | "output_type": "stream", 183 | "text": [ 184 | "Insert a number: 34\n", 185 | "34 is even\n" 186 | ] 187 | } 188 | ], 189 | "source": [ 190 | "a = int(input(\"Insert a number: \"))\n", 191 | "print(str(a) + \" is \" + (\"even\" if a % 2 == 0 else \"odd\"))" 192 | ] 193 | }, 194 | { 195 | "cell_type": "markdown", 196 | "metadata": {}, 197 | "source": [ 198 | "#### Условные конструкции могут быть вложенными. \n", 199 | "\n", 200 | "if Условие1:\n", 201 | " \n", 202 | " if Условие2:\n", 203 | " \n", 204 | " Блок инструкций 1\n", 205 | " \n", 206 | " ...\n", 207 | " \n", 208 | " else:\n", 209 | " \n", 210 | " Блок инструкций 2\n", 211 | " \n", 212 | "else:\n", 213 | " \n", 214 | " Блок инструкций 3" 215 | ] 216 | }, 217 | { 218 | "cell_type": "markdown", 219 | "metadata": {}, 220 | "source": [ 221 | "#### Пример\n", 222 | "Определить, в какой четверти находится точка, по ее координатам *(x, y)*" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 10, 228 | "metadata": { 229 | "collapsed": false 230 | }, 231 | "outputs": [ 232 | { 233 | "name": "stdout", 234 | "output_type": "stream", 235 | "text": [ 236 | "Введите x: 43\n", 237 | "Введите y: 56\n", 238 | "Первая четверть\n" 239 | ] 240 | } 241 | ], 242 | "source": [ 243 | "x = int(input(\"Введите x: \"))\n", 244 | "y = int(input(\"Введите y: \"))\n", 245 | "if x > 0:\n", 246 | " if y > 0: # x>0, y>0\n", 247 | " print(\"Первая четверть\")\n", 248 | " else: # x>0, y<0\n", 249 | " print(\"Четвертая четверть\")\n", 250 | "else:\n", 251 | " if y > 0: # x<0, y>0\n", 252 | " print(\"Вторая четверть\")\n", 253 | " else: # x<0, y<0\n", 254 | " print(\"Третья четверть\")" 255 | ] 256 | }, 257 | { 258 | "cell_type": "markdown", 259 | "metadata": {}, 260 | "source": [ 261 | "#### Однако, не стоит злоупотреблять вложением конструкций. Если их слишком много вложенных друг в друга, читаемость кода сильно страдает (\"спагетти-код\") и разобраться в нем сложнее" 262 | ] 263 | }, 264 | { 265 | "cell_type": "markdown", 266 | "metadata": {}, 267 | "source": [ 268 | "#### Блок *if-elif-else* (каскадная конструкция)\n", 269 | "if Условие 1:\n", 270 | " \n", 271 | " Блок инструкций 1\n", 272 | "\n", 273 | "elif Условие 2:\n", 274 | "\n", 275 | " Блок инструкций 2\n", 276 | " \n", 277 | "...\n", 278 | "\n", 279 | "elif Условие n:\n", 280 | "\n", 281 | " Блок инструкций n\n", 282 | " \n", 283 | "else:\n", 284 | " \n", 285 | " Блок инструкций n+1" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": 19, 291 | "metadata": { 292 | "collapsed": false 293 | }, 294 | "outputs": [ 295 | { 296 | "name": "stdout", 297 | "output_type": "stream", 298 | "text": [ 299 | "Введите x: 3\n", 300 | "Введите y: 4\n", 301 | "Первая четверть\n" 302 | ] 303 | } 304 | ], 305 | "source": [ 306 | "x = input(\"Введите x: \")\n", 307 | "y = input(\"Введите y: \")\n", 308 | "if x > 0 and y > 0:\n", 309 | " print(\"Первая четверть\")\n", 310 | "elif x > 0 and y < 0:\n", 311 | " print(\"Четвертая четверть\")\n", 312 | "elif y > 0:\n", 313 | " print(\"Вторая четверть\")\n", 314 | "else:\n", 315 | " print(\"Третья четверть\")" 316 | ] 317 | }, 318 | { 319 | "cell_type": "markdown", 320 | "metadata": {}, 321 | "source": [ 322 | "#### Задача [\"Високосный год\"](http://informatics.mccme.ru/mod/statements/view.php?id=8448#1)\n", 323 | "Требуется определить, является ли данный год високосным. (Напомним, что год является високосным, если его номер кратен 4, но не кратен 100, а также если он кратен 400.)\n", 324 | "\n", 325 | "Входные данные:\n", 326 | "Вводится единственное число - номер года (целое, положительное, не превышает 30000).\n", 327 | "\n", 328 | "Выходные данные:\n", 329 | "Требуется вывести слово YES, если год является високосным и NO - в противном случае.\n", 330 | "#### Решение\n", 331 | "Пока не используем функции и обработку исключений" 332 | ] 333 | }, 334 | { 335 | "cell_type": "code", 336 | "execution_count": 33, 337 | "metadata": { 338 | "collapsed": false 339 | }, 340 | "outputs": [ 341 | { 342 | "name": "stdout", 343 | "output_type": "stream", 344 | "text": [ 345 | "Insert year and press Enter:23\n", 346 | "NO\n" 347 | ] 348 | } 349 | ], 350 | "source": [ 351 | "year = input(\"Insert year and press Enter:\")\n", 352 | "\n", 353 | "if year > 30000:\n", 354 | " print \"Year should be <= 30000\"\n", 355 | " year = input(\"Insert year and press Enter:\")\n", 356 | " \n", 357 | "if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):\n", 358 | " print(\"YES\")\n", 359 | "else:\n", 360 | " print(\"NO\")" 361 | ] 362 | } 363 | ], 364 | "metadata": { 365 | "kernelspec": { 366 | "display_name": "Python 2", 367 | "language": "python", 368 | "name": "python2" 369 | }, 370 | "language_info": { 371 | "codemirror_mode": { 372 | "name": "ipython", 373 | "version": 2 374 | }, 375 | "file_extension": ".py", 376 | "mimetype": "text/x-python", 377 | "name": "python", 378 | "nbconvert_exporter": "python", 379 | "pygments_lexer": "ipython2", 380 | "version": "2.7.10" 381 | }, 382 | "name": "seminar2_part1_variables_strings_numbers.ipynb" 383 | }, 384 | "nbformat": 4, 385 | "nbformat_minor": 0 386 | } 387 | -------------------------------------------------------------------------------- /python_lesson3_data_structures1/lesson3_part2_search_sort.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "# Урок 3. Структуры данных I" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "## Часть 2. Алгоритм бинарного поиска в списке и сортировка списков" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 1, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "# Python 2 and 3 compatibility\n", 41 | "# pip install future\n", 42 | "from __future__ import (absolute_import, division,\n", 43 | " print_function, unicode_literals)\n", 44 | "from builtins import *" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": { 50 | "collapsed": true 51 | }, 52 | "source": [ 53 | "## Бинарный поиск\n", 54 | "Классический алгоритм поиска элемента в отсортированном списке, использующий дробление массива на половины. \n", 55 | "Продемонстрируем версию для отсортированных списков без повторяющихся элементов. Сложность алгоритма - O(log(n)), где n - длина списка на входе" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 103, 61 | "metadata": { 62 | "collapsed": false 63 | }, 64 | "outputs": [], 65 | "source": [ 66 | "def binfind(a_list, x, left, right):\n", 67 | " if left > right or len(a_list) == 0:\n", 68 | " return -1\n", 69 | " middle = (left + right) // 2\n", 70 | " if a_list[middle] == x:\n", 71 | " return middle\n", 72 | " elif (a_list[middle] < x):\n", 73 | " return binfind(a_list, x, middle + 1, right)\n", 74 | " else: # a_list[middle] > x\n", 75 | " return binfind(a_list, x, left, middle - 1)" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 98, 81 | "metadata": { 82 | "collapsed": false 83 | }, 84 | "outputs": [ 85 | { 86 | "name": "stdout", 87 | "output_type": "stream", 88 | "text": [ 89 | "Elem: 6, Index: 0\n", 90 | "Elem: 7, Index: 1\n", 91 | "Elem: 8, Index: 2\n", 92 | "Elem: 9, Index: 3\n", 93 | "Elem: 10, Index: 4\n", 94 | "Elem: 11, Index: 5\n", 95 | "Elem: 12, Index: 6\n", 96 | "Elem: 13, Index: 7\n" 97 | ] 98 | } 99 | ], 100 | "source": [ 101 | "a = range(6,14)\n", 102 | "for i in a:\n", 103 | " print(\"Elem: {0}, Index: {1}\".format(i, binfind(a, i, 0, len(a)-1)))" 104 | ] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "metadata": {}, 109 | "source": [ 110 | "Несмотря на кажущуюся элементарность алгоритма, часто допускают ошибки, не учитывая многие ситуации.\n", 111 | "Частые ошибки:\n", 112 | " - не работает с массивом из 0/1/2 элементов\n", 113 | " - не находит первый или последний элемент" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 101, 119 | "metadata": { 120 | "collapsed": false 121 | }, 122 | "outputs": [], 123 | "source": [ 124 | "a = []\n", 125 | "for i in a:\n", 126 | " print(\"Elem: {0}, Index: {1}\".format(i, binfind(a, i, 0, len(a)-1)))" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 104, 132 | "metadata": { 133 | "collapsed": false 134 | }, 135 | "outputs": [ 136 | { 137 | "data": { 138 | "text/plain": [ 139 | "-1" 140 | ] 141 | }, 142 | "execution_count": 104, 143 | "metadata": {}, 144 | "output_type": "execute_result" 145 | } 146 | ], 147 | "source": [ 148 | "a = []\n", 149 | "binfind(a, 3, 0, 0)" 150 | ] 151 | }, 152 | { 153 | "cell_type": "markdown", 154 | "metadata": {}, 155 | "source": [ 156 | "- некорректно работает, если элемента в массиве нет\n" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": 105, 162 | "metadata": { 163 | "collapsed": false 164 | }, 165 | "outputs": [ 166 | { 167 | "data": { 168 | "text/plain": [ 169 | "-1" 170 | ] 171 | }, 172 | "execution_count": 105, 173 | "metadata": {}, 174 | "output_type": "execute_result" 175 | } 176 | ], 177 | "source": [ 178 | "binfind(range(10), 125, 0, len(a)-1)" 179 | ] 180 | }, 181 | { 182 | "cell_type": "markdown", 183 | "metadata": {}, 184 | "source": [ 185 | "См. статьи Только 10% программистов способны написать двоичный поиск и Я не могу написать бинарный поиск на Хабрахабре. " 186 | ] 187 | }, 188 | { 189 | "cell_type": "markdown", 190 | "metadata": {}, 191 | "source": [ 192 | "### Линейный поиск" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": {}, 198 | "source": [ 199 | "Простейший алгоритм поиска элемента в списке, также известен, как метод перебора или \"грубой силы\". Работает за время O(n), где n - длина списка на входе (понятно и по названию алгоритма)" 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": 71, 205 | "metadata": { 206 | "collapsed": false 207 | }, 208 | "outputs": [], 209 | "source": [ 210 | "def linear_search(a_list, x):\n", 211 | " i, length = 0, len(a_list)\n", 212 | " while i < length and x != a_list[i]:\n", 213 | " i += 1\n", 214 | " return i if i < length else -1" 215 | ] 216 | }, 217 | { 218 | "cell_type": "code", 219 | "execution_count": 73, 220 | "metadata": { 221 | "collapsed": false 222 | }, 223 | "outputs": [ 224 | { 225 | "name": "stdout", 226 | "output_type": "stream", 227 | "text": [ 228 | "Elem: 0, Index: 0\n", 229 | "Elem: 1, Index: 1\n", 230 | "Elem: 2, Index: 2\n", 231 | "Elem: 3, Index: 3\n", 232 | "Elem: 4, Index: 4\n", 233 | "Elem: 5, Index: 5\n", 234 | "Elem: 6, Index: 6\n", 235 | "Elem: 7, Index: 7\n", 236 | "Elem: 8, Index: 8\n", 237 | "Elem: 9, Index: 9\n" 238 | ] 239 | } 240 | ], 241 | "source": [ 242 | "a = range(10)\n", 243 | "for i in a:\n", 244 | " print(\"Elem: {0}, Index: {1}\".format(i, linear_search(a, i)))" 245 | ] 246 | }, 247 | { 248 | "cell_type": "markdown", 249 | "metadata": {}, 250 | "source": [ 251 | "В случае повторяющихся элементов алгоритм вернет индекс первого попавшегося элемента" 252 | ] 253 | }, 254 | { 255 | "cell_type": "code", 256 | "execution_count": 96, 257 | "metadata": { 258 | "collapsed": false 259 | }, 260 | "outputs": [ 261 | { 262 | "data": { 263 | "text/plain": [ 264 | "3" 265 | ] 266 | }, 267 | "execution_count": 96, 268 | "metadata": {}, 269 | "output_type": "execute_result" 270 | } 271 | ], 272 | "source": [ 273 | "a = [32, 1, 3, 4, 2, 1]\n", 274 | "linear_search(a, 4)" 275 | ] 276 | }, 277 | { 278 | "cell_type": "markdown", 279 | "metadata": {}, 280 | "source": [ 281 | "## Алгоритмы сортировки" 282 | ] 283 | }, 284 | { 285 | "cell_type": "markdown", 286 | "metadata": {}, 287 | "source": [ 288 | "Задача сортировки - одна из первых в информатике, всегда служила и тестом на производительность компьютеров.\n", 289 | "\n", 290 | "Большой список алгоритмов сортировки - в английской Википедии.\n", 291 | "\n", 292 | "Сайт с анимацией алогитмов сортировки - sorting.at.\n", 293 | "\n", 294 | "Неформальное введение в структуры данных на Хабрахабре.\n", 295 | "\n", 296 | "Рекомендую курс Stanford по построению и анализу алгоритмов - часть 1 и часть 2." 297 | ] 298 | }, 299 | { 300 | "cell_type": "markdown", 301 | "metadata": {}, 302 | "source": [ 303 | "### HeapSort" 304 | ] 305 | }, 306 | { 307 | "cell_type": "markdown", 308 | "metadata": {}, 309 | "source": [ 310 | "Используем реализацию структуры данных \"куча\" из библиотеки heapq.\n", 311 | "\n", 312 | "Для сортировки нам понадобятся методы heappush и heappop - для вставки элемента в структуру и удаления элемента структры с сохраненим инварианта этой структуры данных - значения дочерних элементво меньше значения родительского элемента." 313 | ] 314 | }, 315 | { 316 | "cell_type": "markdown", 317 | "metadata": {}, 318 | "source": [ 319 | "Реализация алгоритма очень проста: из кучи последовательно извлекается максимальный (корневой) элемент и записывается в конец списка, пока куча не опустеет. Сложность алгоритма - O(n*log(n)), где n - длина списка на входе." 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": 1, 325 | "metadata": { 326 | "collapsed": false 327 | }, 328 | "outputs": [ 329 | { 330 | "data": { 331 | "text/plain": [ 332 | "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" 333 | ] 334 | }, 335 | "execution_count": 1, 336 | "metadata": {}, 337 | "output_type": "execute_result" 338 | } 339 | ], 340 | "source": [ 341 | "import heapq\n", 342 | "def heapsort(a_list):\n", 343 | " h = []\n", 344 | " for value in a_list:\n", 345 | " heapq.heappush(h, value)\n", 346 | " return [heapq.heappop(h) for i in range(len(h))]\n", 347 | "\n", 348 | "heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])" 349 | ] 350 | }, 351 | { 352 | "cell_type": "code", 353 | "execution_count": 107, 354 | "metadata": { 355 | "collapsed": false 356 | }, 357 | "outputs": [ 358 | { 359 | "name": "stdout", 360 | "output_type": "stream", 361 | "text": [ 362 | "100000 loops, best of 3: 8.89 µs per loop\n" 363 | ] 364 | } 365 | ], 366 | "source": [ 367 | "%timeit heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])" 368 | ] 369 | }, 370 | { 371 | "cell_type": "markdown", 372 | "metadata": {}, 373 | "source": [ 374 | "## QuickSort" 375 | ] 376 | }, 377 | { 378 | "cell_type": "markdown", 379 | "metadata": {}, 380 | "source": [ 381 | "Один из самых известных алгоритмов сортировки, также известный как qsort. Без рандомизации может выглядеть очень лаконично" 382 | ] 383 | }, 384 | { 385 | "cell_type": "code", 386 | "execution_count": 108, 387 | "metadata": { 388 | "collapsed": false 389 | }, 390 | "outputs": [ 391 | { 392 | "data": { 393 | "text/plain": [ 394 | "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" 395 | ] 396 | }, 397 | "execution_count": 108, 398 | "metadata": {}, 399 | "output_type": "execute_result" 400 | } 401 | ], 402 | "source": [ 403 | "def quick_sort(arr):\n", 404 | " if len(arr) <= 1:\n", 405 | " return arr\n", 406 | " else:\n", 407 | " return quick_sort([x for x in arr[1:] if x < arr[0]]) + \\\n", 408 | " [arr[0]] + \\\n", 409 | " quick_sort([x for x in arr[1:] if x >= arr[0]])\n", 410 | "\n", 411 | "quick_sort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])" 412 | ] 413 | }, 414 | { 415 | "cell_type": "code", 416 | "execution_count": 109, 417 | "metadata": { 418 | "collapsed": false 419 | }, 420 | "outputs": [ 421 | { 422 | "name": "stdout", 423 | "output_type": "stream", 424 | "text": [ 425 | "10000 loops, best of 3: 24.7 µs per loop\n" 426 | ] 427 | } 428 | ], 429 | "source": [ 430 | "%timeit quick_sort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])" 431 | ] 432 | }, 433 | { 434 | "cell_type": "markdown", 435 | "metadata": {}, 436 | "source": [ 437 | "## Полезные ссылки\n", 438 | " - Только 10% программистов способны написать двоичный поиск\n", 439 | " - Я не могу написать бинарный поиск\n", 440 | " - Список алгоритмов сортировки на Википедии\n", 441 | " - анимация алогитмов сортировки - sorting.at.\n", 442 | " - курс Stanford по построению и анализу алгоритмов - часть 1 и часть 2.\n", 443 | " - Неформальное введение в структуры данных на Хабрахабре.\n", 444 | " - репозиторий GitHub с задачами на алгоритмы в виде тетрадок ipython" 445 | ] 446 | } 447 | ], 448 | "metadata": { 449 | "kernelspec": { 450 | "display_name": "Python 2", 451 | "language": "python", 452 | "name": "python2" 453 | }, 454 | "language_info": { 455 | "codemirror_mode": { 456 | "name": "ipython", 457 | "version": 2 458 | }, 459 | "file_extension": ".py", 460 | "mimetype": "text/x-python", 461 | "name": "python", 462 | "nbconvert_exporter": "python", 463 | "pygments_lexer": "ipython2", 464 | "version": "2.7.10" 465 | }, 466 | "name": "from_file_to_dict.ipynb" 467 | }, 468 | "nbformat": 4, 469 | "nbformat_minor": 0 470 | } 471 | -------------------------------------------------------------------------------- /python_lesson3_data_structures1/lesson3_part3_string_algo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "# Урок 3. Структуры данных I" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "## Часть 3. Алгоритмы на строках" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": null, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "# Python 2 and 3 compatibility\n", 41 | "# pip install future\n", 42 | "from __future__ import (absolute_import, division,\n", 43 | " print_function, unicode_literals)\n", 44 | "from builtins import *" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "Одна из простейших задач поиска информации — поиск точно заданной подстроки в строке. Тем не менее, эта задача чрезвычайно важна — она применяется в текстовых редакторах, СУБД, поисковых машинах и т.д." 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "### Точное соответствие (Naive exact matching)" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "Дан текст t и образец p (считаем, что |p| < |t|).\n", 66 | "\n", 67 | "**Задача**: найти все вхождения образца p в текст t\n", 68 | "\n", 69 | "**Алгоритм**:\n", 70 | "1. i=0,\n", 71 | "2. сравнить i-й символ t с первым символом p,\n", 72 | "3. совпадение -> сравнить вторые символы и так далее,\n", 73 | "4. несовпадение -> i += 1 и переход ко второму пункту" 74 | ] 75 | }, 76 | { 77 | "cell_type": "markdown", 78 | "metadata": {}, 79 | "source": [ 80 | "**Сложность в худшем случае**: O ( |t| * |p| )" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 29, 86 | "metadata": { 87 | "collapsed": true 88 | }, 89 | "outputs": [], 90 | "source": [ 91 | "def naive_match(p, t):\n", 92 | " assert len(p) <= len(t) # assume text at least as long as pattern\n", 93 | " occurrences = []\n", 94 | " for i in range(0, len(t)-len(p)+1): # for each alignment of p to t\n", 95 | " match = True # assume we match until proven wrong\n", 96 | " for j in range(0, len(p)): # for each position of p\n", 97 | " if t[i+j] != p[j]:\n", 98 | " match = False # at least 1 char mismatches\n", 99 | " break\n", 100 | " if match:\n", 101 | " occurrences.append(i)\n", 102 | " return occurrences" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 30, 108 | "metadata": { 109 | "collapsed": false 110 | }, 111 | "outputs": [ 112 | { 113 | "data": { 114 | "text/plain": [ 115 | "[9]" 116 | ] 117 | }, 118 | "execution_count": 30, 119 | "metadata": {}, 120 | "output_type": "execute_result" 121 | } 122 | ], 123 | "source": [ 124 | "t = 'I need a needle in a haystack' # \"text\" - thing we search in\n", 125 | "p = 'needle' # \"pattern\" - thing we search for\n", 126 | "naive_match(p, t)" 127 | ] 128 | }, 129 | { 130 | "cell_type": "markdown", 131 | "metadata": {}, 132 | "source": [ 133 | "Убедимся, что `needle` действительно найдено" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": 31, 139 | "metadata": { 140 | "collapsed": false 141 | }, 142 | "outputs": [ 143 | { 144 | "data": { 145 | "text/plain": [ 146 | "'needle'" 147 | ] 148 | }, 149 | "execution_count": 31, 150 | "metadata": {}, 151 | "output_type": "execute_result" 152 | } 153 | ], 154 | "source": [ 155 | "t[9: 9 + len(p)]" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 32, 161 | "metadata": { 162 | "collapsed": false 163 | }, 164 | "outputs": [ 165 | { 166 | "data": { 167 | "text/plain": [ 168 | "[0, 6, 12]" 169 | ] 170 | }, 171 | "execution_count": 32, 172 | "metadata": {}, 173 | "output_type": "execute_result" 174 | } 175 | ], 176 | "source": [ 177 | "naive_match('needle', 'needleneedleneedle')" 178 | ] 179 | }, 180 | { 181 | "cell_type": "markdown", 182 | "metadata": { 183 | "collapsed": true 184 | }, 185 | "source": [ 186 | "Такая сложность алгоритма - непозволительная роскошь для поиска в больших текстах.\n", 187 | "\n", 188 | "Посмотрим, как замена строки на некоторый вектор может помочь в таких задачах как поиск подстроки и сжатие строки. " 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": {}, 194 | "source": [ 195 | "Z-функция" 196 | ] 197 | }, 198 | { 199 | "cell_type": "markdown", 200 | "metadata": {}, 201 | "source": [ 202 | "Пусть дана строка s длины n. Тогда Z-функция (\"зет-функция\") от этой строки — это массив длины n, i-ый элемент которого равен наибольшему числу символов, начиная с позиции i, совпадающих с первыми символами строки s." 203 | ] 204 | }, 205 | { 206 | "cell_type": "markdown", 207 | "metadata": {}, 208 | "source": [ 209 | "Пример: Z(abcdabscabcdabia)=[16,0,0,0,2,0,0,0,6,0,0,0,2,0,0,1]. Еще примеры и описание алгоритма на сайте e-maxx.\n", 210 | "\n", 211 | "Ниже приведен код (опционально)." 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": 16, 217 | "metadata": { 218 | "collapsed": true 219 | }, 220 | "outputs": [], 221 | "source": [ 222 | "def z_func(s):\n", 223 | " \n", 224 | " Z = [len(s)] + [0] * len(s)\n", 225 | " assert len(s) > 1\n", 226 | " \n", 227 | " # Initial comparison of s[1:] with prefix\n", 228 | " for i in range(1, len(s)):\n", 229 | " if s[i] == s[i-1]:\n", 230 | " Z[1] += 1\n", 231 | " else:\n", 232 | " break\n", 233 | " \n", 234 | " r, l = 0, 0\n", 235 | " if Z[1] > 0:\n", 236 | " r, l = Z[1], 1\n", 237 | " \n", 238 | " for k in range(2, len(s)):\n", 239 | " assert Z[k] == 0\n", 240 | " if k > r:\n", 241 | " # Case 1\n", 242 | " for i in range(k, len(s)):\n", 243 | " if s[i] == s[i-k]:\n", 244 | " Z[k] += 1\n", 245 | " else:\n", 246 | " break\n", 247 | " r, l = k + Z[k] - 1, k\n", 248 | " else:\n", 249 | " # Case 2\n", 250 | " # Calculate length of beta\n", 251 | " nbeta = r - k + 1\n", 252 | " Zkp = Z[k - l]\n", 253 | " if nbeta > Zkp:\n", 254 | " # Case 2a: Zkp wins\n", 255 | " Z[k] = Zkp\n", 256 | " else:\n", 257 | " # Case 2b: Compare characters just past r\n", 258 | " nmatch = 0\n", 259 | " for i in range(r+1, len(s)):\n", 260 | " if s[i] == s[i - k]:\n", 261 | " nmatch += 1\n", 262 | " else:\n", 263 | " break\n", 264 | " l, r = k, r + nmatch\n", 265 | " Z[k] = r - k + 1\n", 266 | " return Z" 267 | ] 268 | }, 269 | { 270 | "cell_type": "code", 271 | "execution_count": 33, 272 | "metadata": { 273 | "collapsed": false 274 | }, 275 | "outputs": [ 276 | { 277 | "data": { 278 | "text/plain": [ 279 | "[11, 0, 0, 1, 0, 1, 0, 4, 0, 0, 1, 0]" 280 | ] 281 | }, 282 | "execution_count": 33, 283 | "metadata": {}, 284 | "output_type": "execute_result" 285 | } 286 | ], 287 | "source": [ 288 | "z_func('abracadabra')\n", 289 | "# abracadabra (11)\n", 290 | "# a (1)\n", 291 | "# a (1)\n", 292 | "# abra (4)\n", 293 | "# a (1)" 294 | ] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "execution_count": 18, 299 | "metadata": { 300 | "collapsed": false 301 | }, 302 | "outputs": [ 303 | { 304 | "data": { 305 | "text/plain": [ 306 | "[5, 4, 3, 2, 1, 0]" 307 | ] 308 | }, 309 | "execution_count": 18, 310 | "metadata": {}, 311 | "output_type": "execute_result" 312 | } 313 | ], 314 | "source": [ 315 | "z_func('aaaaa')" 316 | ] 317 | }, 318 | { 319 | "cell_type": "markdown", 320 | "metadata": {}, 321 | "source": [ 322 | "Применения Z-функции:\n", 323 | "- Поиск подстроки в строке\n", 324 | "- Количество различных подстрок в строке\n", 325 | "- Сжатие строки" 326 | ] 327 | }, 328 | { 329 | "cell_type": "markdown", 330 | "metadata": {}, 331 | "source": [ 332 | "### Поиск подстроки в строке" 333 | ] 334 | }, 335 | { 336 | "cell_type": "markdown", 337 | "metadata": {}, 338 | "source": [ 339 | "Пусть t - текст, p - образец. \n", 340 | "\n", 341 | "**Задача**: найти все вхождения образца p в текст t.\n", 342 | "\n", 343 | "**Решение**: \n", 344 | "- Образуем строку s = p + $ + t, т.е. к образцу припишем текст через символ-разделитель (который не встречается нигде в самих строках).\n", 345 | "- Посчитаем для полученной строки Z-функцию\n", 346 | "- Тогда для любого i в отрезке [0; length(t)-1] по соответствующему значению z[i + len(p) + 1] можно понять, входит ли образец p в текст t, начиная с позиции i: если это значение Z-функции равно length(p), то да, входит, иначе — нет.\n", 347 | "\n", 348 | "Сложность: O(len(p) + len(t))" 349 | ] 350 | }, 351 | { 352 | "cell_type": "markdown", 353 | "metadata": {}, 354 | "source": [ 355 | "**Код**" 356 | ] 357 | }, 358 | { 359 | "cell_type": "code", 360 | "execution_count": 19, 361 | "metadata": { 362 | "collapsed": true 363 | }, 364 | "outputs": [], 365 | "source": [ 366 | "def zMatch(p, t):\n", 367 | " s = p + \"$\" + t\n", 368 | " Z = z_func(s)\n", 369 | " occurrences = []\n", 370 | " for i in range(len(p) + 1, len(s)):\n", 371 | " if Z[i] == len(p):\n", 372 | " occurrences.append(i - (len(p) + 1))\n", 373 | " return occurrences" 374 | ] 375 | }, 376 | { 377 | "cell_type": "markdown", 378 | "metadata": {}, 379 | "source": [ 380 | "**Иллюстрация**:\n", 381 | "Текст \"lambalambalam\", ищем в нем \"lamb\"" 382 | ] 383 | }, 384 | { 385 | "cell_type": "code", 386 | "execution_count": 21, 387 | "metadata": { 388 | "collapsed": false 389 | }, 390 | "outputs": [ 391 | { 392 | "name": "stdout", 393 | "output_type": "stream", 394 | "text": [ 395 | "[18, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0]\n" 396 | ] 397 | } 398 | ], 399 | "source": [ 400 | "t, p = \"lambalambalam\", \"lamb\"\n", 401 | "calculated_z = z_func(\"lamb$lambalambalam\")\n", 402 | "print(calculated_z)" 403 | ] 404 | }, 405 | { 406 | "cell_type": "markdown", 407 | "metadata": {}, 408 | "source": [ 409 | "Для первого индекса есть вхождение:" 410 | ] 411 | }, 412 | { 413 | "cell_type": "code", 414 | "execution_count": 22, 415 | "metadata": { 416 | "collapsed": false 417 | }, 418 | "outputs": [ 419 | { 420 | "name": "stdout", 421 | "output_type": "stream", 422 | "text": [ 423 | "4 4\n" 424 | ] 425 | } 426 | ], 427 | "source": [ 428 | "print(len(p), calculated_z[0 + len(p) + 1])" 429 | ] 430 | }, 431 | { 432 | "cell_type": "markdown", 433 | "metadata": {}, 434 | "source": [ 435 | "Для второго - нет:" 436 | ] 437 | }, 438 | { 439 | "cell_type": "code", 440 | "execution_count": 23, 441 | "metadata": { 442 | "collapsed": false 443 | }, 444 | "outputs": [ 445 | { 446 | "name": "stdout", 447 | "output_type": "stream", 448 | "text": [ 449 | "4 0\n" 450 | ] 451 | } 452 | ], 453 | "source": [ 454 | "print(len(p), calculated_z[1 + len(p) + 1])" 455 | ] 456 | }, 457 | { 458 | "cell_type": "code", 459 | "execution_count": 24, 460 | "metadata": { 461 | "collapsed": false 462 | }, 463 | "outputs": [ 464 | { 465 | "data": { 466 | "text/plain": [ 467 | "[0, 5]" 468 | ] 469 | }, 470 | "execution_count": 24, 471 | "metadata": {}, 472 | "output_type": "execute_result" 473 | } 474 | ], 475 | "source": [ 476 | "zMatch(\"lamb\", \"lambalambalam\")" 477 | ] 478 | }, 479 | { 480 | "cell_type": "markdown", 481 | "metadata": {}, 482 | "source": [ 483 | "**Еще примеры**" 484 | ] 485 | }, 486 | { 487 | "cell_type": "code", 488 | "execution_count": 25, 489 | "metadata": { 490 | "collapsed": false 491 | }, 492 | "outputs": [ 493 | { 494 | "name": "stdout", 495 | "output_type": "stream", 496 | "text": [ 497 | "[31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n" 498 | ] 499 | }, 500 | { 501 | "data": { 502 | "text/plain": [ 503 | "[9]" 504 | ] 505 | }, 506 | "execution_count": 25, 507 | "metadata": {}, 508 | "output_type": "execute_result" 509 | } 510 | ], 511 | "source": [ 512 | "t, p = 'haystack needle haystack', 'needle'\n", 513 | "print(z_func(p + '$' + t))\n", 514 | "zMatch('needle', 'haystack needle haystack')" 515 | ] 516 | }, 517 | { 518 | "cell_type": "code", 519 | "execution_count": 26, 520 | "metadata": { 521 | "collapsed": false 522 | }, 523 | "outputs": [ 524 | { 525 | "name": "stdout", 526 | "output_type": "stream", 527 | "text": [ 528 | "[29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0]\n" 529 | ] 530 | }, 531 | { 532 | "data": { 533 | "text/plain": [ 534 | "[9, 16]" 535 | ] 536 | }, 537 | "execution_count": 26, 538 | "metadata": {}, 539 | "output_type": "execute_result" 540 | } 541 | ], 542 | "source": [ 543 | "t, p = 'haystack needle needle', 'needle'\n", 544 | "print(z_func(p + '$' + t))\n", 545 | "zMatch('needle', 'haystack needle needle')" 546 | ] 547 | }, 548 | { 549 | "cell_type": "markdown", 550 | "metadata": {}, 551 | "source": [ 552 | "### Сжатие строки" 553 | ] 554 | }, 555 | { 556 | "cell_type": "markdown", 557 | "metadata": {}, 558 | "source": [ 559 | "Дана строка s длины n. \n", 560 | "\n", 561 | "**Задача**: найти самое короткое её \"сжатое\" представление, т.е. найти такую строку t наименьшей длины, что s можно представить в виде конкатенации одной или нескольких копий t.\n", 562 | "\n" 563 | ] 564 | }, 565 | { 566 | "cell_type": "code", 567 | "execution_count": 27, 568 | "metadata": { 569 | "collapsed": false 570 | }, 571 | "outputs": [], 572 | "source": [ 573 | "def compress_with_z(s):\n", 574 | " z_vec = z_func(s)\n", 575 | " for i in range(1, len(s)):\n", 576 | " if (i + z_vec[i] == len(s)) and (z_vec[i] % i == 0):\n", 577 | " return s[:i]\n", 578 | " else:\n", 579 | " return s" 580 | ] 581 | }, 582 | { 583 | "cell_type": "code", 584 | "execution_count": 28, 585 | "metadata": { 586 | "collapsed": false 587 | }, 588 | "outputs": [ 589 | { 590 | "name": "stdout", 591 | "output_type": "stream", 592 | "text": [ 593 | "[20, 0, 0, 0, 16, 0, 0, 0, 12, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, 0]\n", 594 | "foot\n" 595 | ] 596 | } 597 | ], 598 | "source": [ 599 | "s = \"footfootfootfootfoot\"\n", 600 | "print(z_func(s))\n", 601 | "print(compress_with_z(s))" 602 | ] 603 | }, 604 | { 605 | "cell_type": "markdown", 606 | "metadata": { 607 | "collapsed": true 608 | }, 609 | "source": [ 610 | "## Полезные ссылки\n", 611 | "- Список алгоритмов на Википедии\n", 612 | "- Про Z-функцию\n", 613 | "- Задача на Z-функцию на MCCME.\n", 614 | "- Алгоритмы поиска в строке на Хабрахабре" 615 | ] 616 | } 617 | ], 618 | "metadata": { 619 | "kernelspec": { 620 | "display_name": "Python 2", 621 | "language": "python", 622 | "name": "python2" 623 | }, 624 | "language_info": { 625 | "codemirror_mode": { 626 | "name": "ipython", 627 | "version": 2 628 | }, 629 | "file_extension": ".py", 630 | "mimetype": "text/x-python", 631 | "name": "python", 632 | "nbconvert_exporter": "python", 633 | "pygments_lexer": "ipython2", 634 | "version": "2.7.10" 635 | }, 636 | "name": "seminar2_part1_variables_strings_numbers.ipynb" 637 | }, 638 | "nbformat": 4, 639 | "nbformat_minor": 0 640 | } 641 | -------------------------------------------------------------------------------- /python_lesson3_data_structures1/lesson3_part5_reading_file_to_dict.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "# Урок 3. Структуры данных I" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "## Часть 5. Пример чтения данных из файла в словарь" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 1, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "# Python 2 and 3 compatibility\n", 41 | "# pip install future\n", 42 | "from __future__ import (absolute_import, division,\n", 43 | " print_function, unicode_literals)\n", 44 | "from builtins import *" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "Предположим, есть файл с данными клиентов банка (пока не рассматриваем чтение из базы данных). В качестве простого примера воьзьмем txt-файл следующего содержания:\n", 52 | "___________________________________________\n", 53 | "lastname,age,debt,occupation\n", 54 | "\n", 55 | "Adrianov,25,30000,artist\n", 56 | "\n", 57 | "Belkin,42,4000,programmer\n", 58 | "\n", 59 | "Koltunov,32,100,sportsman \n", 60 | "___________________________________________" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 2, 66 | "metadata": { 67 | "collapsed": false 68 | }, 69 | "outputs": [ 70 | { 71 | "name": "stdout", 72 | "output_type": "stream", 73 | "text": [ 74 | "lastname,age,debt,occupation\n", 75 | "\n", 76 | "[u'Adrianov', u'25', u'30000', u'artist']\n", 77 | "[u'Belkin', u'42', u'4000', u'programmer']\n", 78 | "[u'Koltunov', u'32', u'100', u'sportsman']\n", 79 | "[u'Loptev', u'25', u'30000', u'artist']\n", 80 | "[u'Bobrov', u'42', u'4000', u'programmer']\n", 81 | "[u'Karelin', u'32', u'100', u'sportsman']\n" 82 | ] 83 | } 84 | ], 85 | "source": [ 86 | "credit_history_file = open('../data/credit_sample.txt', 'r')\n", 87 | "\n", 88 | "print(credit_history_file.readline())\n", 89 | "\n", 90 | "for line in credit_history_file:\n", 91 | " line = line.strip().split(\",\")\n", 92 | " print(line)" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 3, 98 | "metadata": { 99 | "collapsed": false 100 | }, 101 | "outputs": [ 102 | { 103 | "name": "stdout", 104 | "output_type": "stream", 105 | "text": [ 106 | "lastname,age,debt,occupation\n", 107 | "\n", 108 | "{u'Loptev': (25, 30000, u'artist'), u'Koltunov': (32, 100, u'sportsman'), u'Belkin': (42, 4000, u'programmer'), u'Adrianov': (25, 30000, u'artist'), u'Karelin': (32, 100, u'sportsman'), u'Bobrov': (42, 4000, u'programmer')}\n" 109 | ] 110 | } 111 | ], 112 | "source": [ 113 | "credit_history_file = open('../data/credit_sample.txt', 'r')\n", 114 | "\n", 115 | "# let's for now just skip the heading\n", 116 | "first_line = credit_history_file.readline()\n", 117 | "print(first_line)\n", 118 | "\n", 119 | "credit_history_dict = {}\n", 120 | "\n", 121 | "for line in credit_history_file:\n", 122 | " lastname, age, debt, occupation = line.strip().split(\",\")\n", 123 | " credit_history_dict[lastname] = (int(age), \n", 124 | " int(debt), \n", 125 | " occupation) \n", 126 | "print(credit_history_dict)\n", 127 | " \n", 128 | "credit_history_file.close()" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": {}, 134 | "source": [ 135 | "Теперь можем добавлять записи в словарь вручную" 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": 4, 141 | "metadata": { 142 | "collapsed": false 143 | }, 144 | "outputs": [ 145 | { 146 | "name": "stdout", 147 | "output_type": "stream", 148 | "text": [ 149 | "Markin,34,500,journalist\n", 150 | "quit\n", 151 | "{u'Loptev': (25, 30000, u'artist'), u'Koltunov': (32, 100, u'sportsman'), u'Belkin': (42, 4000, u'programmer'), u'Adrianov': (25, 30000, u'artist'), u'Karelin': (32, 100, u'sportsman'), u'Markin': (34, 500, u'journalist'), u'Bobrov': (42, 4000, u'programmer')}\n" 152 | ] 153 | } 154 | ], 155 | "source": [ 156 | "# adding clients by hand\n", 157 | "# Markin,34,500,journalist\n", 158 | "line = ''\n", 159 | "while(line != 'quit'):\n", 160 | " line = input().strip()\n", 161 | " if line == 'quit':\n", 162 | " break\n", 163 | " else: # line != 'quit' \n", 164 | " lastname, age, debt, occupation = line.split(\",\") \n", 165 | " credit_history_dict[lastname] = (int(age), \n", 166 | " int(debt), \n", 167 | " occupation)\n", 168 | "print(credit_history_dict) \n", 169 | "\n" 170 | ] 171 | } 172 | ], 173 | "metadata": { 174 | "kernelspec": { 175 | "display_name": "Python 2", 176 | "language": "python", 177 | "name": "python2" 178 | }, 179 | "language_info": { 180 | "codemirror_mode": { 181 | "name": "ipython", 182 | "version": 2 183 | }, 184 | "file_extension": ".py", 185 | "mimetype": "text/x-python", 186 | "name": "python", 187 | "nbconvert_exporter": "python", 188 | "pygments_lexer": "ipython2", 189 | "version": "2.7.10" 190 | }, 191 | "name": "from_file_to_dict.ipynb" 192 | }, 193 | "nbformat": 4, 194 | "nbformat_minor": 0 195 | } 196 | -------------------------------------------------------------------------------- /python_lesson3_data_structures1/lesson3_part6_sets.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "# Урок 3. Структуры данных I" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "# Часть 6. Множества\n", 30 | "Про множества на Pythonworld" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": null, 36 | "metadata": { 37 | "collapsed": true 38 | }, 39 | "outputs": [], 40 | "source": [ 41 | "# Python 2 and 3 compatibility\n", 42 | "# pip install future\n", 43 | "from __future__ import (absolute_import, division,\n", 44 | " print_function, unicode_literals)\n", 45 | "from builtins import *" 46 | ] 47 | }, 48 | { 49 | "cell_type": "markdown", 50 | "metadata": {}, 51 | "source": [ 52 | "Множество в Python содержит элементы в случайном порядке. Элементы повторяться не могут." 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 1, 58 | "metadata": { 59 | "collapsed": false 60 | }, 61 | "outputs": [ 62 | { 63 | "name": "stdout", 64 | "output_type": "stream", 65 | "text": [ 66 | "{1, 2, 3}\n", 67 | "{4, 5, 6}\n" 68 | ] 69 | } 70 | ], 71 | "source": [ 72 | "a = set([1, 2, 3])\n", 73 | "b = {4, 5, 6} # {} - dict, not set\n", 74 | "print(a)\n", 75 | "print(b)" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "Видим, что порядок элементов случайный." 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 2, 88 | "metadata": { 89 | "collapsed": false 90 | }, 91 | "outputs": [ 92 | { 93 | "name": "stdout", 94 | "output_type": "stream", 95 | "text": [ 96 | "{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}\n" 97 | ] 98 | } 99 | ], 100 | "source": [ 101 | "a = {i ** 2 for i in range(10)}\n", 102 | "print(a)" 103 | ] 104 | }, 105 | { 106 | "cell_type": "markdown", 107 | "metadata": {}, 108 | "source": [ 109 | "Основные методы для работы с множествами:" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | " - len(s) - число элементов в множестве s (мощность множества)" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": 3, 122 | "metadata": { 123 | "collapsed": false 124 | }, 125 | "outputs": [ 126 | { 127 | "name": "stdout", 128 | "output_type": "stream", 129 | "text": [ 130 | "4\n" 131 | ] 132 | } 133 | ], 134 | "source": [ 135 | "print(len({3, 5, 7, 8}))" 136 | ] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": {}, 141 | "source": [ 142 | "- set.issubset(other) (или set <= other) - является ли множество подмножеством другого (other)" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 13, 148 | "metadata": { 149 | "collapsed": false 150 | }, 151 | "outputs": [ 152 | { 153 | "name": "stdout", 154 | "output_type": "stream", 155 | "text": [ 156 | "True\n", 157 | "True\n" 158 | ] 159 | } 160 | ], 161 | "source": [ 162 | "print({2, 5, 6}.issubset({2, 4, 8, 3, 5, 6}))\n", 163 | "print({2, 5, 6} <= {2, 4, 8, 3, 5, 6})" 164 | ] 165 | }, 166 | { 167 | "cell_type": "markdown", 168 | "metadata": {}, 169 | "source": [ 170 | "- set.union(other, ...) (или set | other | ) - объединение нескольких множеств" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 5, 176 | "metadata": { 177 | "collapsed": false 178 | }, 179 | "outputs": [ 180 | { 181 | "data": { 182 | "text/plain": [ 183 | "{2, 3, 5, 6, 7, 8}" 184 | ] 185 | }, 186 | "execution_count": 5, 187 | "metadata": {}, 188 | "output_type": "execute_result" 189 | } 190 | ], 191 | "source": [ 192 | "{2, 5, 7}.union({2, 8, 3, 5, 6})" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": {}, 198 | "source": [ 199 | "- set.intersection(other, ...) (или set & other &) - пересечение нескольких множеств" 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": 6, 205 | "metadata": { 206 | "collapsed": false 207 | }, 208 | "outputs": [ 209 | { 210 | "data": { 211 | "text/plain": [ 212 | "{2, 7}" 213 | ] 214 | }, 215 | "execution_count": 6, 216 | "metadata": {}, 217 | "output_type": "execute_result" 218 | } 219 | ], 220 | "source": [ 221 | "{2, 5, 7, 4, 3, 5}.intersection({2, 4, 7}, {2, 7})" 222 | ] 223 | }, 224 | { 225 | "cell_type": "markdown", 226 | "metadata": {}, 227 | "source": [ 228 | "- set.difference(other, ...) (или set - other) - множество из всех элементов set, не принадлежащие ни одному из other." 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "execution_count": 7, 234 | "metadata": { 235 | "collapsed": false 236 | }, 237 | "outputs": [ 238 | { 239 | "data": { 240 | "text/plain": [ 241 | "{3, 5}" 242 | ] 243 | }, 244 | "execution_count": 7, 245 | "metadata": {}, 246 | "output_type": "execute_result" 247 | } 248 | ], 249 | "source": [ 250 | "{2, 5, 7, 4, 3, 5} - {2, 4, 7}" 251 | ] 252 | }, 253 | { 254 | "cell_type": "markdown", 255 | "metadata": {}, 256 | "source": [ 257 | "- set.symmetric_difference(other) (или set ^ other) - множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих." 258 | ] 259 | }, 260 | { 261 | "cell_type": "code", 262 | "execution_count": 8, 263 | "metadata": { 264 | "collapsed": false 265 | }, 266 | "outputs": [ 267 | { 268 | "data": { 269 | "text/plain": [ 270 | "{1, 2, 6, 7}" 271 | ] 272 | }, 273 | "execution_count": 8, 274 | "metadata": {}, 275 | "output_type": "execute_result" 276 | } 277 | ], 278 | "source": [ 279 | "{1, 2, 3, 4, 5}.symmetric_difference({3, 4, 5, 6, 7})" 280 | ] 281 | }, 282 | { 283 | "cell_type": "markdown", 284 | "metadata": {}, 285 | "source": [ 286 | " - set.add(elem) - добавляет элемент в множество.\n", 287 | " - set.remove(elem) - удаляет элемент из множества. KeyError, если такого элемента не существует.\n", 288 | " - set.discard(elem) - удаляет элемент, если он находится в множестве.\n", 289 | " - set.pop() - удаляет первый элемент из множества. Так как множества не упорядочены, нельзя точно сказать, какой элемент будет первым.\n", 290 | " - set.clear() - очистка множества." 291 | ] 292 | }, 293 | { 294 | "cell_type": "markdown", 295 | "metadata": {}, 296 | "source": [ 297 | "## Frozenset" 298 | ] 299 | }, 300 | { 301 | "cell_type": "markdown", 302 | "metadata": {}, 303 | "source": [ 304 | "frozenset - то же множество, только неизменяемое" 305 | ] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "execution_count": 9, 310 | "metadata": { 311 | "collapsed": false 312 | }, 313 | "outputs": [ 314 | { 315 | "name": "stdout", 316 | "output_type": "stream", 317 | "text": [ 318 | "{'Alex'}\n" 319 | ] 320 | } 321 | ], 322 | "source": [ 323 | "manchester_fans = set([\"Alex\", \"Harry\"])\n", 324 | "detroit_fans = frozenset([\"Harry\", \"Nick\"])\n", 325 | "print(manchester_fans - detroit_fans)\n", 326 | "manchester_fans.add(\"Leo\")" 327 | ] 328 | }, 329 | { 330 | "cell_type": "markdown", 331 | "metadata": {}, 332 | "source": [ 333 | "В неизменяемое множество нельзя добавить элемент." 334 | ] 335 | }, 336 | { 337 | "cell_type": "code", 338 | "execution_count": 10, 339 | "metadata": { 340 | "collapsed": false 341 | }, 342 | "outputs": [ 343 | { 344 | "ename": "AttributeError", 345 | "evalue": "'frozenset' object has no attribute 'add'", 346 | "output_type": "error", 347 | "traceback": [ 348 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 349 | "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", 350 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdetroit_fans\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Bill\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 351 | "\u001b[0;31mAttributeError\u001b[0m: 'frozenset' object has no attribute 'add'" 352 | ] 353 | } 354 | ], 355 | "source": [ 356 | "detroit_fans.add(\"Bill\")" 357 | ] 358 | } 359 | ], 360 | "metadata": { 361 | "kernelspec": { 362 | "display_name": "Python 2", 363 | "language": "python", 364 | "name": "python2" 365 | }, 366 | "language_info": { 367 | "codemirror_mode": { 368 | "name": "ipython", 369 | "version": 2 370 | }, 371 | "file_extension": ".py", 372 | "mimetype": "text/x-python", 373 | "name": "python", 374 | "nbconvert_exporter": "python", 375 | "pygments_lexer": "ipython2", 376 | "version": "2.7.10" 377 | } 378 | }, 379 | "nbformat": 4, 380 | "nbformat_minor": 0 381 | } 382 | -------------------------------------------------------------------------------- /tasks/lesson2_tasks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true 7 | }, 8 | "source": [ 9 | "
\n", 10 | "\n", 11 | "# MLClass. \"Прикладной анализ данных\"\n", 12 | "# Модуль \"Инструментарий Data Science\"\n", 13 | "\n", 14 | "\n", 15 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 16 | "
\n", 17 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 18 | ] 19 | }, 20 | { 21 | "cell_type": "markdown", 22 | "metadata": {}, 23 | "source": [ 24 | "# Задачи к уроку 2\n", 25 | "http://informatics.mccme.ru/mod/statements/view.php?id=16205" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 1, 31 | "metadata": { 32 | "collapsed": true 33 | }, 34 | "outputs": [], 35 | "source": [ 36 | "# Python 2 and 3 compatibility\n", 37 | "# pip install future\n", 38 | "from __future__ import (absolute_import, division,\n", 39 | " print_function, unicode_literals)\n", 40 | "from builtins import *" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "## Задача A\n", 48 | "Вычислите $2^{179}$. Выведите на экран вычисленное значение." 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 1, 54 | "metadata": { 55 | "collapsed": false 56 | }, 57 | "outputs": [], 58 | "source": [ 59 | "## Ваш код здесь" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "## Задача B\n", 67 | "Вычислите 20!. Выведите на экран вычисленное значение." 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 2, 73 | "metadata": { 74 | "collapsed": false 75 | }, 76 | "outputs": [], 77 | "source": [ 78 | "## Ваш код здесь" 79 | ] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": {}, 84 | "source": [ 85 | "## Задача C\n", 86 | "Вычислите длину гипотенузы в прямоугольном треугольнике со сторонами 179 и 971." 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 3, 92 | "metadata": { 93 | "collapsed": false 94 | }, 95 | "outputs": [], 96 | "source": [ 97 | "## Ваш код здесь" 98 | ] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "metadata": {}, 103 | "source": [ 104 | "## Задача D\n", 105 | "Запишите букву 'A' (латинскую, заглавную) 100 раз подряд. Сдайте на проверку программу, которая выводит эту строчку (только буквы, без кавычек)." 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 4, 111 | "metadata": { 112 | "collapsed": false 113 | }, 114 | "outputs": [], 115 | "source": [ 116 | "## Ваш код здесь" 117 | ] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": {}, 122 | "source": [ 123 | "## Задача E\n", 124 | "Даны два целых числа. Выведите значение наибольшего из них." 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 5, 130 | "metadata": { 131 | "collapsed": false 132 | }, 133 | "outputs": [], 134 | "source": [ 135 | "## Ваш код здесь" 136 | ] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": {}, 141 | "source": [ 142 | "## Задача F\n", 143 | "Даны два целых числа. Программа должна вывести число 1, если первое число больше второго, число 2, если второе больше первого или число 0, если они равны." 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 6, 149 | "metadata": { 150 | "collapsed": false 151 | }, 152 | "outputs": [], 153 | "source": [ 154 | "## Ваш код здесь" 155 | ] 156 | }, 157 | { 158 | "cell_type": "markdown", 159 | "metadata": {}, 160 | "source": [ 161 | "## Задача G\n", 162 | "Число 179 записали 50 раз подряд. Полученное 150-значное число возвели в квадрат. Сколько получилось?" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 7, 168 | "metadata": { 169 | "collapsed": false 170 | }, 171 | "outputs": [], 172 | "source": [ 173 | "## Ваш код здесь" 174 | ] 175 | }, 176 | { 177 | "cell_type": "markdown", 178 | "metadata": {}, 179 | "source": [ 180 | "## Задача H\n", 181 | "Дано два числа a и b. Выведите гипотенузу треугольника с заданными катетами." 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": 8, 187 | "metadata": { 188 | "collapsed": false 189 | }, 190 | "outputs": [], 191 | "source": [ 192 | "## Ваш код здесь" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": {}, 198 | "source": [ 199 | "## Задача I\n", 200 | "Даны три целых числа. Найдите наибольшее из них (программа должна вывести ровно одно целое число).\n", 201 | "Какое наименьшее число операторов сравнения (>, <, >=, <=) необходимо для решения этой задачи?" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 9, 207 | "metadata": { 208 | "collapsed": false 209 | }, 210 | "outputs": [], 211 | "source": [ 212 | "## Ваш код здесь" 213 | ] 214 | }, 215 | { 216 | "cell_type": "markdown", 217 | "metadata": {}, 218 | "source": [ 219 | "## Задача J\n", 220 | "Даны три натуральных числа a, b, c. Определите, существует ли треугольник с такими сторонами. Если треугольник существует, выведите строку YES, иначе выведите строку NO.\n", 221 | "Треугольник — это три точки, не лежащие на одной прямой." 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": 10, 227 | "metadata": { 228 | "collapsed": false 229 | }, 230 | "outputs": [], 231 | "source": [ 232 | "## Ваш код здесь" 233 | ] 234 | }, 235 | { 236 | "cell_type": "markdown", 237 | "metadata": {}, 238 | "source": [ 239 | "## Задача K\n", 240 | "Шахматная ладья ходит по горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ладья попасть с первой клетки на вторую одним ходом." 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": 11, 246 | "metadata": { 247 | "collapsed": false 248 | }, 249 | "outputs": [], 250 | "source": [ 251 | "## Ваш код здесь" 252 | ] 253 | }, 254 | { 255 | "cell_type": "markdown", 256 | "metadata": {}, 257 | "source": [ 258 | "## Задача L\n", 259 | "Число $179^{10}$ записали четыре раза подряд. Из получившегося числа извлекли корень степени 10. Сколько получилось?" 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "execution_count": 12, 265 | "metadata": { 266 | "collapsed": false 267 | }, 268 | "outputs": [], 269 | "source": [ 270 | "## Ваш код здесь" 271 | ] 272 | }, 273 | { 274 | "cell_type": "markdown", 275 | "metadata": {}, 276 | "source": [ 277 | "## Задача M\n", 278 | "Дано натуральное число. Требуется определить, является ли год с данным номером високосным. Если год является високосным, то выведите YES, иначе выведите NO. Напомним, что в соответствии с григорианским календарем, год является високосным, если его номер кратен 4, но не кратен 100, а также если он кратен 400." 279 | ] 280 | }, 281 | { 282 | "cell_type": "code", 283 | "execution_count": 13, 284 | "metadata": { 285 | "collapsed": false 286 | }, 287 | "outputs": [], 288 | "source": [ 289 | "## Ваш код здесь" 290 | ] 291 | }, 292 | { 293 | "cell_type": "markdown", 294 | "metadata": {}, 295 | "source": [ 296 | "# Задача N\n", 297 | "Шахматный конь ходит буквой “Г” — на две клетки по вертикали в любом направлении и на одну клетку по горизонтали или наоборот. Даны две различные клетки шахматной доски, определите, может ли конь попасть с первой клетки на вторую одним ходом." 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": 14, 303 | "metadata": { 304 | "collapsed": false 305 | }, 306 | "outputs": [], 307 | "source": [ 308 | "## Ваш код здесь" 309 | ] 310 | } 311 | ], 312 | "metadata": { 313 | "kernelspec": { 314 | "display_name": "Python 2", 315 | "language": "python", 316 | "name": "python2" 317 | }, 318 | "language_info": { 319 | "codemirror_mode": { 320 | "name": "ipython", 321 | "version": 2 322 | }, 323 | "file_extension": ".py", 324 | "mimetype": "text/x-python", 325 | "name": "python", 326 | "nbconvert_exporter": "python", 327 | "pygments_lexer": "ipython2", 328 | "version": "2.7.12" 329 | }, 330 | "name": "seminar1_python_intro_tools.ipynb" 331 | }, 332 | "nbformat": 4, 333 | "nbformat_minor": 0 334 | } 335 | -------------------------------------------------------------------------------- /tasks/lesson2_tasks_solutions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true 7 | }, 8 | "source": [ 9 | "
\n", 10 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 11 | "
\n", 12 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "# Задачи к уроку 2\n", 20 | "http://informatics.mccme.ru/mod/statements/view.php?id=16205" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 1, 26 | "metadata": { 27 | "collapsed": true 28 | }, 29 | "outputs": [], 30 | "source": [ 31 | "# Python 2 and 3 compatibility\n", 32 | "# pip install future\n", 33 | "from __future__ import (absolute_import, division,\n", 34 | " print_function, unicode_literals)\n", 35 | "from builtins import *" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": {}, 41 | "source": [ 42 | "## Задача A\n", 43 | "Вычислите $2^{179}$. Выведите на экран вычисленное значение." 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 2, 49 | "metadata": { 50 | "collapsed": false 51 | }, 52 | "outputs": [ 53 | { 54 | "name": "stdout", 55 | "output_type": "stream", 56 | "text": [ 57 | "766247770432944429179173513575154591809369561091801088\n" 58 | ] 59 | } 60 | ], 61 | "source": [ 62 | "print(2 ** 179)" 63 | ] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "metadata": {}, 68 | "source": [ 69 | "## Задача B\n", 70 | "Вычислите 20!. Выведите на экран вычисленное значение." 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": 1, 76 | "metadata": { 77 | "collapsed": false 78 | }, 79 | "outputs": [ 80 | { 81 | "name": "stdout", 82 | "output_type": "stream", 83 | "text": [ 84 | "2432902008176640000\n" 85 | ] 86 | } 87 | ], 88 | "source": [ 89 | "n = 1\n", 90 | "for i in range(2, 21, 1):\n", 91 | " n *= i\n", 92 | "print(n)\n", 93 | "\n", 94 | "# from math import factorial\n", 95 | "# print(factorial(20))" 96 | ] 97 | }, 98 | { 99 | "cell_type": "markdown", 100 | "metadata": {}, 101 | "source": [ 102 | "## Задача C\n", 103 | "Вычислите длину гипотенузы в прямоугольном треугольнике со сторонами 179 и 971." 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": 2, 109 | "metadata": { 110 | "collapsed": false 111 | }, 112 | "outputs": [ 113 | { 114 | "name": "stdout", 115 | "output_type": "stream", 116 | "text": [ 117 | "987.361129475938\n" 118 | ] 119 | } 120 | ], 121 | "source": [ 122 | "from math import sqrt\n", 123 | "print(sqrt(179 ** 2 + 971 ** 2))" 124 | ] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "metadata": {}, 129 | "source": [ 130 | "## Задача D\n", 131 | "Запишите букву 'A' (латинскую, заглавную) 100 раз подряд. Сдайте на проверку программу, которая выводит эту строчку (только буквы, без кавычек)." 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 3, 137 | "metadata": { 138 | "collapsed": false 139 | }, 140 | "outputs": [ 141 | { 142 | "name": "stdout", 143 | "output_type": "stream", 144 | "text": [ 145 | "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n" 146 | ] 147 | } 148 | ], 149 | "source": [ 150 | "print(100 * 'A')" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "## Задача E\n", 158 | "Даны два целых числа. Выведите значение наибольшего из них." 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": 2, 164 | "metadata": { 165 | "collapsed": false 166 | }, 167 | "outputs": [ 168 | { 169 | "name": "stdout", 170 | "output_type": "stream", 171 | "text": [ 172 | "4\n", 173 | "7\n", 174 | "7\n" 175 | ] 176 | } 177 | ], 178 | "source": [ 179 | "a, b = int(input()), int(input())\n", 180 | "print(a if a >= b else b)" 181 | ] 182 | }, 183 | { 184 | "cell_type": "markdown", 185 | "metadata": {}, 186 | "source": [ 187 | "## Задача F\n", 188 | "Даны два целых числа. Программа должна вывести число 1, если первое число больше второго, число 2, если второе больше первого или число 0, если они равны." 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": 5, 194 | "metadata": { 195 | "collapsed": false 196 | }, 197 | "outputs": [ 198 | { 199 | "name": "stdout", 200 | "output_type": "stream", 201 | "text": [ 202 | "3\n", 203 | "7\n", 204 | "2\n" 205 | ] 206 | } 207 | ], 208 | "source": [ 209 | "a, b = int(input()), int(input())\n", 210 | "if a > b:\n", 211 | " print(1)\n", 212 | "elif a < b:\n", 213 | " print(2)\n", 214 | "else:\n", 215 | " print(0)" 216 | ] 217 | }, 218 | { 219 | "cell_type": "markdown", 220 | "metadata": {}, 221 | "source": [ 222 | "## Задача G\n", 223 | "Число 179 записали 50 раз подряд. Полученное 150-значное число возвели в квадрат. Сколько получилось?" 224 | ] 225 | }, 226 | { 227 | "cell_type": "code", 228 | "execution_count": 6, 229 | "metadata": { 230 | "collapsed": false 231 | }, 232 | "outputs": [ 233 | { 234 | "name": "stdout", 235 | "output_type": "stream", 236 | "text": [ 237 | "32105178251324397470543616689762835908982055128201274347420493566639712785858932005078151224297370443516589662735808881955028101174247320393466539612621548475402329256183110036963890817744671598525452379306233160087013940867794721648575502429356283210137063990917844771698625552479406333260187114041\n" 238 | ] 239 | } 240 | ], 241 | "source": [ 242 | "print(int('179' * 50) ** 2)" 243 | ] 244 | }, 245 | { 246 | "cell_type": "markdown", 247 | "metadata": {}, 248 | "source": [ 249 | "## Задача H\n", 250 | "Дано два числа a и b. Выведите гипотенузу треугольника с заданными катетами." 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 7, 256 | "metadata": { 257 | "collapsed": false 258 | }, 259 | "outputs": [ 260 | { 261 | "name": "stdout", 262 | "output_type": "stream", 263 | "text": [ 264 | "3\n", 265 | "9\n", 266 | "9.486832980505138\n" 267 | ] 268 | } 269 | ], 270 | "source": [ 271 | "from math import sqrt\n", 272 | "a, b = int(input()), int(input())\n", 273 | "print(sqrt(a ** 2 + b ** 2))" 274 | ] 275 | }, 276 | { 277 | "cell_type": "markdown", 278 | "metadata": {}, 279 | "source": [ 280 | "## Задача I\n", 281 | "Даны три целых числа. Найдите наибольшее из них (программа должна вывести ровно одно целое число).\n", 282 | "Какое наименьшее число операторов сравнения (>, <, >=, <=) необходимо для решения этой задачи?" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": 3, 288 | "metadata": { 289 | "collapsed": false 290 | }, 291 | "outputs": [ 292 | { 293 | "name": "stdout", 294 | "output_type": "stream", 295 | "text": [ 296 | "3,6,8\n", 297 | "8\n" 298 | ] 299 | } 300 | ], 301 | "source": [ 302 | "# insert three integers separated by commas\n", 303 | "a, b, c = [int(i) for i in input().split(',')]\n", 304 | "\n", 305 | "if a >= b:\n", 306 | " if a >= c:\n", 307 | " print(a)\n", 308 | " else:\n", 309 | " print(c)\n", 310 | "else:\n", 311 | " if b >= c:\n", 312 | " print(b)\n", 313 | " else:\n", 314 | " print(c)" 315 | ] 316 | }, 317 | { 318 | "cell_type": "markdown", 319 | "metadata": {}, 320 | "source": [ 321 | "## Задача J\n", 322 | "Даны три натуральных числа a, b, c. Определите, существует ли треугольник с такими сторонами. Если треугольник существует, выведите строку YES, иначе выведите строку NO.\n", 323 | "Треугольник — это три точки, не лежащие на одной прямой." 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": 10, 329 | "metadata": { 330 | "collapsed": false 331 | }, 332 | "outputs": [ 333 | { 334 | "name": "stdout", 335 | "output_type": "stream", 336 | "text": [ 337 | "3,8,1\n", 338 | "NO\n" 339 | ] 340 | } 341 | ], 342 | "source": [ 343 | "# insert three integers separated by commas\n", 344 | "a, b, c = [int(i) for i in input().split(',')]\n", 345 | "\n", 346 | "d = max(a, b, c)\n", 347 | "\n", 348 | "print(\"YES\" if a + b + c > 2 * d else \"NO\")" 349 | ] 350 | }, 351 | { 352 | "cell_type": "markdown", 353 | "metadata": {}, 354 | "source": [ 355 | "## Задача K\n", 356 | "Шахматная ладья ходит по горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ладья попасть с первой клетки на вторую одним ходом." 357 | ] 358 | }, 359 | { 360 | "cell_type": "code", 361 | "execution_count": 12, 362 | "metadata": { 363 | "collapsed": false 364 | }, 365 | "outputs": [ 366 | { 367 | "name": "stdout", 368 | "output_type": "stream", 369 | "text": [ 370 | "1,1,4,6\n", 371 | "NO\n" 372 | ] 373 | } 374 | ], 375 | "source": [ 376 | "# insert four integers separated by commas\n", 377 | "x1, y1, x2, y2 = [int(i) for i in input().split(',')]\n", 378 | "\n", 379 | "print(\"YES\" if (x1 == x2 or y1 == y2) else \"NO\")" 380 | ] 381 | }, 382 | { 383 | "cell_type": "markdown", 384 | "metadata": {}, 385 | "source": [ 386 | "## Задача L\n", 387 | "Число $179^{10}$ записали четыре раза подряд. Из получившегося числа извлекли корень степени 10. Сколько получилось?" 388 | ] 389 | }, 390 | { 391 | "cell_type": "code", 392 | "execution_count": 13, 393 | "metadata": { 394 | "collapsed": false 395 | }, 396 | "outputs": [ 397 | { 398 | "name": "stdout", 399 | "output_type": "stream", 400 | "text": [ 401 | "1421847540.1564655\n" 402 | ] 403 | } 404 | ], 405 | "source": [ 406 | "a = int(pow(179, 10))\n", 407 | "b = int(str(a) * 4)\n", 408 | "print(pow(b, 0.1))" 409 | ] 410 | }, 411 | { 412 | "cell_type": "markdown", 413 | "metadata": {}, 414 | "source": [ 415 | "## Задача M\n", 416 | "Дано натуральное число. Требуется определить, является ли год с данным номером високосным. Если год является високосным, то выведите YES, иначе выведите NO. Напомним, что в соответствии с григорианским календарем, год является високосным, если его номер кратен 4, но не кратен 100, а также если он кратен 400." 417 | ] 418 | }, 419 | { 420 | "cell_type": "code", 421 | "execution_count": 14, 422 | "metadata": { 423 | "collapsed": false 424 | }, 425 | "outputs": [ 426 | { 427 | "name": "stdout", 428 | "output_type": "stream", 429 | "text": [ 430 | "3000\n", 431 | "NO\n" 432 | ] 433 | } 434 | ], 435 | "source": [ 436 | "year = int(input())\n", 437 | "\n", 438 | "if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0):\n", 439 | " print(\"YES\")\n", 440 | "else:\n", 441 | " print(\"NO\")" 442 | ] 443 | }, 444 | { 445 | "cell_type": "markdown", 446 | "metadata": {}, 447 | "source": [ 448 | "# Задача N\n", 449 | "Шахматный конь ходит буквой “Г” — на две клетки по вертикали в любом направлении и на одну клетку по горизонтали, или наоборот. Даны две различные клетки шахматной доски, определите, может ли конь попасть с первой клетки на вторую одним ходом." 450 | ] 451 | }, 452 | { 453 | "cell_type": "code", 454 | "execution_count": 17, 455 | "metadata": { 456 | "collapsed": false 457 | }, 458 | "outputs": [ 459 | { 460 | "name": "stdout", 461 | "output_type": "stream", 462 | "text": [ 463 | "3,4,1,6\n", 464 | "NO\n" 465 | ] 466 | } 467 | ], 468 | "source": [ 469 | "# insert four integers separated by commas\n", 470 | "row1, col1, row2, col2 = [int(i) for i in input().split(',')]\n", 471 | "\n", 472 | "horse_steps = [(-2, 1), (-1, 2), (1, 2), (2, 1),\n", 473 | " (2, -1), (1, -2), (-1, -2), (-2, -1)]\n", 474 | "\n", 475 | "print(\"YES\" if (row2 - row1, col2 - col1) in horse_steps else \"NO\")" 476 | ] 477 | } 478 | ], 479 | "metadata": { 480 | "kernelspec": { 481 | "display_name": "Python 2", 482 | "language": "python", 483 | "name": "python2" 484 | }, 485 | "language_info": { 486 | "codemirror_mode": { 487 | "name": "ipython", 488 | "version": 2 489 | }, 490 | "file_extension": ".py", 491 | "mimetype": "text/x-python", 492 | "name": "python", 493 | "nbconvert_exporter": "python", 494 | "pygments_lexer": "ipython2", 495 | "version": "2.7.11" 496 | }, 497 | "name": "seminar1_python_intro_tools.ipynb" 498 | }, 499 | "nbformat": 4, 500 | "nbformat_minor": 0 501 | } 502 | -------------------------------------------------------------------------------- /tasks/lesson3_tasks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true 7 | }, 8 | "source": [ 9 | "
\n", 10 | "\n", 11 | "# MLClass. \"Прикладной анализ данных\"\n", 12 | "# Модуль \"Инструментарий Data Science\"\n", 13 | "\n", 14 | "\n", 15 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 16 | "
\n", 17 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 18 | ] 19 | }, 20 | { 21 | "cell_type": "markdown", 22 | "metadata": {}, 23 | "source": [ 24 | "# Задачи к уроку 3\n", 25 | "http://informatics.mccme.ru/mod/statements/view.php?id=16206#1" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 1, 31 | "metadata": { 32 | "collapsed": true 33 | }, 34 | "outputs": [], 35 | "source": [ 36 | "# Python 2 and 3 compatibility\n", 37 | "# pip install future\n", 38 | "from __future__ import (absolute_import, division,\n", 39 | " print_function, unicode_literals)\n", 40 | "from builtins import *" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "## Задача A\n", 48 | "Даны два целых числа A и B (при этом A $\\leq$ B). Выведите все числа от A до B включительно." 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 1, 54 | "metadata": { 55 | "collapsed": false 56 | }, 57 | "outputs": [], 58 | "source": [ 59 | "## Ваш код здесь" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "## Задача B\n", 67 | "По данному натуральном n вычислите сумму $1^2+2^2+3^2+ \\ldots +n^2$." 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 2, 73 | "metadata": { 74 | "collapsed": false 75 | }, 76 | "outputs": [], 77 | "source": [ 78 | "## Ваш код здесь" 79 | ] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": {}, 84 | "source": [ 85 | "## Задача C\n", 86 | "По данному целому неотрицательному n вычислите значение n!." 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 3, 92 | "metadata": { 93 | "collapsed": false 94 | }, 95 | "outputs": [], 96 | "source": [ 97 | "## Ваш код здесь" 98 | ] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "metadata": {}, 103 | "source": [ 104 | "## Задача D\n", 105 | "По данным целым неотрицательным n и k вычислите значение числа сочетаний из n элементов по k, то есть $\\frac{n!}{k!(n-k)!}$." 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 4, 111 | "metadata": { 112 | "collapsed": false 113 | }, 114 | "outputs": [], 115 | "source": [ 116 | "## Ваш код здесь" 117 | ] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": {}, 122 | "source": [ 123 | "## Задача E\n", 124 | "Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n пингвинов. Изображение одного пингвина имеет размер 5×9 символов, между двумя соседними пингвинами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего пингвина. Для упрощения рисования скопируйте пингвина из примера в среду разработки.\n", 125 | "\n" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 5, 131 | "metadata": { 132 | "collapsed": false 133 | }, 134 | "outputs": [], 135 | "source": [ 136 | "penguine = [\" _~_ \",\n", 137 | " \" (o o) \",\n", 138 | " \" / V \\ \",\n", 139 | " \"/( _ )\\ \",\n", 140 | " \" ^^ ^^ \"]" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 6, 146 | "metadata": { 147 | "collapsed": true 148 | }, 149 | "outputs": [], 150 | "source": [ 151 | "## Ваш код здесь" 152 | ] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "metadata": { 157 | "collapsed": true 158 | }, 159 | "source": [ 160 | "## Задача F\n", 161 | "Шоколадка имеет вид прямоугольника, разделенного на n×m долек. Шоколадку можно один раз разломить по прямой на две части. Определите, можно ли таким образом отломить от шоколадки ровно k долек." 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": 7, 167 | "metadata": { 168 | "collapsed": false 169 | }, 170 | "outputs": [], 171 | "source": [ 172 | "## Ваш код здесь" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": {}, 178 | "source": [ 179 | "## Задача G\n", 180 | "Дано линейное уравнение $ax + b = 0$. Решите уравнение, напечатайте ответ. Если ответов бесконечно много, выведите \"INF\", если их нет - \"NO\"." 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": 8, 186 | "metadata": { 187 | "collapsed": false 188 | }, 189 | "outputs": [], 190 | "source": [ 191 | "## Ваш код здесь" 192 | ] 193 | }, 194 | { 195 | "cell_type": "markdown", 196 | "metadata": {}, 197 | "source": [ 198 | "## Задача H\n", 199 | "Для данного числа n < 100 закончите фразу “На лугу пасется...” одним из возможных продолжений: “n коров”, “n корова”, “n коровы”, правильно склоняя слово “корова”." 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": 9, 205 | "metadata": { 206 | "collapsed": false 207 | }, 208 | "outputs": [], 209 | "source": [ 210 | "## Ваш код здесь" 211 | ] 212 | }, 213 | { 214 | "cell_type": "markdown", 215 | "metadata": {}, 216 | "source": [ 217 | "# Задача I. Диофантово уравнение" 218 | ] 219 | }, 220 | { 221 | "cell_type": "markdown", 222 | "metadata": {}, 223 | "source": [ 224 | "Даны числа a, b, c, d. Выведите в порядке возрастания все целые числа от 0 до 1000, которые являются корнями уравнения $ax^3+bx^2+cx+d=0$." 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": 10, 230 | "metadata": { 231 | "collapsed": false 232 | }, 233 | "outputs": [], 234 | "source": [ 235 | "## Ваш код здесь" 236 | ] 237 | }, 238 | { 239 | "cell_type": "markdown", 240 | "metadata": {}, 241 | "source": [ 242 | "## Задача J\n", 243 | "Квадрат трехзначного числа оканчивается тремя цифрами, равными этому числу. Найдите и выведите все такие числа." 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 11, 249 | "metadata": { 250 | "collapsed": false 251 | }, 252 | "outputs": [], 253 | "source": [ 254 | "## Ваш код здесь" 255 | ] 256 | }, 257 | { 258 | "cell_type": "markdown", 259 | "metadata": {}, 260 | "source": [ 261 | "## Задача K\n", 262 | "По данному натуральному $n \\leq 9$ выведите лесенку из n ступенек, i-я ступенька состоит из чисел от 1 до i без пробелов." 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 12, 268 | "metadata": { 269 | "collapsed": false 270 | }, 271 | "outputs": [], 272 | "source": [ 273 | "## Ваш код здесь" 274 | ] 275 | }, 276 | { 277 | "cell_type": "markdown", 278 | "metadata": {}, 279 | "source": [ 280 | "## Задача L\n", 281 | "Дано три числа. Упорядочите их в порядке неубывания. Программа должна считывать три числа a, b, c, затем программа должна менять их значения так, чтобы стали выполнены условия $a \\leq b \\leq c$, затем программа выводит тройку a, b, c." 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": 13, 287 | "metadata": { 288 | "collapsed": false 289 | }, 290 | "outputs": [], 291 | "source": [ 292 | "## Ваш код здесь" 293 | ] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "metadata": {}, 298 | "source": [ 299 | "## Задача M\n", 300 | "Давным-давно билет на одну поездку в метро стоил 15 рубля, билет на 10 поездок стоил 125 рублей, билет на 60 поездок стоил 440 рублей. Пассажир планирует совершить n поездок. Определите, сколько билетов каждого вида он должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше n, а общая стоимость приобретенных билетов — минимальна." 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": 14, 306 | "metadata": { 307 | "collapsed": false 308 | }, 309 | "outputs": [], 310 | "source": [ 311 | "## Ваш код здесь" 312 | ] 313 | }, 314 | { 315 | "cell_type": "markdown", 316 | "metadata": {}, 317 | "source": [ 318 | "Попробуйте решить как задачу линейного программирования с помощью SciPy" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": 15, 324 | "metadata": { 325 | "collapsed": false 326 | }, 327 | "outputs": [], 328 | "source": [ 329 | "## Ваш код здесь" 330 | ] 331 | }, 332 | { 333 | "cell_type": "markdown", 334 | "metadata": {}, 335 | "source": [ 336 | "## Задача N. Сумма факториалов\n", 337 | "По данному натуральном n вычислите сумму 1! + 2! + 3! + ... +n!. В решении этой задачи можно использовать только один цикл." 338 | ] 339 | }, 340 | { 341 | "cell_type": "code", 342 | "execution_count": 16, 343 | "metadata": { 344 | "collapsed": false 345 | }, 346 | "outputs": [], 347 | "source": [ 348 | "## Ваш код здесь" 349 | ] 350 | } 351 | ], 352 | "metadata": { 353 | "kernelspec": { 354 | "display_name": "Python 2", 355 | "language": "python", 356 | "name": "python2" 357 | }, 358 | "language_info": { 359 | "codemirror_mode": { 360 | "name": "ipython", 361 | "version": 2 362 | }, 363 | "file_extension": ".py", 364 | "mimetype": "text/x-python", 365 | "name": "python", 366 | "nbconvert_exporter": "python", 367 | "pygments_lexer": "ipython2", 368 | "version": "2.7.10" 369 | }, 370 | "name": "seminar1_python_intro_tools.ipynb" 371 | }, 372 | "nbformat": 4, 373 | "nbformat_minor": 0 374 | } 375 | -------------------------------------------------------------------------------- /tasks/lesson4_tasks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "# Задачи к уроку 4\n", 23 | "http://informatics.mccme.ru/mod/statements/view.php?id=16560#1" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": null, 29 | "metadata": { 30 | "collapsed": true 31 | }, 32 | "outputs": [], 33 | "source": [ 34 | "# Python 2 and 3 compatibility\n", 35 | "# pip install future\n", 36 | "from __future__ import (absolute_import, division,\n", 37 | " print_function, unicode_literals)\n", 38 | "from builtins import *" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "## Задача A\n", 46 | "Выведите все элементы списка с четными индексами (то есть A[0], A[2], A[4], ...).\n", 47 | "Программа должна быть эффективной и не выполнять лишних действий!" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 1, 53 | "metadata": { 54 | "collapsed": false 55 | }, 56 | "outputs": [], 57 | "source": [ 58 | "## Ваш код здесь" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "## Задача B\n", 66 | "Дана строка, состоящая из слов, разделенных пробелами. Определите, сколько в ней слов. Используйте для решения задачи метод count." 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 2, 72 | "metadata": { 73 | "collapsed": false 74 | }, 75 | "outputs": [], 76 | "source": [ 77 | "## Ваш код здесь" 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": {}, 83 | "source": [ 84 | "## Задача C\n", 85 | "Дана строка, состоящая ровно из двух слов, разделенных пробелом. Переставьте эти слова местами. Результат запишите в строку и выведите получившуюся строку.\n", 86 | "\n", 87 | "При решении этой задачи нельзя пользоваться циклами и инструкцией if." 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 3, 93 | "metadata": { 94 | "collapsed": false 95 | }, 96 | "outputs": [], 97 | "source": [ 98 | "## Ваш код здесь" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "## Задача D\n", 106 | "Дана строка, в которой буква h встречается минимум два раза. Удалите из этой строки первое и последнее вхождение буквы h, а также все символы, находящиеся между ними." 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 4, 112 | "metadata": { 113 | "collapsed": false 114 | }, 115 | "outputs": [], 116 | "source": [ 117 | "## Ваш код здесь" 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "## Задача E\n", 125 | "Переставьте соседние элементы списка (A[0] c A[1], A[2] c A[3] и т.д.). Если элементов нечетное число, то последний элемент остается на своем месте." 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 5, 131 | "metadata": { 132 | "collapsed": false 133 | }, 134 | "outputs": [], 135 | "source": [ 136 | "## Ваш код здесь" 137 | ] 138 | }, 139 | { 140 | "cell_type": "markdown", 141 | "metadata": {}, 142 | "source": [ 143 | "## Задача F\n", 144 | "Дана строка, в которой буква h встречается как минимум два раза. Разверните последовательность символов, заключенную между первым и последнием появлением буквы h, в противоположном порядке." 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 6, 150 | "metadata": { 151 | "collapsed": false 152 | }, 153 | "outputs": [], 154 | "source": [ 155 | "## Ваш код здесь" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "## Задача G\n", 163 | "Дана строка. Получите новую строку, вставив между двумя символами исходной строки символ *. Выведите полученную строку." 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 7, 169 | "metadata": { 170 | "collapsed": false 171 | }, 172 | "outputs": [], 173 | "source": [ 174 | "## Ваш код здесь" 175 | ] 176 | }, 177 | { 178 | "cell_type": "markdown", 179 | "metadata": {}, 180 | "source": [ 181 | "## Задача H\n", 182 | "В списке все элементы различны. Поменяйте местами минимальный и максимальный элемент этого списка" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": 8, 188 | "metadata": { 189 | "collapsed": false 190 | }, 191 | "outputs": [], 192 | "source": [ 193 | "## Ваш код здесь" 194 | ] 195 | }, 196 | { 197 | "cell_type": "markdown", 198 | "metadata": {}, 199 | "source": [ 200 | "## Задача I\n", 201 | "Дан список чисел, который может содержать до 100000 чисел. Определите, сколько в нем встречается различных чисел.\n", 202 | "\n", 203 | "Примечание. Эту задачу на Питоне можно решить в одну строчку." 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": 9, 209 | "metadata": { 210 | "collapsed": false 211 | }, 212 | "outputs": [], 213 | "source": [ 214 | "## Ваш код здесь" 215 | ] 216 | }, 217 | { 218 | "cell_type": "markdown", 219 | "metadata": {}, 220 | "source": [ 221 | "## Задача J\n", 222 | "Даны два списка чисел, которые могут содержать до 100000 чисел каждый. Посчитайте, сколько чисел содержится одновременно как в первом списке, так и во втором.\n", 223 | "\n", 224 | "Примечание. Эту задачу на Питоне можно решить в одну строчку." 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": 10, 230 | "metadata": { 231 | "collapsed": false 232 | }, 233 | "outputs": [], 234 | "source": [ 235 | "## Ваш код здесь" 236 | ] 237 | }, 238 | { 239 | "cell_type": "markdown", 240 | "metadata": {}, 241 | "source": [ 242 | "## Задача K\n", 243 | "Во входной строке записана последовательность чисел через пробел. Для каждого числа выведите слово YES (в отдельной строке), если это число ранее встречалось в последовательности или NO, если не встречалось." 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 11, 249 | "metadata": { 250 | "collapsed": false 251 | }, 252 | "outputs": [], 253 | "source": [ 254 | "## Ваш код здесь" 255 | ] 256 | }, 257 | { 258 | "cell_type": "markdown", 259 | "metadata": {}, 260 | "source": [ 261 | "## Задача L\n", 262 | "Во входном файле (вы можете читать данные из файла \"../data/mathematics_wiki.txt\") записан текст. Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки.\n", 263 | "\n", 264 | "Определите, сколько различных слов содержится в этом тексте." 265 | ] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": 12, 270 | "metadata": { 271 | "collapsed": false 272 | }, 273 | "outputs": [], 274 | "source": [ 275 | "## Ваш код здесь" 276 | ] 277 | }, 278 | { 279 | "cell_type": "markdown", 280 | "metadata": { 281 | "collapsed": true 282 | }, 283 | "source": [ 284 | "## Задача M\n", 285 | "Аня и Боря любят играть в разноцветные кубики, причем у каждого из них свой набор и в каждом наборе все кубики различны по цвету. Однажды дети заинтересовались, сколько существуют цветов таких, что кубики каждого цвета присутствуют в обоих наборах. Для этого они занумеровали все цвета случайными числами. На этом их энтузиазм иссяк, поэтому вам предлагается помочь им в оставшейся части.\n", 286 | "\n", 287 | "Номер любого цвета — это целое число в пределах от 0 до $10^9$." 288 | ] 289 | }, 290 | { 291 | "cell_type": "code", 292 | "execution_count": 13, 293 | "metadata": { 294 | "collapsed": false 295 | }, 296 | "outputs": [], 297 | "source": [ 298 | "## Ваш код здесь" 299 | ] 300 | }, 301 | { 302 | "cell_type": "markdown", 303 | "metadata": { 304 | "collapsed": true 305 | }, 306 | "source": [ 307 | "## Задача N\n", 308 | "Каждый из N школьников некоторой школы знает $M_i$ языков. Определите, какие языки знают все школьники и языки, которые знает хотя бы один из школьников.\n", 309 | "\n", 310 | "Входные данные\n", 311 | "\n", 312 | "Первая строка входных данных содержит количество школьников N. Далее идет N чисел $M_i$, после каждого из чисел идет $M_i$ строк, содержащих названия языков, которые знает i-й школьник. Длина названий языков не превышает 1000 символов, количество различных языков не более 1000. $1 \\leq N \\leq 1000$, $1 \\leq M_i \\leq 500$.\n", 313 | "\n", 314 | "Выходные данные\n", 315 | "\n", 316 | "В первой строке выведите количество языков, которые знаю все школьники. Начиная со второй строки - список таких языков. Затем - количество языков, которые знает хотя бы один школьник, на следующих строках - список таких языков." 317 | ] 318 | }, 319 | { 320 | "cell_type": "code", 321 | "execution_count": 14, 322 | "metadata": { 323 | "collapsed": false 324 | }, 325 | "outputs": [], 326 | "source": [ 327 | "## Ваш код здесь" 328 | ] 329 | }, 330 | { 331 | "cell_type": "markdown", 332 | "metadata": {}, 333 | "source": [ 334 | "## Задача O\n", 335 | "Во входном файле (вы можете читать данные из файла \"../data/mathematics_wiki.txt\") записан текст. Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки.\n", 336 | "\n", 337 | "Определите, сколько различных слов содержится в этом тексте." 338 | ] 339 | }, 340 | { 341 | "cell_type": "code", 342 | "execution_count": 15, 343 | "metadata": { 344 | "collapsed": false 345 | }, 346 | "outputs": [], 347 | "source": [ 348 | "## Ваш код здесь" 349 | ] 350 | } 351 | ], 352 | "metadata": { 353 | "kernelspec": { 354 | "display_name": "Python 2", 355 | "language": "python", 356 | "name": "python2" 357 | }, 358 | "language_info": { 359 | "codemirror_mode": { 360 | "name": "ipython", 361 | "version": 2 362 | }, 363 | "file_extension": ".py", 364 | "mimetype": "text/x-python", 365 | "name": "python", 366 | "nbconvert_exporter": "python", 367 | "pygments_lexer": "ipython2", 368 | "version": "2.7.10" 369 | } 370 | }, 371 | "nbformat": 4, 372 | "nbformat_minor": 0 373 | } 374 | -------------------------------------------------------------------------------- /tasks/lesson5_tasks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "\n", 9 | "# MLClass. \"Прикладной анализ данных\"\n", 10 | "# Модуль \"Инструментарий Data Science\"\n", 11 | "\n", 12 | "\n", 13 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 14 | "
\n", 15 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": null, 21 | "metadata": { 22 | "collapsed": true 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "# Python 2 and 3 compatibility\n", 27 | "# pip install future\n", 28 | "from __future__ import (absolute_import, division,\n", 29 | " print_function, unicode_literals)\n", 30 | "from builtins import *" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "metadata": {}, 36 | "source": [ 37 | "## Пьяница\n", 38 | "В игре в пьяницу карточная колода раздается поровну двум игрокам. Далее они вскрывают по одной верхней карте, и тот, чья карта старше, забирает себе обе вскрытые карты, которые кладутся под низ его колоды. Тот, кто остается без карт – проигрывает.\n", 39 | "\n", 40 | "Для простоты будем считать, что все карты различны по номиналу, а также, что самая младшая карта побеждает самую старшую карту (\"шестерка берет туза\").\n", 41 | "\n", 42 | "Игрок, который забирает себе карты, сначала кладет под низ своей колоды карту первого игрока, затем карту второго игрока (то есть карта второго игрока оказывается внизу колоды).\n", 43 | "\n", 44 | "Напишите программу, которая моделирует игру в пьяницу и определяет, кто выигрывает. В игре участвует 10 карт, имеющих значения от 0 до 9, большая карта побеждает меньшую, карта со значением 0 побеждает карту 9.\n", 45 | "\n", 46 | "**Входные данные**\n", 47 | "\n", 48 | "Программа получает на вход две строки: первая строка содержит 5 карт первого игрока, вторая – 5 карт второго игрока. Карты перечислены сверху вниз, то есть каждая строка начинается с той карты, которая будет открыта первой.\n", 49 | "\n", 50 | "**Выходные данные**\n", 51 | "\n", 52 | "Программа должна определить, кто выигрывает при данной раздаче, и вывести слово first или second, после чего вывести количество ходов, сделанных до выигрыша. Если на протяжении $10^6$ ходов игра не заканчивается, программа должна вывести слово botva." 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 1, 58 | "metadata": { 59 | "collapsed": false 60 | }, 61 | "outputs": [], 62 | "source": [ 63 | "## Ваш код здесь" 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "metadata": {}, 69 | "source": [ 70 | "# Задачи к уроку 5\n", 71 | "http://informatics.mccme.ru/mod/statements/view.php?id=16625#1" 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": {}, 77 | "source": [ 78 | "## Задача A\n", 79 | "Напишите функцию min4(a, b, c, d), вычисляющую минимум четырех чисел, которая не содержит инструкции if, а использует стандартную функцию min. Считайте четыре целых числа и выведите их минимум." 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 2, 85 | "metadata": { 86 | "collapsed": false 87 | }, 88 | "outputs": [], 89 | "source": [ 90 | "## Ваш код здесь" 91 | ] 92 | }, 93 | { 94 | "cell_type": "markdown", 95 | "metadata": {}, 96 | "source": [ 97 | "## Задача В\n", 98 | "Даны два действительных числа x и y. Проверьте, принадлежит ли точка с координатами (x;y) заштрихованному квадрату (включая его границу). Если точка принадлежит квадрату, выведите слово YES, иначе выведите слово NO. На рисунке сетка проведена с шагом 1.\n", 99 | "\n", 100 | "\n", 101 | "Решение должно содержать функцию IsPointInSquare(x, y), возвращающую True, если точка принадлежит квадрату и False, если не принадлежит. Основная программа должна считать координаты точки, вызвать функцию IsPointInSquare и в зависимости от возвращенного значения вывести на экран необходимое сообщение.\n", 102 | "Функция IsPointInSquare не должна содержать инструкцию if." 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 3, 108 | "metadata": { 109 | "collapsed": false 110 | }, 111 | "outputs": [], 112 | "source": [ 113 | "## Ваш код здесь" 114 | ] 115 | }, 116 | { 117 | "cell_type": "markdown", 118 | "metadata": {}, 119 | "source": [ 120 | "## Задача С\n", 121 | "Дано действительное положительное число a и целое неотрицательное число n. Вычислите $a^n$ не используя циклы и стандартную функцию pow, а используя рекуррентное соотношение $a^n=a*a^{n-1}$.\n", 122 | "\n", 123 | "Решение оформите в виде функции power(a, n)." 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 4, 129 | "metadata": { 130 | "collapsed": false 131 | }, 132 | "outputs": [], 133 | "source": [ 134 | "## Ваш код здесь" 135 | ] 136 | }, 137 | { 138 | "cell_type": "markdown", 139 | "metadata": {}, 140 | "source": [ 141 | "## Задача D\n", 142 | "Дано натуральное число n>1. Проверьте, является ли оно простым. Программа должна вывести слово YES, если число простое и NO, если число составное.\n", 143 | "\n", 144 | "Решение оформите в виде функции IsPrime(n), которая возвращает True для простых чисел и False для составных чисел. Решение должно иметь сложность O($\\sqrt{n}$)." 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 5, 150 | "metadata": { 151 | "collapsed": false 152 | }, 153 | "outputs": [], 154 | "source": [ 155 | "## Ваш код здесь" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "## Задача E\n", 163 | "По данным числам n и k ($0 \\leq k \\leq n$) вычислите $С^k_n$ . Для решения используйте рекуррентное соотношение $С^k_n = С_{n-1}^{k-1} + С_{n-1}^{k}$.\n", 164 | "\n", 165 | "Решение оформите в виде функции C(n, k).\n" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": 6, 171 | "metadata": { 172 | "collapsed": false 173 | }, 174 | "outputs": [], 175 | "source": [ 176 | "## Ваш код здесь" 177 | ] 178 | }, 179 | { 180 | "cell_type": "markdown", 181 | "metadata": {}, 182 | "source": [ 183 | "# Задача F\n", 184 | "Напишите рекурсивную функцию sum(a, b), возвращающую сумму двух целых неотрицательных чисел. Из всех арифметических операций допускаются только +1 и -1. Также нельзя использовать циклы.\n", 185 | "\n" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": 7, 191 | "metadata": { 192 | "collapsed": false 193 | }, 194 | "outputs": [], 195 | "source": [ 196 | "## Ваш код здесь" 197 | ] 198 | }, 199 | { 200 | "cell_type": "markdown", 201 | "metadata": {}, 202 | "source": [ 203 | "## Задача G\n", 204 | "Дано натуральное число N и последовательность из N элементов. Требуется вывести эту последовательность в обратном порядке.\n", 205 | "В программе запрещается объявлять массивы и использовать циклы (даже для ввода и вывода)." 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "execution_count": 8, 211 | "metadata": { 212 | "collapsed": false 213 | }, 214 | "outputs": [], 215 | "source": [ 216 | "## Ваш код здесь" 217 | ] 218 | } 219 | ], 220 | "metadata": { 221 | "kernelspec": { 222 | "display_name": "Python 2", 223 | "language": "python", 224 | "name": "python2" 225 | }, 226 | "language_info": { 227 | "codemirror_mode": { 228 | "name": "ipython", 229 | "version": 2 230 | }, 231 | "file_extension": ".py", 232 | "mimetype": "text/x-python", 233 | "name": "python", 234 | "nbconvert_exporter": "python", 235 | "pygments_lexer": "ipython2", 236 | "version": "2.7.10" 237 | } 238 | }, 239 | "nbformat": 4, 240 | "nbformat_minor": 0 241 | } 242 | -------------------------------------------------------------------------------- /tasks/lesson5_tasks_solutions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "## Автор материала: Юрий Кашницкий, ФКН НИУ ВШЭ\n", 9 | "
\n", 10 | "Материал распространяется на условиях лицензии Ms-RL. Можно использовать в любых целях, кроме коммерческих, но с обязательным упоминанием автора материала." 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": null, 16 | "metadata": { 17 | "collapsed": true 18 | }, 19 | "outputs": [], 20 | "source": [ 21 | "# Python 2 and 3 compatibility\n", 22 | "# pip install future\n", 23 | "from __future__ import (absolute_import, division,\n", 24 | " print_function, unicode_literals)\n", 25 | "from builtins import *" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "## Пьяница\n", 33 | "В игре в пьяницу карточная колода раздается поровну двум игрокам. Далее они вскрывают по одной верхней карте, и тот, чья карта старше, забирает себе обе вскрытые карты, которые кладутся под низ его колоды. Тот, кто остается без карт – проигрывает.\n", 34 | "\n", 35 | "Для простоты будем считать, что все карты различны по номиналу, а также, что самая младшая карта побеждает самую старшую карту (\"шестерка берет туза\").\n", 36 | "\n", 37 | "Игрок, который забирает себе карты, сначала кладет под низ своей колоды карту первого игрока, затем карту второго игрока (то есть карта второго игрока оказывается внизу колоды).\n", 38 | "\n", 39 | "Напишите программу, которая моделирует игру в пьяницу и определяет, кто выигрывает. В игре участвует 10 карт, имеющих значения от 0 до 9, большая карта побеждает меньшую, карта со значением 0 побеждает карту 9.\n", 40 | "\n", 41 | "**Входные данные**\n", 42 | "\n", 43 | "Программа получает на вход две строки: первая строка содержит 5 карт первого игрока, вторая – 5 карт второго игрока. Карты перечислены сверху вниз, то есть каждая строка начинается с той карты, которая будет открыта первой.\n", 44 | "\n", 45 | "**Выходные данные**\n", 46 | "\n", 47 | "Программа должна определить, кто выигрывает при данной раздаче, и вывести слово first или second, после чего вывести количество ходов, сделанных до выигрыша. Если на протяжении $10^6$ ходов игра не заканчивается, программа должна вывести слово botva." 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 10, 53 | "metadata": { 54 | "collapsed": false 55 | }, 56 | "outputs": [ 57 | { 58 | "name": "stdout", 59 | "output_type": "stream", 60 | "text": [ 61 | "1 2 3 4 0\n", 62 | "5 6 7 8 9\n", 63 | "second 17\n" 64 | ] 65 | } 66 | ], 67 | "source": [ 68 | "from queue import Queue\n", 69 | "\n", 70 | "first_player_cards = Queue()\n", 71 | "second_player_cards = Queue()\n", 72 | "\n", 73 | "for num in input().strip().split():\n", 74 | " first_player_cards.put(int(num))\n", 75 | "\n", 76 | "for num in input().strip().split():\n", 77 | " second_player_cards.put(int(num))\n", 78 | "\n", 79 | "def beats(card1, card2):\n", 80 | " \"\"\"\n", 81 | " if card1 beats card2\n", 82 | " \"\"\"\n", 83 | " if abs(card1 - card2) == 9:\n", 84 | " return card1 < card2\n", 85 | " else:\n", 86 | " return card1 > card2\n", 87 | "\n", 88 | "num_rounds = 0\n", 89 | "\n", 90 | "while not first_player_cards.empty() and not second_player_cards.empty():\n", 91 | " if num_rounds >= pow(10, 6):\n", 92 | " print(\"botva\")\n", 93 | " break\n", 94 | " card1 = first_player_cards.get()\n", 95 | " card2 = second_player_cards.get()\n", 96 | "\n", 97 | " if beats(card1, card2):\n", 98 | " first_player_cards.put(card1)\n", 99 | " first_player_cards.put(card2)\n", 100 | " elif beats(card2, card1):\n", 101 | " second_player_cards.put(card1)\n", 102 | " second_player_cards.put(card2)\n", 103 | " num_rounds += 1\n", 104 | "else:\n", 105 | " if not first_player_cards.empty():\n", 106 | " print(\"first\", num_rounds, sep=\" \")\n", 107 | " elif not second_player_cards.empty():\n", 108 | " print(\"second\", num_rounds, sep=\" \")" 109 | ] 110 | }, 111 | { 112 | "cell_type": "markdown", 113 | "metadata": {}, 114 | "source": [ 115 | "# Задачи к уроку 5\n", 116 | "http://informatics.mccme.ru/mod/statements/view.php?id=16625#1" 117 | ] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": {}, 122 | "source": [ 123 | "## Задача A\n", 124 | "Напишите функцию min4(a, b, c, d), вычисляющую минимум четырех чисел, которая не содержит инструкции if, а использует стандартную функцию min. Считайте четыре целых числа и выведите их минимум." 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 1, 130 | "metadata": { 131 | "collapsed": false 132 | }, 133 | "outputs": [ 134 | { 135 | "name": "stdout", 136 | "output_type": "stream", 137 | "text": [ 138 | "3,2,4,1\n", 139 | "1\n" 140 | ] 141 | } 142 | ], 143 | "source": [ 144 | "# Insert 4 integers separated by commas\n", 145 | "a, b, c, d = [int(s) for s in input().split(',')]\n", 146 | "\n", 147 | "def min4(a, b, c, d):\n", 148 | " return min(min(a, b), min(c, d))\n", 149 | "\n", 150 | "print(min4(a, b, c, d))" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "## Задача В\n", 158 | "Даны два действительных числа x и y. Проверьте, принадлежит ли точка с координатами (x;y) заштрихованному квадрату (включая его границу). Если точка принадлежит квадрату, выведите слово YES, иначе выведите слово NO. На рисунке сетка проведена с шагом 1.\n", 159 | "\n", 160 | "\n", 161 | "Решение должно содержать функцию IsPointInSquare(x, y), возвращающую True, если точка принадлежит квадрату и False, если не принадлежит. Основная программа должна считать координаты точки, вызвать функцию IsPointInSquare и в зависимости от возвращенного значения вывести на экран необходимое сообщение.\n", 162 | "Функция IsPointInSquare не должна содержать инструкцию if." 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 2, 168 | "metadata": { 169 | "collapsed": false 170 | }, 171 | "outputs": [ 172 | { 173 | "name": "stdout", 174 | "output_type": "stream", 175 | "text": [ 176 | "3,1\n", 177 | "NO\n" 178 | ] 179 | } 180 | ], 181 | "source": [ 182 | "# Insert 2 floats separated by commas\n", 183 | "x, y = [float(s) for s in input().split(',')]\n", 184 | "\n", 185 | "def IsPointInSquare(x, y):\n", 186 | " return y >= abs(x) - 1 and y <= 1 - abs(x)\n", 187 | "\n", 188 | "print(\"YES\" if IsPointInSquare(x, y) else \"NO\")" 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": {}, 194 | "source": [ 195 | "## Задача С\n", 196 | "Дано действительное положительное число a и целое неотрицательное число n. Вычислите $a^n$ не используя циклы и стандартную функцию pow, а используя рекуррентное соотношение $a^n=a*a^{n-1}$.\n", 197 | "\n", 198 | "Решение оформите в виде функции power(a, n)." 199 | ] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "execution_count": 3, 204 | "metadata": { 205 | "collapsed": false 206 | }, 207 | "outputs": [ 208 | { 209 | "name": "stdout", 210 | "output_type": "stream", 211 | "text": [ 212 | "3\n", 213 | "4\n", 214 | "81.0\n" 215 | ] 216 | } 217 | ], 218 | "source": [ 219 | "a = float(input())\n", 220 | "n = int(input())\n", 221 | "\n", 222 | "def power(a, n):\n", 223 | " if n == 0:\n", 224 | " return 1\n", 225 | " else:\n", 226 | " return a * power(a, n-1)\n", 227 | " \n", 228 | "print(power(a,n))" 229 | ] 230 | }, 231 | { 232 | "cell_type": "markdown", 233 | "metadata": {}, 234 | "source": [ 235 | "## Задача D\n", 236 | "Дано натуральное число n>1. Проверьте, является ли оно простым. Программа должна вывести слово YES, если число простое и NO, если число составное.\n", 237 | "\n", 238 | "Решение оформите в виде функции IsPrime(n), которая возвращает True для простых чисел и False для составных чисел. Решение должно иметь сложность O($\\sqrt{n}$)." 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": 4, 244 | "metadata": { 245 | "collapsed": false 246 | }, 247 | "outputs": [ 248 | { 249 | "name": "stdout", 250 | "output_type": "stream", 251 | "text": [ 252 | "23\n", 253 | "True\n" 254 | ] 255 | } 256 | ], 257 | "source": [ 258 | "from math import sqrt, ceil\n", 259 | "\n", 260 | "n = int(input())\n", 261 | "\n", 262 | "def isPrime(n):\n", 263 | " if n == 2:\n", 264 | " return True\n", 265 | " else:\n", 266 | " for i in range(2, ceil(sqrt(n)) + 1):\n", 267 | " if n % i == 0:\n", 268 | " return False\n", 269 | " return True\n", 270 | "\n", 271 | "print(isPrime(n))" 272 | ] 273 | }, 274 | { 275 | "cell_type": "markdown", 276 | "metadata": {}, 277 | "source": [ 278 | "## Задача E\n", 279 | "По данным числам n и k ($0 \\leq k \\leq n$) вычислите $С^k_n$ . Для решения используйте рекуррентное соотношение $С^k_n = С_{n-1}^{k-1} + С_{n-1}^{k}$.\n", 280 | "\n", 281 | "Решение оформите в виде функции C(n, k).\n" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": 11, 287 | "metadata": { 288 | "collapsed": false 289 | }, 290 | "outputs": [ 291 | { 292 | "name": "stdout", 293 | "output_type": "stream", 294 | "text": [ 295 | "15\n", 296 | "4\n", 297 | "1365\n" 298 | ] 299 | } 300 | ], 301 | "source": [ 302 | "n, k = int(input()), int(input())\n", 303 | "\n", 304 | "def my_combinations(n, k):\n", 305 | " if n == k:\n", 306 | " return 1\n", 307 | " elif k == 0:\n", 308 | " return 1\n", 309 | " else: \n", 310 | " return my_combinations(n-1, k-1) + my_combinations(n-1, k)\n", 311 | " \n", 312 | "print(my_combinations(n, k))" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 12, 318 | "metadata": { 319 | "collapsed": false 320 | }, 321 | "outputs": [ 322 | { 323 | "data": { 324 | "text/plain": [ 325 | "1365.0" 326 | ] 327 | }, 328 | "execution_count": 12, 329 | "metadata": {}, 330 | "output_type": "execute_result" 331 | } 332 | ], 333 | "source": [ 334 | "from math import factorial\n", 335 | "factorial(15) / factorial(4) / factorial(11)" 336 | ] 337 | }, 338 | { 339 | "cell_type": "markdown", 340 | "metadata": {}, 341 | "source": [ 342 | "# Задача F\n", 343 | "Напишите рекурсивную функцию sum(a, b), возвращающую сумму двух целых неотрицательных чисел. Из всех арифметических операций допускаются только +1 и -1. Также нельзя использовать циклы.\n", 344 | "\n" 345 | ] 346 | }, 347 | { 348 | "cell_type": "code", 349 | "execution_count": 13, 350 | "metadata": { 351 | "collapsed": false 352 | }, 353 | "outputs": [ 354 | { 355 | "name": "stdout", 356 | "output_type": "stream", 357 | "text": [ 358 | "45\n", 359 | "32\n", 360 | "77\n" 361 | ] 362 | } 363 | ], 364 | "source": [ 365 | "a, b = int(input()), int(input())\n", 366 | "\n", 367 | "def summa(a, b):\n", 368 | " if a == 0:\n", 369 | " return b\n", 370 | " elif b == 0:\n", 371 | " return a\n", 372 | " else:\n", 373 | " return summa(a + 1, b - 1)\n", 374 | " \n", 375 | "print(summa(a,b))" 376 | ] 377 | }, 378 | { 379 | "cell_type": "markdown", 380 | "metadata": {}, 381 | "source": [ 382 | "## Задача G\n", 383 | "Дано натуральное число N и последовательность из N элементов. Требуется вывести эту последовательность в обратном порядке.\n", 384 | "В программе запрещается объявлять массивы и использовать циклы (даже для ввода и вывода)." 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 19, 390 | "metadata": { 391 | "collapsed": false 392 | }, 393 | "outputs": [ 394 | { 395 | "name": "stdout", 396 | "output_type": "stream", 397 | "text": [ 398 | "4343 345345 35345 345345 233 3333\n", 399 | "3333 233 345345 35345 345345 4343 " 400 | ] 401 | } 402 | ], 403 | "source": [ 404 | "from sys import setrecursionlimit\n", 405 | "setrecursionlimit(100000)\n", 406 | " \n", 407 | "s = input().strip() # in a form \"3 4 5 6 2\"\n", 408 | " \n", 409 | "\n", 410 | "def reverse_recur(s, left, right, left_num, right_num):\n", 411 | " if left == right == 0:\n", 412 | " print(s[left], end=' ')\n", 413 | " return\n", 414 | " if left == right - 1:\n", 415 | " print(left_num + right_num, end=' ')\n", 416 | " return\n", 417 | " elif left == right - 2:\n", 418 | " if s[left + 1] == ' ':\n", 419 | " print(right_num + s[left + 1] + left_num, end=' ')\n", 420 | " else:\n", 421 | " print(left_num + s[left + 1] + right_num, end=' ')\n", 422 | " return\n", 423 | " else:\n", 424 | " if s[right - 1] != ' ':\n", 425 | " right_num = s[right - 1] + right_num\n", 426 | " else:\n", 427 | " print(right_num, end=\" \")\n", 428 | " right_num = ''\n", 429 | " \n", 430 | " if s[left + 1] != ' ':\n", 431 | " left_num = left_num + s[left + 1]\n", 432 | " else:\n", 433 | " saved_left_num = left_num\n", 434 | " left_num = ''\n", 435 | " \n", 436 | " reverse_recur(s, left + 1, right - 1, left_num, right_num)\n", 437 | " \n", 438 | " if s[left + 1] == ' ':\n", 439 | " print(saved_left_num, end=\" \")\n", 440 | " \n", 441 | " \n", 442 | "reverse_recur(s, 0, len(s)-1, s[0], s[-1])" 443 | ] 444 | }, 445 | { 446 | "cell_type": "code", 447 | "execution_count": 23, 448 | "metadata": { 449 | "collapsed": false 450 | }, 451 | "outputs": [], 452 | "source": [ 453 | "def fib_recur(n):\n", 454 | " if n <= 1:\n", 455 | " return 1\n", 456 | " return fib_recur(n - 1) + fib_recur(n - 2)\n", 457 | "\n", 458 | "assert fib_recur(5) == 8" 459 | ] 460 | }, 461 | { 462 | "cell_type": "code", 463 | "execution_count": null, 464 | "metadata": { 465 | "collapsed": true 466 | }, 467 | "outputs": [], 468 | "source": [ 469 | "nose, unittest" 470 | ] 471 | } 472 | ], 473 | "metadata": { 474 | "kernelspec": { 475 | "display_name": "Python 2", 476 | "language": "python", 477 | "name": "python2" 478 | }, 479 | "language_info": { 480 | "codemirror_mode": { 481 | "name": "ipython", 482 | "version": 2 483 | }, 484 | "file_extension": ".py", 485 | "mimetype": "text/x-python", 486 | "name": "python", 487 | "nbconvert_exporter": "python", 488 | "pygments_lexer": "ipython2", 489 | "version": "2.7.11" 490 | } 491 | }, 492 | "nbformat": 4, 493 | "nbformat_minor": 0 494 | } 495 | -------------------------------------------------------------------------------- /unstructured/restful_api.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "# MLClass. \"Прикладной анализ данных\"\n", 9 | "# Модуль \"Инструментарий Data Science\"\n", 10 | "\n", 11 | "\n", 12 | "## Автор материала: Сергей Скрипко\n", 13 | "
\n", 14 | "Материал распространяется на условиях лицензии Creative Commons Attribution-Share Alike 4.0. Можно использовать в любых целях, но с обязательным упоминанием автора курса и аффилиации." 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "# Урок 6. RESTful API" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "## 1. Что это и зачем нужно\n", 29 | "\n", 30 | "С точки зрения информатики каждая функция и метод представляет собой некоторую коробку или функцию с входящими и исходящими данными. На данный момент множество сервисов вроде Google, Twitter, Github, Вконтакте, Facebook, Instagram и предоставляет доступ к своим данным по похожей схеме. На вход принимается обычный http-запрос, в качестве выхода все тот же привычный http-ответ.\n", 31 | "Объясню на картинках" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "Также как часть информации вконтакте доступна без логина, многие API дают доступ к некоторым данным без каких-либо авторизаций. К примеру можно узнать имя и фамилию человека по id:\n", 39 | "\n", 40 | "\n", 41 | "Посмотреть его подписчиков, которые не в друзьях:\n", 42 | "\n", 43 | "\n", 44 | "И увидеть, что это там много \"мертвых собак\"\n", 45 | "" 46 | ] 47 | }, 48 | { 49 | "cell_type": "markdown", 50 | "metadata": { 51 | "collapsed": false 52 | }, 53 | "source": [ 54 | "Здесь вся необходимая входящая информация лежит в урле, как несложно заметить. Причем у API вконтакта на первом скриншоте мы используем функцию users.get, и передаем туда параметром id пользователя. Вообще говоря, синтаксис похож на вызов функции в Python, у входящего параметра есть название и передаваемое значение.\n", 55 | "Однако обойтись одним урлом получается не всегда. К примеру так не получится загрузить картинку с рукописной цифрой для ее распознавания на стороннем сервисе. Во многих случаях входящие данные передаются не в хедере запроса, а в теле с помощью POST-запроса. Тогда протестировать работу API до написания кода можно несколькими способами:\n", 56 | "\n", 57 | "\n", 58 | "\n", 59 | "И на это мы получим следующий ответ от сервера\n", 60 | "\n", 61 | "\n", 62 | "Можно обойтись и средствами локальной машины, если ваша командная строка располагает инструментом \"curl\"\n", 63 | "" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 2, 69 | "metadata": { 70 | "collapsed": false, 71 | "scrolled": false 72 | }, 73 | "outputs": [ 74 | { 75 | "ename": "SyntaxError", 76 | "evalue": "invalid syntax (, line 1)", 77 | "output_type": "error", 78 | "traceback": [ 79 | "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m pip install unirest\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n" 80 | ] 81 | } 82 | ], 83 | "source": [ 84 | "pip install unirest" 85 | ] 86 | }, 87 | { 88 | "cell_type": "markdown", 89 | "metadata": { 90 | "collapsed": false 91 | }, 92 | "source": [ 93 | "https://www.publicapis.com/" 94 | ] 95 | } 96 | ], 97 | "metadata": { 98 | "kernelspec": { 99 | "display_name": "Python 2", 100 | "language": "python", 101 | "name": "python2" 102 | }, 103 | "language_info": { 104 | "codemirror_mode": { 105 | "name": "ipython", 106 | "version": 2 107 | }, 108 | "file_extension": ".py", 109 | "mimetype": "text/x-python", 110 | "name": "python", 111 | "nbconvert_exporter": "python", 112 | "pygments_lexer": "ipython2", 113 | "version": "2.7.10" 114 | }, 115 | "name": "4_Functions.ipynb" 116 | }, 117 | "nbformat": 4, 118 | "nbformat_minor": 0 119 | } 120 | --------------------------------------------------------------------------------