Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -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
14 changes: 1 addition & 13 deletions _docs/prog/02-if-and-comparison-ops.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
18 changes: 2 additions & 16 deletions _docs/prog/03-loops.md
Original file line number Diff line number Diff line change
Expand Up @@ -239,21 +239,7 @@ 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. Спрашивает у пользователя слово (в кириллице). Выводит сначала все чётные буквы этого слова, а затем все нечётные буквы. В обоих случаях пропускает буквы «п», «и» и «о».
67 changes: 2 additions & 65 deletions _docs/prog/04-lists.md
Original file line number Diff line number Diff line change
Expand Up @@ -263,70 +263,7 @@ 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 элементы, индексы которых в этом списке нечетные
14 changes: 2 additions & 12 deletions _docs/prog/05-files.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,17 +171,7 @@ 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)
16 changes: 2 additions & 14 deletions _docs/prog/06-write-files.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,20 +130,8 @@ title: 6 &mdash; Запись файлов
При таком способе чтения python не будет считывать файл целиком, а будет считать построчно.
То есть при чтении какого-угодно файла одновременно мы будем читать только одну строку. И 16 терабайт пройдут незаметно.

## Домашнее задание
<!-- ====================================================================== -->

Для каждого варианта своё задание.
{% 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 переменными!
19 changes: 2 additions & 17 deletions _docs/prog/07-functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,22 +169,7 @@ 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` (нумерация с нуля).
Loading