├── .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 | 
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 |
--------------------------------------------------------------------------------