From 2e4f34db94d20257bfdf5810f1eb91778cd3e41a Mon Sep 17 00:00:00 2001 From: oserikov Date: Wed, 16 Sep 2020 04:13:45 +0300 Subject: [PATCH 1/3] moved hws to separate submodules --- .gitmodules | 45 ++++++++++++++++++ _docs/prog/02-if-and-comparison-ops.md | 14 +----- _docs/prog/03-loops.md | 18 +------ _docs/prog/04-lists.md | 65 +------------------------ _docs/prog/05-files.md | 12 +---- _docs/prog/06-write-files.md | 14 +----- _docs/prog/07-functions.md | 17 +------ _docs/prog/10-functions-two.md | 63 +----------------------- _docs/prog/11-rick-and-morty.md | 41 +--------------- _docs/prog/12-functions-and-import.md | 17 +------ _docs/prog/13-dicts.md | 11 +---- _docs/prog/14-nested-dict.md | 21 +------- _docs/prog/15-south-park.md | 3 +- _docs/prog/16-regexp.md | 66 +------------------------- _docs/prog/17-regexp-group.md | 3 +- _docs/prog/18-regexp-sub.md | 3 +- _docs/prog/hw/hw_02_base | 1 + _docs/prog/hw/hw_03_base | 1 + _docs/prog/hw/hw_04_base | 1 + _docs/prog/hw/hw_05_base | 1 + _docs/prog/hw/hw_06_base | 1 + _docs/prog/hw/hw_07_base | 1 + _docs/prog/hw/hw_10_base | 1 + _docs/prog/hw/hw_11_base | 1 + _docs/prog/hw/hw_12_base | 1 + _docs/prog/hw/hw_13_base | 1 + _docs/prog/hw/hw_14_base | 1 + _docs/prog/hw/hw_15_base | 1 + _docs/prog/hw/hw_16_base | 1 + _docs/prog/hw/hw_17_base | 1 + _docs/prog/hw/hw_18_base | 1 + 31 files changed, 79 insertions(+), 349 deletions(-) create mode 100644 .gitmodules create mode 160000 _docs/prog/hw/hw_02_base create mode 160000 _docs/prog/hw/hw_03_base create mode 160000 _docs/prog/hw/hw_04_base create mode 160000 _docs/prog/hw/hw_05_base create mode 160000 _docs/prog/hw/hw_06_base create mode 160000 _docs/prog/hw/hw_07_base create mode 160000 _docs/prog/hw/hw_10_base create mode 160000 _docs/prog/hw/hw_11_base create mode 160000 _docs/prog/hw/hw_12_base create mode 160000 _docs/prog/hw/hw_13_base create mode 160000 _docs/prog/hw/hw_14_base create mode 160000 _docs/prog/hw/hw_15_base create mode 160000 _docs/prog/hw/hw_16_base create mode 160000 _docs/prog/hw/hw_17_base create mode 160000 _docs/prog/hw/hw_18_base diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..cf2c16b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,45 @@ +[submodule "_docs/prog/hw/hw_05_base"] + path = _docs/prog/hw/hw_05_base + url = https://github.com/pykili/05-files +[submodule "_docs/prog/hw/hw_02_base"] + path = _docs/prog/hw/hw_02_base + url = https://github.com/pykili/02-if-and-comparison-ops +[submodule "_docs/prog/hw/hw_03_base"] + path = _docs/prog/hw/hw_03_base + url = https://github.com/pykili/03-loops +[submodule "_docs/prog/hw/hw_04_base"] + path = _docs/prog/hw/hw_04_base + url = https://github.com/pykili/04-lists +[submodule "_docs/prog/hw/hw_06_base"] + path = _docs/prog/hw/hw_06_base + url = https://github.com/pykili/06-write-files +[submodule "_docs/prog/hw/hw_07_base"] + path = _docs/prog/hw/hw_07_base + url = https://github.com/pykili/07-functions +[submodule "_docs/prog/hw/hw_10_base"] + path = _docs/prog/hw/hw_10_base + url = https://github.com/pykili/10-functions-two +[submodule "_docs/prog/hw/hw_11_base"] + path = _docs/prog/hw/hw_11_base + url = https://github.com/pykili/11-rick-and-morty +[submodule "_docs/prog/hw/hw_12_base"] + path = _docs/prog/hw/hw_12_base + url = https://github.com/pykili/12-functions-and-import +[submodule "_docs/prog/hw/hw_13_base"] + path = _docs/prog/hw/hw_13_base + url = https://github.com/pykili/13-dicts +[submodule "_docs/prog/hw/hw_14_base"] + path = _docs/prog/hw/hw_14_base + url = https://github.com/pykili/14-nested-dict +[submodule "_docs/prog/hw/hw_15_base"] + path = _docs/prog/hw/hw_15_base + url = https://github.com/pykili/15-south-park +[submodule "_docs/prog/hw/hw_16_base"] + path = _docs/prog/hw/hw_16_base + url = https://github.com/pykili/16-regexp +[submodule "_docs/prog/hw/hw_17_base"] + path = _docs/prog/hw/hw_17_base + url = https://github.com/pykili/17-regexp-group +[submodule "_docs/prog/hw/hw_18_base"] + path = _docs/prog/hw/hw_18_base + url = https://github.com/pykili/18-regexp-sub diff --git a/_docs/prog/02-if-and-comparison-ops.md b/_docs/prog/02-if-and-comparison-ops.md index 075c33f..d7b39b9 100644 --- a/_docs/prog/02-if-and-comparison-ops.md +++ b/_docs/prog/02-if-and-comparison-ops.md @@ -457,17 +457,5 @@ NameError: name 'true' is not defined +{% include_relative hw/hw_02_base/README.md %} -## Домашнее задание - -Вам надо написать на питоне 6 программ, каждая из которых будет спрашивать у пользователя -3 числа (a, b, c) и печатать на экран удовлетворяют ли введенные числа перечисленным свойствам: - -1. `a` и `b` в сумме дают `c` -2. `a` умножить на `b` равно `c` -3. `a` даёт остаток `c` при делении на `b` -4. `c` является решением линейного уравнения `ax + b = 0` -5. `a` разделить на `b` равно `c` -6. `a` в степени `b` равно `c` - -Оформите каждую программу в виде отдельного файла с расширением `.py`. diff --git a/_docs/prog/03-loops.md b/_docs/prog/03-loops.md index 619b0f2..ab726ee 100644 --- a/_docs/prog/03-loops.md +++ b/_docs/prog/03-loops.md @@ -239,21 +239,5 @@ i превысило 11 Сделать шифровальную программу, которая берёт слово и шифрует каждую букву следующей по алфавиту. Для этого нужно сделать два набора букв и оперировать их индексами. +{% include_relative hw/hw_03_base/README.md %} -## Домашнее задание - -Вам нужно написать программу, которая производит одно из перечисленных ниже действий, в зависимости от номера варианта. Во всех случаях, где требуется вывести буквы, они выводятся по-одной на строку. - -1. Спрашивает у пользователя число `n`, а затем n раз спрашивает пользователя слово. Если вместо слова введена пустая строка `''`, то выводится сообщение «Вы ввели пустую строку». - -2. Спрашивает у пользователя слово (в кириллице). Если вторая буква слова — это «к», «и» или «л», то выводит все чётные буквы этого слова, иначе выводит все нечётные буквы. - -3. Спрашивает у пользователя слово (в кириллице). Если первая буква слова — это «а», «э», «е» или «я», то выводит слово побуквенно в прямом порядке, иначе выводит буквы этого слова задом наперёд. - -4. Спрашивает у пользователя число и выводит на экран все натуральные чётные числа, которые являются степенью двойки (1, 2, 4, 8, ...) и не превышают введённого числа. - -5. Спрашивает у пользователя число и выводит на экран таблицу умножения на это число (т. е., например, если введено число 5, то выводятся строчки вида `1 * 5 = 5`; `2 * 5 = 10`, и так далее — всего десять строчек). - -6. Спрашивает у пользователя слово (в кириллице). Если длина слова меньше 6, то выводит буквы этого слова, иначе выводит все его буквы до середины (не включая среднюю букву, если число букв нечётно). - -7. Спрашивает у пользователя слово (в кириллице). Выводит сначала все чётные буквы этого слова, а затем все нечётные буквы. В обоих случаях пропускает буквы «п», «и» и «о». diff --git a/_docs/prog/04-lists.md b/_docs/prog/04-lists.md index 20b34e5..1edd5af 100644 --- a/_docs/prog/04-lists.md +++ b/_docs/prog/04-lists.md @@ -265,68 +265,5 @@ IndexError: list index out of range ## Домашнее задание -Вам нужно написать программу, которая будет рисовать. +{% include_relative hw/hw_04_base/README.md %} -Программа должна спрашивать имя длинной не менее 4 символов. - -Домашнее задание поделено на 2 части. - -#### Первая часть - -В первой части предлагается заполнить матрицу размером `NxN`, где `N` - это длина введенного имени. -Заполнить матрицу нужно определенным образом в зависимости от варианта, ниже приведены примеры для имени «иван» - -**Варианты 1, 7** - -Справа-налево - -``` -н а в и -н а в и -н а в и -н а в и -``` - - -**Варианты 2, 4, 6** - -Сверху-вниз - -``` -и и и и -в в в в -а а а а -н н н н -``` - -**Варианты 3, 5** - -снизу-вверх - -``` -н н н н -а а а а -в в в в -и и и и -``` - - -#### Вторая часть - -Следует расплющить матрицу в одномерный список, соединив её строки одну за другой. Например, для варианта 3 должен получится следующий список: - -```python -['н', 'н', 'н', 'н', 'а', 'а', 'а', 'а', 'в', 'в', 'в', 'в', 'и', 'и', 'и', 'и'] -``` - -> Программа должна выдавать правильное решение для имени длиной **минимум 4 символа** - -И вывести на экран список элементов в соответствии с номером варианта (нумерация с нуля): - -- `1 вариант`: все элементы, начиная с 1 и до конца с шагом 3 -- `2 вариант`: с 12 по 3 элементы в обратном порядке -- `3 вариант`: с начала и до 11 элемента -- `4 вариант`: все элементы в обратном порядке -- `5 вариант`: с 11 элемента и до конца -- `6 вариант`: с 2 по 15 элементы, индексы которых в этом списке четные -- `7 вариант`: с 2 по 15 элементы, индексы которых в этом списке нечетные diff --git a/_docs/prog/05-files.md b/_docs/prog/05-files.md index 676e5a7..3796e28 100644 --- a/_docs/prog/05-files.md +++ b/_docs/prog/05-files.md @@ -173,15 +173,5 @@ print(text) ## Домашнее задание -Программа должна открывать файл с русским текстом в UTF-8 и сообщать про него следующую информацию (по вариантам): +{% include_relative hw/hw_05_base/README.md %} -1. чему равно среднее число слов в строке; -2. во сколько раз самая короткая строка короче самой длинной; -3. во сколько раз слов длины 3 больше, чем слов длины 1 (если слов длины 1 нет вообще, программа должна об этом сообщить); -4. какой процент от общего количества слов не оканчивается знаком препинания (можно взять только запятую и точку); -5. какой процент слов имеет длину больше 10 символов; -6. какой процент слов начинается с большой буквы; -7. какой процент строк содержит больше 5 слов. - - -Возьмите для этого задания текст произведения Тургенева - [МУМУ](https://storage.yandexcloud.net/pykili/mumu.txt) diff --git a/_docs/prog/06-write-files.md b/_docs/prog/06-write-files.md index a5ff74c..6ef6301 100644 --- a/_docs/prog/06-write-files.md +++ b/_docs/prog/06-write-files.md @@ -132,18 +132,6 @@ title: 6 — Запись файлов ## Домашнее задание -Для каждого варианта своё задание. +{% include_relative hw/hw_06_base/README.md %} -1. Программа должна спрашивать у пользователя слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл каждое из введённых слов задом наперёд (каждое слово на отдельной строчке), удалив из них каждую третью букву. -2. Программа должна спрашивать у пользователя слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл те из введённых слов, длина которых больше 5 символов (каждое слово на отдельной строчке). - -3. Программа должна спрашивать у пользователя слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл все введённые слова, удалив в первом слове первый символ, во втором слове первые два символа, в третьем -- первые три символа и т.д. (каждое слово на отдельной строчке). - -4. Программа должна спрашивать у пользователя латинские слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл те из введённых слов, которые с большой вероятностью являются инфинитивами (каждое слово на отдельной строчке). [Словами типа esse можно не заморачиваться, но пассивный инфинитив надо учесть.] - -5. Программа должна спрашивать у пользователя латинские слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл те из введённых слов, которые с большой вероятностью являются формой 3-го лица пассива настоящего времени (каждое слово на отдельной строчке). [Нерегулярными словами можно не заморачиваться.] - -6. Программа должна получить от пользователя подряд 7 чисел, а после этого записать в файл 7 строчек, состоящих из соответствующего числа букв X (на первой строчке количество иксов равно первому введённому числу, на второй -- второму и т. д.; если введённое число отрицательно, иксов на этой строчке быть не должно). В задаче обязательно пользоваться списком, а не 7 переменными! - -7. Программа должна получить от пользователя подряд 8 слов, а после этого записать в файл 4 строчки с попарными склейками этих слов: на 1-й строчке -- склеенные слова 1 и 2, на второй -- 3 и 4 и т. д. В задаче обязательно пользоваться списком, а не 8 переменными! diff --git a/_docs/prog/07-functions.md b/_docs/prog/07-functions.md index 2dd7016..18469a1 100644 --- a/_docs/prog/07-functions.md +++ b/_docs/prog/07-functions.md @@ -171,20 +171,5 @@ if __name__ == '__main__': ## Домашнее задание -Вам нужно написать программу-гадалку. В этом задании вам нужно использовать в качестве основы [файлы из специального репозитория](https://github.com/pykili/hw07/). Файл `book.txt` содержит текст книги, а в `fortuneteller.py` написан скелет кода, который вам нужно дописать. Весь код, кроме уже написанного блока `if __name__ == '__main__':`, должен быть в функциях. +{% include_relative hw/hw_07_base/README.md %} -Программа предлагает пользователю ввести вопрос и переспрашивает до тех пока не будет введён текст, завершающийся знаком вопроса. Затем методом, зависящим от вашего варианта, выбирается ответ. Ответ нужно вывести вместе с красивой фразой, в духе «В своём хрустальном шаре я вижу ответ на твой вопрос: "огурец"» - -1. Пусть суммарное число букв «а» и «к» в вопросе равно `c`, число слов в нём — `w`, а `x = c*w`. Найдите в тексте `x`-ое с конца слово и используйте его в качестве ответа. Если `x` слишком большой, выдайте второе слово текста. Нумерация с нуля. - -2. Пусть число слов равно `w`. Начиная со строки под номером `w` (нумерация с нуля) найдите первое слово длинной хотя бы два символа, которое начинается с заглавной буквы. Выдайте это слово в качестве ответа. Если `w` слишком велико, то в качестве ответа используйте слово «начало». - -3. Пусть длина последнего слова вопроса равна `c`, а число строк в тексте, начинающихся с кавычки `"` равно `n`. Найдите в тексте `c % n + 1` строку, начинающуюся с символа `"` (нумерация с нуля) и используйте её в качестве ответа. - -4. Пусть вопрос состоит из `w` слов, самое длинное слово в нём — из `c` букв. В качестве ответа выдайте первое слово из строки под номером `w * c` (нумерация с нуля). Если номер слишком большой, то в качестве ответа выдайте слово «джакузи». - -5. Разбейте вопрос на слова и проверьте, встречаются ли они в тексте. Если в тексте встречается хотя бы два из слов вопроса, то ответьте «да», если ровно одно слово, то ответьте «может быть», а если ни одного, то ответьте «нет». Строчные и заглавные буквы считать одинаковыми. Проверять уникальность слов вопроса не нужно. - -6. В качестве ответа на вопрос выведите последнее слово текста, начинающееся на ту же букву, что и вопрос. Строчные и заглавные буквы считать одинаковыми. Если вы не смогли найти такое слово, в качестве ответа используйте строку «42». - -7. Пусть число символов в вопросе равно `c`, а число строк в книге равно `n`. В качестве ответа выдайте самое длинное слово из строки под номером `c % n` (нумерация с нуля). diff --git a/_docs/prog/10-functions-two.md b/_docs/prog/10-functions-two.md index b7de9ff..fcbb3e5 100644 --- a/_docs/prog/10-functions-two.md +++ b/_docs/prog/10-functions-two.md @@ -215,66 +215,5 @@ SyntaxError: non-default argument follows default argument ## Домашнее задание -Ваша задача сделать универсальную функцию для фильтрации слов в тексте. Функция должна работать для любого нормального текста (текста без пробелов подаваться не будет). Текст возьмите любой, какой хотите. Ваш текст не нужно передавать в виде решения. Решение - это просто функция. +{% include_relative hw/hw_10_base/README.md %} -Список фильтров: - -- `startswith` - строка, с которой должно начинаться слово -- `endswith` - строка, на которую должно заканчиваться слово -- `min_length` - минимальная длина слова -- `contains` - строка, которую обязательно должна быть в слове - -Задача будет разбита на несколько вариантов. Каждый вариант реализует только часть фильтров функции. Значения для фильтров будут передаваться в функцию в виде именованных аргументов. - -**Если функция одного варианта вызывается с аргументами другого варианта, то функция должна выдавать ошибку** (про формат ошибки ниже). - -Формат возвращаемого значения: **неизменяемый** список из 3 элементов: - -1. **Код успешности**. Нужно вернуть 0, если пользователь ввел аргумент, который делает другая команда и 1, если все прошло успешно -2. **Сообщение пользователю**. Если произошла ошибка, то помимо кода неуспешности 0 нужно вернуть сообщение об ошибке. -3. **Список отфильтрованных слов**. Если ошибка, то просто пустой список. - -Скелет программы для работы вот такой: - -```python -def words_filter(words, startswith='', min_length =-1, endswith='', contains=''): - '''Фильтрует слова в соответствии с фильтрами - - words: list - Список слов - startswith: str - Строка, с которой должно начинаться слово - endswith: str - Строка, на которую должно заканчиваться слово - min_length: int - Минимальная длина слова - contains: - Строка, которую обязательно должна быть в слове - - Функция возвращает список отфильтрованных слов - ''' - pass -``` - -Как видите, здесь нет функции main и пользовательского ввода через `input()`. Следует написать просто функцию. Где она будет использоваться - не важно. Ввод может прийти из функции `input()`, может из файла, может из ввода пользователя на сайте. Ваша задача - это написать функцию. Конечно, при отладке вы должны будете как-то подавать данные на вход функции (например, через `input()`), но в конечном решении должна быть просто функция. - -Распределение фильтров функции по вариантам: - -- 1, 7 - `endswith`, `min_length ` -- 2, 3, 4 - `contains`, `startswith` -- 5, 6 - `min_length `, `contains` - - -Как видите у некоторых команд повторяются функции. Как говорится, "Доверяй, но распределяй одни и те же задачи по разным командам, чтобы работа точно была сделана". - - -Пример работы с программой для **варианта 3** (в данном случае ввод вообще сделан руками в idle): - -```python ->>> words = ['машина', 'мама', 'подшипник', 'маршрутка'] ->>> filtered_words(words, contains='ш', startswith='ма') -(1, '', ['машина', 'маршрутка']) ->>> ->>> filtered_words(words, contains='ш', min_length=7) -(0, 'Не умею работать с min_length', []) -``` diff --git a/_docs/prog/11-rick-and-morty.md b/_docs/prog/11-rick-and-morty.md index 4ca1da7..4f2a8b6 100644 --- a/_docs/prog/11-rick-and-morty.md +++ b/_docs/prog/11-rick-and-morty.md @@ -136,44 +136,5 @@ if __name__ == '__main__': # Домашнее задание -Вам нужно написать программу, порождающую случайные грамматически правильные, но бессмысленные тексты. 
 +{% include_relative hw/hw_11_base/README.md %} -Вместо тысячи объяснений прикладываем два образца программ: [poem_generator.py](https://github.com/pykili/pykili.github.io/tree/master/py/poem_generator.py) порождает стихотворение на русском языке, написанное трехстопным анапестом, [sentence_generator.py](https://github.com/pykili/pykili.github.io/blob/master/py/sentence_generator.py) порождает текст на английском языке. Посмотрев программы, вы поймёте, как такая программа должна быть устроена и какие в ней должны быть функции. 
Функции, естественно, не обязательно делать ровно такими же, как в этой программе (и даже желательно сделать их как-нибудь по-своему), но каждая ваша функция должна делать какую-то одну определённую операцию — таким образом, функций у вас в программе должно быть не одна и не две.
 - -Для работы вам понадобится функция выбора случайного элемента из списка. Чтобы её использовать, в самом начале программы нужно написать - -```python -import random -``` - -— это указание питону использовать модуль [random](https://docs.python.org/3/library/random.html), в котором хранится нужная функция. А сама функция называется `random.choice()`. Если у Вас есть список array, то после строчки - -```python -x = random.choice(array) -``` - -`x` станет равен какому-то случайно выбранному элементу этого списка. В программе `sentence_generator.py` также используется функция `random.randint(x, y)`, которая выбирает случайное число от `x` до `y`. - -Слова для текстов должны быть взяты из отдельных txt-файлов, открываемых программой. Эти файлы следует загрузить в репозиторий вместе с кодом выполненного домашнего задания. Также желательно в функции уложить вообще весь код. 
Дополнительные ограничения по вариантам:

 - -1. Текст должен представлять собой правильное хайку, то есть стихотворение на русском языке из трёх строк без рифмы, при этом длина первой строки должна быть 5 слогов, второй строки - 7 слогов, третьей строки - 5 слогов.  Количество предложений в таком тексте может быть любым.
 - -2. Текст должен представлять собой стихотворение на русском языке из четырёх строк без рифмы, но написанное с соблюдением одной метрической схемы, кроме трёхстопного анапеста.  - -3. Текст должен состоять из 5 предложений разных типов (утвердительные, вопросительные, отрицательные, условные, побудительные) на русском языке. Типы предложений должны выводиться в случайном порядке.
 - -4. Текст должен представлять собой правильное хайку, то есть стихотворение на одном из изучаемых вами языков (французский, итальянский, японский, немецкий, персидский) из трёх строк без рифмы, при этом длина первой строки должна быть 5 слогов, второй строки - 7 слогов, третьей строки - 5 слогов. Количество предложений в таком тексте может быть любым.
 - -5. Текст должен быть не короче, чем 5 предложений на русском языке. Предложения должны быть сложносочинёнными и сложноподчинёнными.
 - -6. Текст должен состоять из 5 предложений разных типов (утвердительные, вопросительные, отрицательные, условные, побудительные) на изучаемом вами языке (французский, испанский). Типы предложений должны выводиться в случайном порядке.
 - -7. Текст должен представлять собой танка, то есть стихотворение на русском языке из пяти строк без рифмы, при этом длина первой строки должна быть 5 слогов, второй строки - 7 слогов, третьей строки - 5 слогов, четвёртая и пятая строка - по 7 слогов. Количество предложений в таком тексте может быть любым.
 - - -**Выполните задание пройдя по ссылке в GitHub Classroom:** - -- 1 группа: дедлайн - 25 января 2019 23:55 -- 2 группа: дедлайн - 20 января 2019 23:55 -- 3 группа: дедлайн - 20 января 2019 23:55 -- 4 группа: дедлайн - 22 января 2019 23:55 diff --git a/_docs/prog/12-functions-and-import.md b/_docs/prog/12-functions-and-import.md index 1f62481..62a8225 100644 --- a/_docs/prog/12-functions-and-import.md +++ b/_docs/prog/12-functions-and-import.md @@ -245,20 +245,5 @@ if __name__ == '__main__': # Домашнее задание -Пусть какая-то функция получает на вход список из 30 случайных целых чисел от 0 до 100, сгенерированных с помощью модуля random. В вариантах описана функция. +{% include_relative hw/hw_112_base/README.md %} -+1 балл для всех: ответьте коротко на вопрос "Почему модуль random на самом деле НЕ генерирует случайные числа?" - -1. Функция берёт два случайных числа из этого списка (с помощью модуля random) и считает по ним количество всевозможных сочетаний этих чисел с точки зрения теории вероятности, С из n по k (использовать функцию из модуля math -- factorial). Количество сочетаний (в формате float) печатается. k должно быть меньше n - -2. Функция возвращает произведение значений списка. Нужно пользоваться модулем math. Руководствоваться надо тем, что exp(log(a) + log(b)) = a * b - -3. Функция возвращает строку из 30 букв. Список, полученный на вход, задает порядок букв в строке по номеру буквы в алфавите. - -4. Функция берёт из списка 4 случайных числа, условно принимает их за две точки в двумерном пространстве и возвращает евклидово расстояние между этими точками. Использовать модули random и math. - -5. Функция перемешивает список с помощью random.shuffle(), сравнивает его с исходным списком и возвращает количество индексов, значение элемента по которым поменялось. Запустите функцию в цикле 100 раз и напечатайте в скольки процентов случаев меняются все элементы списка. - -6. Функция возвращает среднее геометрическое списка. Вомпользуйтесь модулем math. Отдельно вне функции покажите, что ее результат лежит между минимальным и максимальным значениями списка для 20 случаев. (Для это нужно на каждой итерации генерировать подаваемый на вход список заново) - -7. Функция возвращает среднее арифметическое элементов списка, округлённое вверх. Используйте модуль math. diff --git a/_docs/prog/13-dicts.md b/_docs/prog/13-dicts.md index 591f8f7..0db0303 100644 --- a/_docs/prog/13-dicts.md +++ b/_docs/prog/13-dicts.md @@ -249,14 +249,5 @@ counter = collections.Counter(words) # Домашнее задание -Программа с помощью отдельной функции принимает от пользователя название файла с английским текстом, читает этот файл и сообщает (по вариантам): +{% include_relative hw/hw_13_base/README.md %} -1. сколько в тексте форм на -ing (слова типа during и ring можно тоже считать) и сколько раз в тексте встречается форма на -ing, введенная пользователем. -2. сколько в тексте разных существительных с суффиксом -ness и какое существительное из них имеет максимальную частотность. -3. сколько в тексте существительных с суффиксом -hood, какое существительное имеет минимальную частотность, а также выводит слова, от которых эти существительные образованы (например, если нашлось childhood, то нужно напечатать child, и так для всех слов с этим суффиксом). -4. сколько в тексте форм на -ed, а также сколько из них образованы от глаголов на -y  или -e (например, studied, lied). Омонимией типа red можно не заморачиваться. -5. сколько в тексте прилагательных с суффиксом -ous, и какая средняя длина такого прилагательного. -6. какова частотность слов с приставкой omni- в тексте и частотность слов без приставки omni- (то есть, например, сообщает, сколько раз в тексте встречается слово omnibenevolent и сколько раз встречается слово benevolent, и так для всех слов с приставкой omni-) -7. сколько в тексте слов с приставкой un- (слова типа uncle тоже можно считать) и какой процент из них имеет длину большую, чем число, введенное пользователем (если пользователь ввел число 5, то какой процент слов с приставкой un- длиннее 5 символов). - -Весь код должен быть в функциях. Например, чтение файла — одна функция, поиск нужных слов — другая функция, подсчет частотности слова, которое ввел пользователь — третья функция, и т.д. Тестировать можно, например, на [«Гордости и предубеждении»](https://raw.githubusercontent.com/pykili/pykili.github.io/master/content/Pride_and_Prejudice.txt). diff --git a/_docs/prog/14-nested-dict.md b/_docs/prog/14-nested-dict.md index e91f1ca..0cc5a0f 100644 --- a/_docs/prog/14-nested-dict.md +++ b/_docs/prog/14-nested-dict.md @@ -188,25 +188,8 @@ li3 = [i*j -# Домашнее задание -**больше, чем обычно, и на подольше** +## Домашнее задание -Вам нужно написать программу, которая загадывает персонажей "Звёздных войн". Загадав персонажа, программа показывает подсказку в виде частотного биграммного словосочетания из реплик этого персонажа, и ждёт ответа пользователя, после чего сообщает, угадал он или нет. Например, если загадан персонаж «THREEPIO», можно показать подсказку «Master Luke». -Реплики персонажей нужно брать из сценариев ЗВ, [ссылка на страницу датасета сценариев](https://www.kaggle.com/xvivancos/star-wars-movie-scripts). +{% include_relative hw/hw_14_base/README.md %} -Пользователь может попросить подсказку. Тогда нужно выдать в ответ какую-то (если есть) информацию о загаданном персонаже из датасета2 [ссылка на страницу датасета базы знаний ЗВ](https://www.kaggle.com/jsphyg/star-wars). - - -В задании обязательно использовать словарь. Когда читаете csv, используйте DictReader. - - -Дополнительные свойства программы по вариантам: - -1. После каждой попытки угадать персонажа вероятность того, что пользователю разрешена ещё одна попытка, обратно пропорциональна частоте реплик персонажа -- можно поиграть с конкретной математикой, но отгадывая редких персонажей должно быть проще получить доп. попытки [ссылка на SO](https://stackoverflow.com/questions/5886987/true-or-false-output-based-on-a-probability); -2. Пользователь может выбрать подмножество персонажей, одного из которых загадает программа -- нужно спросить список интересных персонажей в начале работы программы; -3. Пользователю за раз показывается столько реплик персонажа, сколько в его имени букв по модулю 4; -4. Вместе с репликой подсказывается, из какого сезона взята реплика; -5. Вместе с репликой подсказывается, чьи реплики были в сценарии до и после показанной; -6. Программа показывает не биграммы, а триграммы; -7. В время ([см. либу datetime](https://pythonworld.ru/moduli/modul-datetime.html)) с полуночи до часу ночи программа сообщает пользователю о том, что он выиграл или проиграл, напечатав имя персонажа ASCII-артом (генерировать его не надо, можно захардкодить). diff --git a/_docs/prog/15-south-park.md b/_docs/prog/15-south-park.md index 845cf83..2e2202f 100644 --- a/_docs/prog/15-south-park.md +++ b/_docs/prog/15-south-park.md @@ -150,4 +150,5 @@ def episodes_with_word(d, word, at_most): # Домашнее задание -**???** +{% include_relative hw/hw_15_base/README.md %} + diff --git a/_docs/prog/16-regexp.md b/_docs/prog/16-regexp.md index 88b4348..b184cbb 100644 --- a/_docs/prog/16-regexp.md +++ b/_docs/prog/16-regexp.md @@ -100,69 +100,5 @@ digits_str = ''.join(digits) # '301930' ## Домашнее задание -Задача для всех вариантов – написать 10 функций, использующих регулярные выражения. Решение не должно содержать в себе ничего, кроме функций. Для того, чтобы удалять из текста подстроки, соответствующие определённому паттерну, воспользуйтесь функцией [`re.sub`](https://docs.python.org/3/library/re.html#re.sub). +{% include_relative hw/hw_16_base/README.md %} -Скелет программы для работы вот такой: - -```python -def phone_num_validation(string): - pass - - -def date_validation(string): - pass - - -def roman_num_validation(string): - pass - - -def ipv4_validation(string): - pass - - -def whitespace_cleaning(filename): - pass - - -def named_entitites_counter(filename): - pass - - -def numbering_cleaning(filename): - pass - - -def loanwords_extraction(filename): - pass - - -def html_tag_extraction(filename): - pass - - -def html_tag_cleaning(filename): - pass -``` - -Первые 4 функции принимают на вход строку и возвращают `True` или `False` в зависимости от того, является ли строка: - -* номером мобильного телефона формата +7 (9ХХ) ХХХ-ХХ-ХХ -* датой формата DD.MM.YYYY в диапазоне от 1000 до 1999 года включительно -* [числом в римской системе счисления](https://ru.wikibooks.org/wiki/Римская_система_счисления) -* [валидным IPv4 адресом в десятичной с точками форме записи](https://ru.wikipedia.org/wiki/IPv4#Представление_адреса) (например, `127.0.0.1`) - - -Следующие 4 функции принимают на вход название текстового файла с русским текстом в кодировке UTF-8 и: - -* удаляет из текста все лишние пробелы и переносы строк – заменяет все последовательности из двух и более пробелов или переносов строк на один пробел или перенос строки соотвественно, и возвращает очищенный текст. -* возвращает частотный словарь (воспользуйтесь классом `collections.Counter`) всех словоформ имён собственных, кроме тех, которые стоят в начале предложения -* удаляет из текста нумерацию глав и возвращает очищенный текст. Нумерацией глав считать любые арабские или римские числа, находящиеся на отдельной строке (после числа может стоять одна точка). -* возвращает список заимствований в тексте. Заимствованиями считать любые последовательности букв латинского алфавита (кроме римских цифр), разделённых пробелами и переносами строк (примеры из тестового текста: `'Hollywood Canteen'`, `'Black and Tan Fantasy'`). **Подсказка**: пользуйтесь функциями, написанными ранее. - -Последние 2 функции принимают на вход название HTML-файла в кодировке UTF-8 и: - -* возвращает список всех HTML-тэгов. -* чистит текст файла от HTML-тэгов и возвращает очищенный текст. - -Тестировать можно, например, на "Пене дней" ([txt](https://raw.githubusercontent.com/pykili/pykili.github.io/master/content/pena0.txt), [html](https://raw.githubusercontent.com/pykili/pykili.github.io/master/content/pena0.html)). diff --git a/_docs/prog/17-regexp-group.md b/_docs/prog/17-regexp-group.md index 090c472..53081cb 100644 --- a/_docs/prog/17-regexp-group.md +++ b/_docs/prog/17-regexp-group.md @@ -88,4 +88,5 @@ else: # Домашнее задание -[Продолжаем делать задание по регуляркам](/prog/16-regexp#домашнее-задание) +{% include_relative hw/hw_17_base/README.md %} + diff --git a/_docs/prog/18-regexp-sub.md b/_docs/prog/18-regexp-sub.md index 1b68e09..b5f42d2 100644 --- a/_docs/prog/18-regexp-sub.md +++ b/_docs/prog/18-regexp-sub.md @@ -153,4 +153,5 @@ def get_mail_provider(email): # Домашнее задание -TBD +{% include_relative hw/hw_18_base/README.md %} + diff --git a/_docs/prog/hw/hw_02_base b/_docs/prog/hw/hw_02_base new file mode 160000 index 0000000..e50670e --- /dev/null +++ b/_docs/prog/hw/hw_02_base @@ -0,0 +1 @@ +Subproject commit e50670ef951b17fc075479ec2cb0fb75031e1741 diff --git a/_docs/prog/hw/hw_03_base b/_docs/prog/hw/hw_03_base new file mode 160000 index 0000000..11b56ff --- /dev/null +++ b/_docs/prog/hw/hw_03_base @@ -0,0 +1 @@ +Subproject commit 11b56ff1875ea6c595356178d6f4d6aa196fc4e5 diff --git a/_docs/prog/hw/hw_04_base b/_docs/prog/hw/hw_04_base new file mode 160000 index 0000000..442b77f --- /dev/null +++ b/_docs/prog/hw/hw_04_base @@ -0,0 +1 @@ +Subproject commit 442b77fb99e0b430a68898c38bb561763b6456ee diff --git a/_docs/prog/hw/hw_05_base b/_docs/prog/hw/hw_05_base new file mode 160000 index 0000000..e4eeb7f --- /dev/null +++ b/_docs/prog/hw/hw_05_base @@ -0,0 +1 @@ +Subproject commit e4eeb7f03ceb0f15de14e9b9c5745797f2b27b47 diff --git a/_docs/prog/hw/hw_06_base b/_docs/prog/hw/hw_06_base new file mode 160000 index 0000000..3eaa070 --- /dev/null +++ b/_docs/prog/hw/hw_06_base @@ -0,0 +1 @@ +Subproject commit 3eaa070ebfa4b63f3bca39b6fa50caaa95620703 diff --git a/_docs/prog/hw/hw_07_base b/_docs/prog/hw/hw_07_base new file mode 160000 index 0000000..fa195af --- /dev/null +++ b/_docs/prog/hw/hw_07_base @@ -0,0 +1 @@ +Subproject commit fa195afd51eb4b3573d45594ea594e6b5fcbd700 diff --git a/_docs/prog/hw/hw_10_base b/_docs/prog/hw/hw_10_base new file mode 160000 index 0000000..e91be93 --- /dev/null +++ b/_docs/prog/hw/hw_10_base @@ -0,0 +1 @@ +Subproject commit e91be93d43c3c2a180d01be1cc56e6d00006742b diff --git a/_docs/prog/hw/hw_11_base b/_docs/prog/hw/hw_11_base new file mode 160000 index 0000000..ec0f1da --- /dev/null +++ b/_docs/prog/hw/hw_11_base @@ -0,0 +1 @@ +Subproject commit ec0f1dad9f8a1d8ad590f2d407363a4066507752 diff --git a/_docs/prog/hw/hw_12_base b/_docs/prog/hw/hw_12_base new file mode 160000 index 0000000..d541fb2 --- /dev/null +++ b/_docs/prog/hw/hw_12_base @@ -0,0 +1 @@ +Subproject commit d541fb2211dc1add73730e0d7d19194414042ad9 diff --git a/_docs/prog/hw/hw_13_base b/_docs/prog/hw/hw_13_base new file mode 160000 index 0000000..405c8c5 --- /dev/null +++ b/_docs/prog/hw/hw_13_base @@ -0,0 +1 @@ +Subproject commit 405c8c51fc3c9068d4d996bc9ae04a860399b326 diff --git a/_docs/prog/hw/hw_14_base b/_docs/prog/hw/hw_14_base new file mode 160000 index 0000000..4a78baa --- /dev/null +++ b/_docs/prog/hw/hw_14_base @@ -0,0 +1 @@ +Subproject commit 4a78baaf352fccacddc346fecb45b3dabe1a787e diff --git a/_docs/prog/hw/hw_15_base b/_docs/prog/hw/hw_15_base new file mode 160000 index 0000000..bba7a7a --- /dev/null +++ b/_docs/prog/hw/hw_15_base @@ -0,0 +1 @@ +Subproject commit bba7a7a7acb0f7e513a7f2f5a537e3e87e46282b diff --git a/_docs/prog/hw/hw_16_base b/_docs/prog/hw/hw_16_base new file mode 160000 index 0000000..92fedef --- /dev/null +++ b/_docs/prog/hw/hw_16_base @@ -0,0 +1 @@ +Subproject commit 92fedef7268fcc22372716e53f720fdab9365c96 diff --git a/_docs/prog/hw/hw_17_base b/_docs/prog/hw/hw_17_base new file mode 160000 index 0000000..2930f7a --- /dev/null +++ b/_docs/prog/hw/hw_17_base @@ -0,0 +1 @@ +Subproject commit 2930f7aa740ffa1d50a163227b0cb95a6c0c6e50 diff --git a/_docs/prog/hw/hw_18_base b/_docs/prog/hw/hw_18_base new file mode 160000 index 0000000..c687428 --- /dev/null +++ b/_docs/prog/hw/hw_18_base @@ -0,0 +1 @@ +Subproject commit c687428e3d19bbc3c4dc773c6f3760940f6576ee From 6a766ba9a96e5687665ef678a931f4cfd5f94a63 Mon Sep 17 00:00:00 2001 From: oserikov Date: Wed, 16 Sep 2020 04:18:59 +0300 Subject: [PATCH 2/3] typo fix --- _docs/prog/12-functions-and-import.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_docs/prog/12-functions-and-import.md b/_docs/prog/12-functions-and-import.md index 62a8225..57f3da3 100644 --- a/_docs/prog/12-functions-and-import.md +++ b/_docs/prog/12-functions-and-import.md @@ -245,5 +245,5 @@ if __name__ == '__main__': # Домашнее задание -{% include_relative hw/hw_112_base/README.md %} +{% include_relative hw/hw_12_base/README.md %} From 9661da91c9e7d0687df7b026ac5cf777d1c143b7 Mon Sep 17 00:00:00 2001 From: oserikov Date: Wed, 16 Sep 2020 04:35:14 +0300 Subject: [PATCH 3/3] headings fix --- _docs/prog/03-loops.md | 2 ++ _docs/prog/04-lists.md | 2 +- _docs/prog/05-files.md | 2 +- _docs/prog/06-write-files.md | 2 +- _docs/prog/07-functions.md | 2 +- _docs/prog/10-functions-two.md | 2 +- _docs/prog/11-rick-and-morty.md | 2 +- _docs/prog/12-functions-and-import.md | 2 +- _docs/prog/13-dicts.md | 2 +- _docs/prog/14-nested-dict.md | 2 +- _docs/prog/15-south-park.md | 2 +- _docs/prog/16-regexp.md | 2 +- _docs/prog/17-regexp-group.md | 2 +- _docs/prog/18-regexp-sub.md | 2 +- 14 files changed, 15 insertions(+), 13 deletions(-) diff --git a/_docs/prog/03-loops.md b/_docs/prog/03-loops.md index ab726ee..0aa3cf2 100644 --- a/_docs/prog/03-loops.md +++ b/_docs/prog/03-loops.md @@ -239,5 +239,7 @@ i превысило 11 Сделать шифровальную программу, которая берёт слово и шифрует каждую букву следующей по алфавиту. Для этого нужно сделать два набора букв и оперировать их индексами. + + {% include_relative hw/hw_03_base/README.md %} diff --git a/_docs/prog/04-lists.md b/_docs/prog/04-lists.md index 1edd5af..8f1595d 100644 --- a/_docs/prog/04-lists.md +++ b/_docs/prog/04-lists.md @@ -263,7 +263,7 @@ IndexError: list index out of range Можно реализовать консольную программу для игры в крестики-нолики, которая на вход запрашивает координаты крестика или нолика, а на выход выдает изображение игрового поля с отметками. -## Домашнее задание + {% include_relative hw/hw_04_base/README.md %} diff --git a/_docs/prog/05-files.md b/_docs/prog/05-files.md index 3796e28..c16b2ad 100644 --- a/_docs/prog/05-files.md +++ b/_docs/prog/05-files.md @@ -171,7 +171,7 @@ print(text) * Посчитайте число гласных и согласных в тексте. * Посчитайте сколько раз в тексте встретился предлог «под» или любой другой. -## Домашнее задание + {% include_relative hw/hw_05_base/README.md %} diff --git a/_docs/prog/06-write-files.md b/_docs/prog/06-write-files.md index 6ef6301..41c47a7 100644 --- a/_docs/prog/06-write-files.md +++ b/_docs/prog/06-write-files.md @@ -130,7 +130,7 @@ title: 6 — Запись файлов При таком способе чтения python не будет считывать файл целиком, а будет считать построчно. То есть при чтении какого-угодно файла одновременно мы будем читать только одну строку. И 16 терабайт пройдут незаметно. -## Домашнее задание + {% include_relative hw/hw_06_base/README.md %} diff --git a/_docs/prog/07-functions.md b/_docs/prog/07-functions.md index 18469a1..57845d3 100644 --- a/_docs/prog/07-functions.md +++ b/_docs/prog/07-functions.md @@ -169,7 +169,7 @@ if __name__ == '__main__': ``` -## Домашнее задание + {% include_relative hw/hw_07_base/README.md %} diff --git a/_docs/prog/10-functions-two.md b/_docs/prog/10-functions-two.md index fcbb3e5..3804d51 100644 --- a/_docs/prog/10-functions-two.md +++ b/_docs/prog/10-functions-two.md @@ -213,7 +213,7 @@ SyntaxError: non-default argument follows default argument Этим нужно **пользоваться с осторожностью**. Если в функцию передается много параметров (больше 3), то лучше писать имя каждого параметра. -## Домашнее задание + {% include_relative hw/hw_10_base/README.md %} diff --git a/_docs/prog/11-rick-and-morty.md b/_docs/prog/11-rick-and-morty.md index 4f2a8b6..e6acc11 100644 --- a/_docs/prog/11-rick-and-morty.md +++ b/_docs/prog/11-rick-and-morty.md @@ -134,7 +134,7 @@ if __name__ == '__main__': ``` -# Домашнее задание + {% include_relative hw/hw_11_base/README.md %} diff --git a/_docs/prog/12-functions-and-import.md b/_docs/prog/12-functions-and-import.md index 57f3da3..7d8b908 100644 --- a/_docs/prog/12-functions-and-import.md +++ b/_docs/prog/12-functions-and-import.md @@ -243,7 +243,7 @@ if __name__ == '__main__': ``` -# Домашнее задание + {% include_relative hw/hw_12_base/README.md %} diff --git a/_docs/prog/13-dicts.md b/_docs/prog/13-dicts.md index 0db0303..be587b0 100644 --- a/_docs/prog/13-dicts.md +++ b/_docs/prog/13-dicts.md @@ -247,7 +247,7 @@ counter = collections.Counter(words) -# Домашнее задание + {% include_relative hw/hw_13_base/README.md %} diff --git a/_docs/prog/14-nested-dict.md b/_docs/prog/14-nested-dict.md index 0cc5a0f..9e1202e 100644 --- a/_docs/prog/14-nested-dict.md +++ b/_docs/prog/14-nested-dict.md @@ -188,7 +188,7 @@ li3 = [i*j -## Домашнее задание + {% include_relative hw/hw_14_base/README.md %} diff --git a/_docs/prog/15-south-park.md b/_docs/prog/15-south-park.md index 2e2202f..0cdb9d3 100644 --- a/_docs/prog/15-south-park.md +++ b/_docs/prog/15-south-park.md @@ -148,7 +148,7 @@ def episodes_with_word(d, word, at_most): return episodes ``` -# Домашнее задание + {% include_relative hw/hw_15_base/README.md %} diff --git a/_docs/prog/16-regexp.md b/_docs/prog/16-regexp.md index b184cbb..aab6be6 100644 --- a/_docs/prog/16-regexp.md +++ b/_docs/prog/16-regexp.md @@ -98,7 +98,7 @@ digits_list = re.findall(r'\d', 'Я родился 30 февраля 1930 год digits_str = ''.join(digits) # '301930' ``` -## Домашнее задание + {% include_relative hw/hw_16_base/README.md %} diff --git a/_docs/prog/17-regexp-group.md b/_docs/prog/17-regexp-group.md index 53081cb..ff5a847 100644 --- a/_docs/prog/17-regexp-group.md +++ b/_docs/prog/17-regexp-group.md @@ -86,7 +86,7 @@ else: ``` -# Домашнее задание + {% include_relative hw/hw_17_base/README.md %} diff --git a/_docs/prog/18-regexp-sub.md b/_docs/prog/18-regexp-sub.md index b5f42d2..a7619c4 100644 --- a/_docs/prog/18-regexp-sub.md +++ b/_docs/prog/18-regexp-sub.md @@ -151,7 +151,7 @@ def get_mail_provider(email): 'yandex.ru' ``` -# Домашнее задание + {% include_relative hw/hw_18_base/README.md %}