egekit-study 1.2.0__tar.gz → 1.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {egekit_study-1.2.0 → egekit_study-1.2.1}/GUIDE.html +9 -5
- {egekit_study-1.2.0 → egekit_study-1.2.1}/GUIDE.md +8 -4
- {egekit_study-1.2.0 → egekit_study-1.2.1}/PKG-INFO +22 -3
- {egekit_study-1.2.0 → egekit_study-1.2.1}/README.md +21 -2
- {egekit_study-1.2.0 → egekit_study-1.2.1}/RUSSIAN_NAMES.md +1 -1
- {egekit_study-1.2.0 → egekit_study-1.2.1}/VALIDATION.md +8 -2
- {egekit_study-1.2.0 → egekit_study-1.2.1}/build_docs.py +4 -3
- {egekit_study-1.2.0 → egekit_study-1.2.1}/egekit.py +62 -9
- {egekit_study-1.2.0 → egekit_study-1.2.1}/egekit_study.egg-info/PKG-INFO +22 -3
- {egekit_study-1.2.0 → egekit_study-1.2.1}/examples_man.py +2 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/pyproject.toml +1 -1
- {egekit_study-1.2.0 → egekit_study-1.2.1}/tests/test_manual.py +20 -2
- {egekit_study-1.2.0 → egekit_study-1.2.1}/LICENSE +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/MANIFEST.in +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/egekit_study.egg-info/SOURCES.txt +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/egekit_study.egg-info/dependency_links.txt +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/egekit_study.egg-info/top_level.txt +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/examples.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/examples_ru.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/setup.cfg +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/tests/test_egekit.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/tests/test_russian_names.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}/verify_official.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.1}//320/265/320/263/321/215.py" +0 -0
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
:root{color-scheme:light;--ink:#172a3a;--blue:#075c80;--line:#dbe5ea;--pale:#edf5f8}
|
|
5
5
|
*{box-sizing:border-box}body{margin:0;background:#f5f7f9;color:var(--ink);font:16px/1.65 system-ui,sans-serif}header{background:#122d40;color:white;padding:48px max(24px,calc((100vw - 1100px)/2))}header p{max-width:870px;color:#d4e7ef}h1{font-size:clamp(30px,5vw,48px);line-height:1.15;margin:8px 0 24px}h2{font-size:26px;margin:44px 0 18px}h3{margin:0;color:var(--blue);font-size:21px;overflow-wrap:anywhere}.eyebrow{letter-spacing:2px;font-size:12px;text-transform:uppercase}.wrap{max-width:1150px;margin:auto;padding:0 24px 64px}a{color:var(--blue)}header a{color:#bfe5f8}.intro,article{background:white;border:1px solid var(--line);padding:24px;border-radius:12px;margin:14px 0}pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#eef3f6;border-radius:8px;padding:16px;font-size:14px;line-height:1.6}code{font-family:ui-monospace,Consolas,monospace}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;border-bottom:1px solid var(--line);padding:12px;vertical-align:top}th{background:var(--pale)}.tablewrap{overflow-x:auto}td:first-child{font-weight:bold;min-width:40px}td code{overflow-wrap:anywhere}.controls{position:sticky;top:0;background:#f5f7f9f2;border-bottom:1px solid var(--line);padding:18px 0;z-index:1;display:flex;flex-wrap:wrap;gap:12px;align-items:end}.control{display:flex;flex-direction:column;font-size:13px;font-weight:600}.search{flex:1;min-width:220px}input,select{font:inherit;background:white;border:1px solid #9cb5c3;border-radius:6px;padding:10px;color:var(--ink);max-width:100%}input:focus,select:focus{outline:3px solid #a0d9ee}.tags{font-size:13px;color:#49687b;margin:6px 0 14px}.example{border-left:3px solid #1c8cad;padding-left:14px}li{margin:12px 0}.muted{color:#587081;font-size:14px}article[hidden]{display:none}.count{min-width:120px;font-size:13px;align-self:center}details{background:white;border:1px solid var(--line);padding:18px;border-radius:10px}summary{cursor:pointer;font-weight:600}@media print{.controls{display:none}body{background:white}header{padding:20px;color:#172a3a;background:white}header p{color:#172a3a}article{break-inside:avoid}details>*{display:block}}@media(max-width:600px){.wrap{padding:0 14px 40px}header{padding:30px 20px}article{padding:16px}td,th{padding:8px}}
|
|
6
6
|
</style>
|
|
7
|
-
<header><div class="eyebrow">Python 3.10+ · версия 1.2.
|
|
7
|
+
<header><div class="eyebrow">Python 3.10+ · версия 1.2.1 · без зависимостей</div><h1>EGEKit<br>112 функций для подготовки к ЕГЭ</h1><p>Учебная библиотека Python 3.10+ без внешних зависимостей. 112 функций для тем всех 27 номеров. Это инструменты и шаблоны: условие, диапазон и критерий проверки переносите из конкретной задачи. Автоматического решения любой формулировки и гарантии всех будущих подтипов здесь нет. Все функции доступны под понятными русскими именами; английские варианты также работают.</p><a href="#catalog">Перейти к справочнику ↓</a></header>
|
|
8
8
|
<main class="wrap"><section class="intro"><h2 style="margin-top:0">Начало работы</h2><p>Положите <code>egekit.py</code> и <code>егэ.py</code> рядом со своим <code>solution.py</code> либо установите пакет egekit-study версии 1.2.0 и новее. Установка не нужна. Запустите <code>python solution.py</code> в терминале этой папки. Полная инструкция — в README.md.</p><pre><code>from егэ import *
|
|
9
9
|
|
|
10
10
|
print(делители(120))
|
|
11
11
|
print(перевести_в_систему(125, 3))
|
|
12
12
|
man(делители) # Назначение, параметры и пример
|
|
13
13
|
man(17) # Функции для задания 17
|
|
14
|
+
man(по_заданиям=True) # Сгруппировать по номерам
|
|
14
15
|
man(поиск='простые') # Поиск в справочнике
|
|
15
16
|
</code></pre><p>Примеры по всем номерам: <code>python examples_ru.py</code>. Отдельный номер: <code>python examples_ru.py --year 2027 23</code>.</p></section>
|
|
16
17
|
<h2>Номера и основные функции</h2><p>Базовая нумерация — 2026. В правом столбце тем указаны изменения проекта ФИПИ 2027.</p><div class="tablewrap"><table><thead><tr><th>№</th><th>Тема 2026</th><th>Проект 2027</th><th>С чего начать</th></tr></thead><tbody><tr><td>1</td><td>Графы и соответствие вершин</td><td>—</td><td><code>сопоставить_вершины_графов, кратчайшие_расстояния</code></td></tr><tr><td>2</td><td>Логика и таблицы истинности</td><td>—</td><td><code>таблица_истинности, определить_столбцы_таблицы, следование</code></td></tr><tr><td>3</td><td>Таблицы и базы данных</td><td>—</td><td><code>прочитать_xlsx, прочитать_ods, соединить_таблицы, сгруппировать_и_вычислить, запрос_к_базе</code></td></tr><tr><td>4</td><td>Коды и условие Фано</td><td>—</td><td><code>проверка_условия_Фано, допустимые_кодовые_слова, коды_Хаффмана, длина_кодированного_сообщения</code></td></tr><tr><td>5</td><td>Алгоритмы преобразования чисел</td><td>—</td><td><code>преобразовать_двоичную_запись, перевести_в_систему, найти_значения</code></td></tr><tr><td>6</td><td>Черепаха и геометрия</td><td>—</td><td><code>вершины_черепахи, внутренние_точки_по_Пику, целые_точки_в_фигурах</code></td></tr><tr><td>7</td><td>Изображения, звук и передача данных</td><td>—</td><td><code>объём_изображения_в_битах, объём_звука_в_битах, время_передачи</code></td></tr><tr><td>8</td><td>Комбинаторика и порядок слов</td><td>—</td><td><code>количество_слов, номер_слова, слово_по_номеру, различные_перестановки</code></td></tr><tr><td>9</td><td>Обработка строк таблицы</td><td>—</td><td><code>характеристики_строки, отобрать_строки</code></td></tr><tr><td>10</td><td>Поиск в текстовом документе</td><td>IPv4 и маски сетей</td><td><code>текст_из_docx, количество_вхождений</code></td></tr><tr><td>11</td><td>Объём хранения идентификаторов</td><td>—</td><td><code>бит_на_символ, объём_хранения_в_байтах</code></td></tr><tr><td>12</td><td>Редактор и машина Тьюринга</td><td>—</td><td><code>редактор_строк, машина_Тьюринга</code></td></tr><tr><td>13</td><td>IPv4 и маски сетей</td><td>Исполнители и количество программ</td><td><code>сведения_о_сети, количество_ip_по_условию, распределение_ip_по_единицам</code></td></tr><tr><td>14</td><td>Системы счисления</td><td>—</td><td><code>перевести_в_систему, перевести_из_системы, цифры_числа</code></td></tr><tr><td>15</td><td>Логические условия и параметры</td><td>—</td><td><code>следование, допустимые_параметры, принадлежит_интервалу</code></td></tr><tr><td>16</td><td>Рекурсия и рекуррентные формулы</td><td>—</td><td><code>вычислить_рекуррентную_функцию, рекурсивная_функция</code></td></tr><tr><td>17</td><td>Последовательности, пары и тройки</td><td>—</td><td><code>прочитать_числа, соседние_группы, статистика_соседних_групп</code></td></tr><tr><td>18</td><td>Робот и пути по таблице</td><td>—</td><td><code>суммы_путей_робота</code></td></tr><tr><td>19</td><td>Игры: первый ход</td><td>—</td><td><code>анализатор_игры</code></td></tr><tr><td>20</td><td>Игры: стратегия победы</td><td>—</td><td><code>анализатор_игры</code></td></tr><tr><td>21</td><td>Игры: неизбежное поражение</td><td>—</td><td><code>анализатор_игры</code></td></tr><tr><td>22</td><td>Параллельные процессы и зависимости</td><td>—</td><td><code>процессы_из_таблицы, расписание_процессов, активные_процессы, максимум_одновременных_интервалов</code></td></tr><tr><td>23</td><td>Исполнители и количество программ</td><td>Пути в ориентированном графе</td><td><code>количество_программ, количество_программ_через_точки</code></td></tr><tr><td>24</td><td>Строки, подстроки и выражения</td><td>—</td><td><code>подстрока_не_более, подстрока_ровно, подстрока_не_менее, найти_по_регулярному_выражению</code></td></tr><tr><td>25</td><td>Делители, простые числа и маски</td><td>—</td><td><code>делители, разложить_на_простые, решето_простых, кратные_по_маске</code></td></tr><tr><td>26</td><td>Сортировка, выбор и моделирование</td><td>—</td><td><code>выбрать_файлы_для_архива, выбрать_непересекающиеся_интервалы, вложенные_коробки, свободные_места, очередь_обслуживания, журнал_резервных_копий</code></td></tr><tr><td>27</td><td>Кластеризация и алгоритмы анализа данных</td><td>Анализ данных: точки, признаки и энергия частиц</td><td><code>кластеры_по_расстоянию, центр_по_сумме_расстояний, кластеры_по_размаху_признака, центр_по_медиане_признака; дополнительно — префиксы, остатки, динамика</code></td></tr></tbody></table></div>
|
|
@@ -403,19 +404,22 @@ man(поиск='простые') # Поиск в справ
|
|
|
403
404
|
<p class="example"><strong>Пример:</strong> соседние_группы([1,2,3],2,lambda w:sum(w)>3). В отличие от всех пар берёт только соседние элементы.</p></article>
|
|
404
405
|
<article id="man" data-name="man" data-y26='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]' data-y27='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]'>
|
|
405
406
|
<h3>справка</h3><p class="muted">Английское имя: <code>man</code></p><div class="tags" data-tags></div>
|
|
406
|
-
<pre><code>справка(функция=None, *, задание=None, год=2026, поиск=None, листать=False)</code></pre><p>Справочник EGEKit в терминале: назначение, сигнатура, параметры, пример и номера заданий.
|
|
407
|
+
<pre><code>справка(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=False)</code></pre><p>Справочник EGEKit в терминале: назначение, сигнатура, параметры, пример и номера заданий.
|
|
407
408
|
|
|
408
409
|
функция — объект функции либо её русское/английское имя строкой.
|
|
409
410
|
Без функции выводится список с краткими описаниями. Целое число первым
|
|
410
411
|
аргументом означает номер задания. задание и год фильтруют список;
|
|
411
|
-
поиск ищет текст в именах и описаниях;
|
|
412
|
+
поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
|
|
413
|
+
по номерам 1–27 с названиями тем. Каждый пункт списка показывает номера
|
|
414
|
+
заданий для выбранного года; листать=True открывает системный
|
|
412
415
|
просмотрщик через pydoc.pager (выход обычно клавишей q).
|
|
413
416
|
По умолчанию справка просто печатается, не требует действий и возвращает None.
|
|
414
417
|
Ничего не выполняет из переданной строки: имена берутся только из каталога.
|
|
415
418
|
|
|
416
419
|
</p>
|
|
417
420
|
<p class="example"><strong>Пример:</strong>
|
|
418
|
-
справка() # Все функции с описаниями
|
|
421
|
+
справка() # Все функции с описаниями и номерами
|
|
422
|
+
справка(по_заданиям=True) # Группы по заданиям 1–27
|
|
419
423
|
справка(делители) # Подробная справка о функции
|
|
420
424
|
справка('делители') # То же по строковому имени
|
|
421
425
|
справка('делители') # Английское имя тоже подходит
|
|
@@ -483,7 +487,7 @@ man(поиск='простые') # Поиск в справ
|
|
|
483
487
|
<h3>цифры_числа</h3><p class="muted">Английское имя: <code>base_digits</code></p><div class="tags" data-tags></div>
|
|
484
488
|
<pre><code>цифры_числа(n, base)</code></pre><p>Цифры неотрицательного числа списком, от старшей к младшей; допускает основания больше 36. </p>
|
|
485
489
|
<p class="example"><strong>Пример:</strong> цифры_числа(10,3) == [1,0,1].</p></article></div><p id="empty" hidden>Функций с такими условиями не найдено. Попробуйте другое слово или номер.</p>
|
|
486
|
-
<h2>Проверки и источники</h2><p>
|
|
490
|
+
<h2>Проверки и источники</h2><p>24 автоматических тестовых метода, в том числе сотни случайных сравнений с полным перебором. На файлах демоверсии 2027 совпали официальные ответы №22, №23, №24, №26 и №27. Это проверка конкретных алгоритмов и данных, а не доказательство универсальной применимости.</p><p>ФИПИ: <a href="https://fipi.ru/ege/demoversii-specifikacii-kodifikatory">демоверсии, спецификации, кодификаторы</a>. Проверено 18.10.2026. Изменения 2027 приведены по опубликованному проекту.</p><p class="muted">Исходный код — egekit.py · Полные примеры — examples_ru.py · Текстовая версия — GUIDE.md · Проверки — VALIDATION.md. Страница работает без интернета.</p></main>
|
|
487
491
|
<script>
|
|
488
492
|
const cards=[...document.querySelectorAll('article')], search=document.querySelector('#search'), year=document.querySelector('#year'), task=document.querySelector('#task');
|
|
489
493
|
function filter(){let shown=0;const q=search.value.trim().toLocaleLowerCase('ru');for(const card of cards){const tags=JSON.parse(card.dataset['y'+year.value]);card.querySelector('[data-tags]').textContent='Номера '+(year.value==='26'?'2026':'проекта 2027')+': '+(tags.length?tags.join(', '):'историческая функция');const visible=(!q||card.textContent.toLocaleLowerCase('ru').includes(q))&&(!task.value||tags.includes(Number(task.value)));card.hidden=!visible;if(visible)shown++;}document.querySelector('#count').textContent=shown+' из '+cards.length+' функций';document.querySelector('#empty').hidden=shown>0;}
|
|
@@ -13,6 +13,7 @@ print(делители(120))
|
|
|
13
13
|
print(перевести_в_систему(125, 3))
|
|
14
14
|
man(делители) # Назначение, параметры и пример
|
|
15
15
|
man(17) # Функции для задания 17
|
|
16
|
+
man(по_заданиям=True) # Сгруппировать по номерам
|
|
16
17
|
man(поиск='простые') # Поиск в справочнике
|
|
17
18
|
|
|
18
19
|
```
|
|
@@ -1224,7 +1225,7 @@ FCFS-очередь к одинаковым серверам. arrivals — (пр
|
|
|
1224
1225
|
### справка
|
|
1225
1226
|
|
|
1226
1227
|
```python
|
|
1227
|
-
справка(функция=None, *, задание=None, год=2026, поиск=None, листать=False)
|
|
1228
|
+
справка(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=False)
|
|
1228
1229
|
```
|
|
1229
1230
|
|
|
1230
1231
|
Английское имя: `man`.
|
|
@@ -1236,13 +1237,16 @@ FCFS-очередь к одинаковым серверам. arrivals — (пр
|
|
|
1236
1237
|
функция — объект функции либо её русское/английское имя строкой.
|
|
1237
1238
|
Без функции выводится список с краткими описаниями. Целое число первым
|
|
1238
1239
|
аргументом означает номер задания. задание и год фильтруют список;
|
|
1239
|
-
поиск ищет текст в именах и описаниях;
|
|
1240
|
+
поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
|
|
1241
|
+
по номерам 1–27 с названиями тем. Каждый пункт списка показывает номера
|
|
1242
|
+
заданий для выбранного года; листать=True открывает системный
|
|
1240
1243
|
просмотрщик через pydoc.pager (выход обычно клавишей q).
|
|
1241
1244
|
По умолчанию справка просто печатается, не требует действий и возвращает None.
|
|
1242
1245
|
Ничего не выполняет из переданной строки: имена берутся только из каталога.
|
|
1243
1246
|
|
|
1244
1247
|
Пример:
|
|
1245
|
-
справка() # Все функции с описаниями
|
|
1248
|
+
справка() # Все функции с описаниями и номерами
|
|
1249
|
+
справка(по_заданиям=True) # Группы по заданиям 1–27
|
|
1246
1250
|
справка(делители) # Подробная справка о функции
|
|
1247
1251
|
справка('делители') # То же по строковому имени
|
|
1248
1252
|
справка('делители') # Английское имя тоже подходит
|
|
@@ -1437,4 +1441,4 @@ FCFS-очередь к одинаковым серверам. arrivals — (пр
|
|
|
1437
1441
|
|
|
1438
1442
|
Архив проекта 2027: https://doc.fipi.ru/ege/demoversii-specifikacii-kodifikatory/2027/inf_11_2027.zip
|
|
1439
1443
|
|
|
1440
|
-
|
|
1444
|
+
24 автоматических тестовых метода; сотни случайных сравнений с полным перебором. Совпадение официальных ответов №22, 23, 24, 26 и 27 проекта 2027. Подробности в VALIDATION.md.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: egekit-study
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: Алгоритмические инструменты для подготовки к ЕГЭ по информатике
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -10,7 +10,7 @@ Dynamic: license-file
|
|
|
10
10
|
|
|
11
11
|
# EGEKit — библиотека для подготовки к ЕГЭ по информатике
|
|
12
12
|
|
|
13
|
-
Версия 1.2.
|
|
13
|
+
Версия 1.2.1 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
|
|
14
14
|
|
|
15
15
|
Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
|
|
16
16
|
исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
|
|
@@ -181,8 +181,27 @@ python -m unittest discover -s tests -v
|
|
|
181
181
|
старых архивов. После публикации пользователи обновляют пакет через
|
|
182
182
|
`python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.
|
|
183
183
|
|
|
184
|
-
Готовые файлы для публикации версии 1.2.
|
|
184
|
+
Готовые файлы для публикации версии 1.2.1 находятся в папке dist. После
|
|
185
185
|
проверки `python -m twine check dist/*` их можно загрузить командой
|
|
186
186
|
`python -m twine upload dist/*`. Если меняете код, пересоберите пакет.
|
|
187
187
|
После публикации обновите установленный пакет:
|
|
188
188
|
`python -m pip install --upgrade egekit-study`.
|
|
189
|
+
|
|
190
|
+
## Номера заданий в справке: версия 1.2.1
|
|
191
|
+
|
|
192
|
+
`man()` теперь подписывает у каждой функции номера заданий выбранного года.
|
|
193
|
+
`man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
|
|
194
|
+
№2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
|
|
195
|
+
подходящая нескольким номерам, появляется в каждой соответствующей группе.
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
from егэ import *
|
|
199
|
+
man() # Алфавитный список с номерами
|
|
200
|
+
man(по_заданиям=True) # Группы по заданиям
|
|
201
|
+
man(17) # Только функции для №17
|
|
202
|
+
man(по_заданиям=True, год=2027) # Нумерация проекта 2027
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
На установленной версии 1.2.0 эти новые параметры ещё не работают.
|
|
206
|
+
Для установки без ожидания обновления индекса PyPI можно установить
|
|
207
|
+
готовый файл dist/egekit_study-1.2.1-py3-none-any.whl из этого архива.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# EGEKit — библиотека для подготовки к ЕГЭ по информатике
|
|
2
2
|
|
|
3
|
-
Версия 1.2.
|
|
3
|
+
Версия 1.2.1 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
|
|
4
4
|
|
|
5
5
|
Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
|
|
6
6
|
исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
|
|
@@ -171,8 +171,27 @@ python -m unittest discover -s tests -v
|
|
|
171
171
|
старых архивов. После публикации пользователи обновляют пакет через
|
|
172
172
|
`python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.
|
|
173
173
|
|
|
174
|
-
Готовые файлы для публикации версии 1.2.
|
|
174
|
+
Готовые файлы для публикации версии 1.2.1 находятся в папке dist. После
|
|
175
175
|
проверки `python -m twine check dist/*` их можно загрузить командой
|
|
176
176
|
`python -m twine upload dist/*`. Если меняете код, пересоберите пакет.
|
|
177
177
|
После публикации обновите установленный пакет:
|
|
178
178
|
`python -m pip install --upgrade egekit-study`.
|
|
179
|
+
|
|
180
|
+
## Номера заданий в справке: версия 1.2.1
|
|
181
|
+
|
|
182
|
+
`man()` теперь подписывает у каждой функции номера заданий выбранного года.
|
|
183
|
+
`man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
|
|
184
|
+
№2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
|
|
185
|
+
подходящая нескольким номерам, появляется в каждой соответствующей группе.
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
from егэ import *
|
|
189
|
+
man() # Алфавитный список с номерами
|
|
190
|
+
man(по_заданиям=True) # Группы по заданиям
|
|
191
|
+
man(17) # Только функции для №17
|
|
192
|
+
man(по_заданиям=True, год=2027) # Нумерация проекта 2027
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
На установленной версии 1.2.0 эти новые параметры ещё не работают.
|
|
196
|
+
Для установки без ожидания обновления индекса PyPI можно установить
|
|
197
|
+
готовый файл dist/egekit_study-1.2.1-py3-none-any.whl из этого архива.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# Проверка EGEKit 1.2.
|
|
1
|
+
# Проверка EGEKit 1.2.1
|
|
2
2
|
|
|
3
3
|
Дата: 18 октября 2026 года. Среда проверки: Python 3.12.14, Linux.
|
|
4
4
|
Минимальная заявленная версия Python — 3.10 (отдельный запуск под 3.10 не выполнялся).
|
|
5
5
|
|
|
6
6
|
## Автоматические проверки
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
24 тестовых метода unittest проходят. Внутри них:
|
|
9
9
|
|
|
10
10
|
- 300 случайных наборов: пары с остатком суммы, максимум суммы пары,
|
|
11
11
|
кратность произведения, суммы и длины подмассивов, выбор из групп,
|
|
@@ -90,3 +90,9 @@ wheel установлен в отдельное чистое окружение
|
|
|
90
90
|
Проверены `from егэ import *`, русские функции и man в установленном пакете.
|
|
91
91
|
Автоматическая интерактивная проверка поведения системного pager в Windows
|
|
92
92
|
не выполнялась; по умолчанию man печатает справку без pager.
|
|
93
|
+
|
|
94
|
+
## Номера заданий в man, версия 1.2.1
|
|
95
|
+
|
|
96
|
+
Два новых тестовых метода проверяют подписи у функций для обоих годов,
|
|
97
|
+
все 27 групп, отдельный раздел общих инструментов, фильтрацию по номеру,
|
|
98
|
+
поиск и пустую выдачу. Всего 24 тестовых метода проходят.
|
|
@@ -69,6 +69,7 @@ print(делители(120))
|
|
|
69
69
|
print(перевести_в_систему(125, 3))
|
|
70
70
|
man(делители) # Назначение, параметры и пример
|
|
71
71
|
man(17) # Функции для задания 17
|
|
72
|
+
man(по_заданиям=True) # Сгруппировать по номерам
|
|
72
73
|
man(поиск='простые') # Поиск в справочнике
|
|
73
74
|
"""
|
|
74
75
|
notes.insert(0, 'Новый модуль: from егэ import *. После импорта используйте функции без префикса. man() показывает список, man(делители) или man("делители") — подробную справку, man(17) — функции задания 17. Синоним man — справка. Для постраничного просмотра: man(листать=True), выход обычно q.')
|
|
@@ -105,7 +106,7 @@ for name in sorted(e.CATALOG, key=lambda n:e.РУССКИЕ_ИМЕНА[n]):
|
|
|
105
106
|
<p class="example"><strong>Пример:</strong> {html.escape(example)}</p></article>''')
|
|
106
107
|
md += ['## Источники и проверка','','ФИПИ: https://fipi.ru/ege/demoversii-specifikacii-kodifikatory','',
|
|
107
108
|
'Архив проекта 2027: https://doc.fipi.ru/ege/demoversii-specifikacii-kodifikatory/2027/inf_11_2027.zip','',
|
|
108
|
-
'
|
|
109
|
+
'24 автоматических тестовых метода; сотни случайных сравнений с полным перебором. Совпадение официальных ответов №22, 23, 24, 26 и 27 проекта 2027. Подробности в VALIDATION.md.']
|
|
109
110
|
(root/'GUIDE.md').write_text('\n'.join(md)+'\n',encoding='utf-8')
|
|
110
111
|
rows=''.join(f'<tr><td>{n}</td><td>{html.escape(TOPICS[n])}</td><td>{html.escape(TOPICS27[n] if TOPICS27[n]!=TOPICS[n] else "—")}</td><td><code>{html.escape(ROUTES[n])}</code></td></tr>' for n in TOPICS)
|
|
111
112
|
page='''<!doctype html><html lang="ru"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
@@ -114,14 +115,14 @@ page='''<!doctype html><html lang="ru"><meta charset="utf-8"><meta name="viewpor
|
|
|
114
115
|
:root{color-scheme:light;--ink:#172a3a;--blue:#075c80;--line:#dbe5ea;--pale:#edf5f8}
|
|
115
116
|
*{box-sizing:border-box}body{margin:0;background:#f5f7f9;color:var(--ink);font:16px/1.65 system-ui,sans-serif}header{background:#122d40;color:white;padding:48px max(24px,calc((100vw - 1100px)/2))}header p{max-width:870px;color:#d4e7ef}h1{font-size:clamp(30px,5vw,48px);line-height:1.15;margin:8px 0 24px}h2{font-size:26px;margin:44px 0 18px}h3{margin:0;color:var(--blue);font-size:21px;overflow-wrap:anywhere}.eyebrow{letter-spacing:2px;font-size:12px;text-transform:uppercase}.wrap{max-width:1150px;margin:auto;padding:0 24px 64px}a{color:var(--blue)}header a{color:#bfe5f8}.intro,article{background:white;border:1px solid var(--line);padding:24px;border-radius:12px;margin:14px 0}pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#eef3f6;border-radius:8px;padding:16px;font-size:14px;line-height:1.6}code{font-family:ui-monospace,Consolas,monospace}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;border-bottom:1px solid var(--line);padding:12px;vertical-align:top}th{background:var(--pale)}.tablewrap{overflow-x:auto}td:first-child{font-weight:bold;min-width:40px}td code{overflow-wrap:anywhere}.controls{position:sticky;top:0;background:#f5f7f9f2;border-bottom:1px solid var(--line);padding:18px 0;z-index:1;display:flex;flex-wrap:wrap;gap:12px;align-items:end}.control{display:flex;flex-direction:column;font-size:13px;font-weight:600}.search{flex:1;min-width:220px}input,select{font:inherit;background:white;border:1px solid #9cb5c3;border-radius:6px;padding:10px;color:var(--ink);max-width:100%}input:focus,select:focus{outline:3px solid #a0d9ee}.tags{font-size:13px;color:#49687b;margin:6px 0 14px}.example{border-left:3px solid #1c8cad;padding-left:14px}li{margin:12px 0}.muted{color:#587081;font-size:14px}article[hidden]{display:none}.count{min-width:120px;font-size:13px;align-self:center}details{background:white;border:1px solid var(--line);padding:18px;border-radius:10px}summary{cursor:pointer;font-weight:600}@media print{.controls{display:none}body{background:white}header{padding:20px;color:#172a3a;background:white}header p{color:#172a3a}article{break-inside:avoid}details>*{display:block}}@media(max-width:600px){.wrap{padding:0 14px 40px}header{padding:30px 20px}article{padding:16px}td,th{padding:8px}}
|
|
116
117
|
</style>
|
|
117
|
-
<header><div class="eyebrow">Python 3.10+ · версия 1.2.
|
|
118
|
+
<header><div class="eyebrow">Python 3.10+ · версия 1.2.1 · без зависимостей</div><h1>EGEKit<br>112 функций для подготовки к ЕГЭ</h1><p>INTRO</p><a href="#catalog">Перейти к справочнику ↓</a></header>
|
|
118
119
|
<main class="wrap"><section class="intro"><h2 style="margin-top:0">Начало работы</h2><p>Положите <code>egekit.py</code> и <code>егэ.py</code> рядом со своим <code>solution.py</code> либо установите пакет egekit-study версии 1.2.0 и новее. Установка не нужна. Запустите <code>python solution.py</code> в терминале этой папки. Полная инструкция — в README.md.</p><pre><code>QUICK</code></pre><p>Примеры по всем номерам: <code>python examples_ru.py</code>. Отдельный номер: <code>python examples_ru.py --year 2027 23</code>.</p></section>
|
|
119
120
|
<h2>Номера и основные функции</h2><p>Базовая нумерация — 2026. В правом столбце тем указаны изменения проекта ФИПИ 2027.</p><div class="tablewrap"><table><thead><tr><th>№</th><th>Тема 2026</th><th>Проект 2027</th><th>С чего начать</th></tr></thead><tbody>ROWS</tbody></table></div>
|
|
120
121
|
<h2>Как применять функции</h2><details><summary>Правила, ограничения и частые ошибки</summary><ul>NOTES</ul></details>
|
|
121
122
|
<h2 id="catalog">Полный справочник</h2><p>У каждой функции: сигнатура, назначение, параметры, пример и ограничения. Фильтр ищет по имени и описанию. Номера показывают также смежные вспомогательные алгоритмы.</p>
|
|
122
123
|
<div class="controls"><label class="control search">Поиск<input id="search" type="search" placeholder="например: делители, энергия, count_pairs"></label><label class="control">Год<select id="year"><option value="26">2026</option><option value="27">2027 — проект</option></select></label><label class="control">Номер<select id="task"><option value="">Все номера</option>OPTIONS</select></label><div id="count" class="count" aria-live="polite"></div></div>
|
|
123
124
|
<div id="cards">CARDS</div><p id="empty" hidden>Функций с такими условиями не найдено. Попробуйте другое слово или номер.</p>
|
|
124
|
-
<h2>Проверки и источники</h2><p>
|
|
125
|
+
<h2>Проверки и источники</h2><p>24 автоматических тестовых метода, в том числе сотни случайных сравнений с полным перебором. На файлах демоверсии 2027 совпали официальные ответы №22, №23, №24, №26 и №27. Это проверка конкретных алгоритмов и данных, а не доказательство универсальной применимости.</p><p>ФИПИ: <a href="https://fipi.ru/ege/demoversii-specifikacii-kodifikatory">демоверсии, спецификации, кодификаторы</a>. Проверено 18.10.2026. Изменения 2027 приведены по опубликованному проекту.</p><p class="muted">Исходный код — egekit.py · Полные примеры — examples_ru.py · Текстовая версия — GUIDE.md · Проверки — VALIDATION.md. Страница работает без интернета.</p></main>
|
|
125
126
|
<script>
|
|
126
127
|
const cards=[...document.querySelectorAll('article')], search=document.querySelector('#search'), year=document.querySelector('#year'), task=document.querySelector('#task');
|
|
127
128
|
function filter(){let shown=0;const q=search.value.trim().toLocaleLowerCase('ru');for(const card of cards){const tags=JSON.parse(card.dataset['y'+year.value]);card.querySelector('[data-tags]').textContent='Номера '+(year.value==='26'?'2026':'проекта 2027')+': '+(tags.length?tags.join(', '):'историческая функция');const visible=(!q||card.textContent.toLocaleLowerCase('ru').includes(q))&&(!task.value||tags.includes(Number(task.value)));card.hidden=!visible;if(visible)shown++;}document.querySelector('#count').textContent=shown+' из '+cards.length+' функций';document.querySelector('#empty').hidden=shown>0;}
|
|
@@ -17,7 +17,7 @@ import sqlite3
|
|
|
17
17
|
import zipfile
|
|
18
18
|
import xml.etree.ElementTree as ET
|
|
19
19
|
|
|
20
|
-
__version__ = '1.2.
|
|
20
|
+
__version__ = '1.2.1'
|
|
21
21
|
CATALOG = {}
|
|
22
22
|
|
|
23
23
|
def _task(*numbers):
|
|
@@ -1291,19 +1291,22 @@ __all__ = ['CATALOG', 'CATALOG_2027', 'РУССКИЕ_ИМЕНА', '__version__'
|
|
|
1291
1291
|
|
|
1292
1292
|
|
|
1293
1293
|
@_task(*range(1, 28))
|
|
1294
|
-
def man(функция=None, *, задание=None, год=2026, поиск=None, листать=False):
|
|
1294
|
+
def man(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=False):
|
|
1295
1295
|
"""Справочник EGEKit в терминале: назначение, сигнатура, параметры, пример и номера заданий.
|
|
1296
1296
|
|
|
1297
1297
|
функция — объект функции либо её русское/английское имя строкой.
|
|
1298
1298
|
Без функции выводится список с краткими описаниями. Целое число первым
|
|
1299
1299
|
аргументом означает номер задания. задание и год фильтруют список;
|
|
1300
|
-
поиск ищет текст в именах и описаниях;
|
|
1300
|
+
поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
|
|
1301
|
+
по номерам 1–27 с названиями тем. Каждый пункт списка показывает номера
|
|
1302
|
+
заданий для выбранного года; листать=True открывает системный
|
|
1301
1303
|
просмотрщик через pydoc.pager (выход обычно клавишей q).
|
|
1302
1304
|
По умолчанию справка просто печатается, не требует действий и возвращает None.
|
|
1303
1305
|
Ничего не выполняет из переданной строки: имена берутся только из каталога.
|
|
1304
1306
|
|
|
1305
1307
|
Пример:
|
|
1306
|
-
man() # Все функции с описаниями
|
|
1308
|
+
man() # Все функции с описаниями и номерами
|
|
1309
|
+
man(по_заданиям=True) # Группы по заданиям 1–27
|
|
1307
1310
|
man(делители) # Подробная справка о функции
|
|
1308
1311
|
man('делители') # То же по строковому имени
|
|
1309
1312
|
man('divisors') # Английское имя тоже подходит
|
|
@@ -1381,15 +1384,65 @@ def man(функция=None, *, задание=None, год=2026, поиск=Non
|
|
|
1381
1384
|
query = поиск.casefold()
|
|
1382
1385
|
candidates = [name for name in candidates if query in
|
|
1383
1386
|
(name + ' ' + РУССКИЕ_ИМЕНА[name] + ' ' + documentation(name)).casefold()]
|
|
1384
|
-
lines.append('СПИСОК ФУНКЦИЙ' + (f' — задание {задание}
|
|
1385
|
-
lines.append(f'
|
|
1386
|
-
|
|
1387
|
+
lines.append('СПИСОК ФУНКЦИЙ' + (f' — задание {задание}' if задание else ''))
|
|
1388
|
+
lines.append(f'Нумерация: {год}' + (' (проект)' if год == 2027 else ''))
|
|
1389
|
+
lines.append(f'Найдено функций: {len(candidates)}')
|
|
1390
|
+
|
|
1391
|
+
def add_entry(name):
|
|
1392
|
+
numbers = catalog[name]
|
|
1393
|
+
if tuple(numbers) == tuple(range(1, 28)):
|
|
1394
|
+
label = '№1–27'
|
|
1395
|
+
elif numbers:
|
|
1396
|
+
label = '№' + ', '.join(map(str, numbers))
|
|
1397
|
+
else:
|
|
1398
|
+
label = 'историческая/вспомогательная'
|
|
1387
1399
|
description = documentation(name).split('Пример:')[0].split('. ')[0].split('\n')[0]
|
|
1388
|
-
lines.extend([f' {РУССКИЕ_ИМЕНА[name]} [{name}]',
|
|
1400
|
+
lines.extend([f' {РУССКИЕ_ИМЕНА[name]} [{name}] — {label}',
|
|
1389
1401
|
textwrap.fill(description, width=96, initial_indent=' ', subsequent_indent=' ')])
|
|
1402
|
+
|
|
1403
|
+
if по_заданиям:
|
|
1404
|
+
topics = {
|
|
1405
|
+
1: 'Графы и соответствие вершин', 2: 'Логика и таблицы истинности',
|
|
1406
|
+
3: 'Таблицы и базы данных', 4: 'Коды и условие Фано',
|
|
1407
|
+
5: 'Преобразование чисел', 6: 'Черепаха и геометрия',
|
|
1408
|
+
7: 'Изображения, звук и передача данных', 8: 'Комбинаторика и слова',
|
|
1409
|
+
9: 'Строки таблицы', 10: 'Поиск в текстовом документе',
|
|
1410
|
+
11: 'Объём хранения', 12: 'Редактор и машина Тьюринга',
|
|
1411
|
+
13: 'IPv4 и маски сетей', 14: 'Системы счисления',
|
|
1412
|
+
15: 'Логические условия и параметры', 16: 'Рекурсия',
|
|
1413
|
+
17: 'Последовательности: пары и тройки', 18: 'Робот и пути по таблице',
|
|
1414
|
+
19: 'Игры: первый ход', 20: 'Игры: стратегия победы',
|
|
1415
|
+
21: 'Игры: неизбежное поражение', 22: 'Параллельные процессы',
|
|
1416
|
+
23: 'Исполнители и количество программ', 24: 'Строки и подстроки',
|
|
1417
|
+
25: 'Делители, простые числа и маски', 26: 'Сортировка и моделирование',
|
|
1418
|
+
27: 'Кластеризация и анализ данных'}
|
|
1419
|
+
if год == 2027:
|
|
1420
|
+
topics.update({10: 'IPv4 и маски сетей',
|
|
1421
|
+
13: 'Исполнители и количество программ',
|
|
1422
|
+
23: 'Пути в ориентированном графе',
|
|
1423
|
+
27: 'Анализ данных: точки, признаки и энергия частиц'})
|
|
1424
|
+
common = [name for name in candidates if tuple(catalog[name]) == tuple(range(1, 28))]
|
|
1425
|
+
for number in ([задание] if задание is not None else range(1, 28)):
|
|
1426
|
+
group = [name for name in candidates if number in catalog[name] and name not in common]
|
|
1427
|
+
if group:
|
|
1428
|
+
lines.extend(['', f'ЗАДАНИЕ №{number} — {topics[number]}'])
|
|
1429
|
+
for name in sorted(group, key=lambda n: РУССКИЕ_ИМЕНА[n]):
|
|
1430
|
+
add_entry(name)
|
|
1431
|
+
historical = [name for name in candidates if not catalog[name]]
|
|
1432
|
+
if historical:
|
|
1433
|
+
lines.extend(['', 'ИСТОРИЧЕСКИЕ И ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ'])
|
|
1434
|
+
for name in sorted(historical, key=lambda n: РУССКИЕ_ИМЕНА[n]): add_entry(name)
|
|
1435
|
+
if common:
|
|
1436
|
+
lines.extend(['', 'ОБЩИЕ ИНСТРУМЕНТЫ ДЛЯ ВСЕХ ЗАДАНИЙ'])
|
|
1437
|
+
for name in sorted(common, key=lambda n: РУССКИЕ_ИМЕНА[n]): add_entry(name)
|
|
1438
|
+
else:
|
|
1439
|
+
for name in sorted(candidates, key=lambda n: РУССКИЕ_ИМЕНА[n]):
|
|
1440
|
+
add_entry(name)
|
|
1390
1441
|
lines.extend(['', 'Подробнее: man(делители) или man("делители")',
|
|
1391
1442
|
'Поиск: man(поиск="строк") | По заданию: man(17)',
|
|
1392
|
-
'
|
|
1443
|
+
'Группы по номерам: man(по_заданиям=True)',
|
|
1444
|
+
'Постраничный просмотр: man(листать=True)',
|
|
1445
|
+
'Номера включают смежные и вспомогательные инструменты, а не только готовые решения.'])
|
|
1393
1446
|
text = '\n'.join(lines)
|
|
1394
1447
|
if листать:
|
|
1395
1448
|
import pydoc
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: egekit-study
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: Алгоритмические инструменты для подготовки к ЕГЭ по информатике
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -10,7 +10,7 @@ Dynamic: license-file
|
|
|
10
10
|
|
|
11
11
|
# EGEKit — библиотека для подготовки к ЕГЭ по информатике
|
|
12
12
|
|
|
13
|
-
Версия 1.2.
|
|
13
|
+
Версия 1.2.1 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
|
|
14
14
|
|
|
15
15
|
Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
|
|
16
16
|
исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
|
|
@@ -181,8 +181,27 @@ python -m unittest discover -s tests -v
|
|
|
181
181
|
старых архивов. После публикации пользователи обновляют пакет через
|
|
182
182
|
`python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.
|
|
183
183
|
|
|
184
|
-
Готовые файлы для публикации версии 1.2.
|
|
184
|
+
Готовые файлы для публикации версии 1.2.1 находятся в папке dist. После
|
|
185
185
|
проверки `python -m twine check dist/*` их можно загрузить командой
|
|
186
186
|
`python -m twine upload dist/*`. Если меняете код, пересоберите пакет.
|
|
187
187
|
После публикации обновите установленный пакет:
|
|
188
188
|
`python -m pip install --upgrade egekit-study`.
|
|
189
|
+
|
|
190
|
+
## Номера заданий в справке: версия 1.2.1
|
|
191
|
+
|
|
192
|
+
`man()` теперь подписывает у каждой функции номера заданий выбранного года.
|
|
193
|
+
`man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
|
|
194
|
+
№2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
|
|
195
|
+
подходящая нескольким номерам, появляется в каждой соответствующей группе.
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
from егэ import *
|
|
199
|
+
man() # Алфавитный список с номерами
|
|
200
|
+
man(по_заданиям=True) # Группы по заданиям
|
|
201
|
+
man(17) # Только функции для №17
|
|
202
|
+
man(по_заданиям=True, год=2027) # Нумерация проекта 2027
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
На установленной версии 1.2.0 эти новые параметры ещё не работают.
|
|
206
|
+
Для установки без ожидания обновления индекса PyPI можно установить
|
|
207
|
+
готовый файл dist/egekit_study-1.2.1-py3-none-any.whl из этого архива.
|
|
@@ -29,7 +29,7 @@ class ManualTests(unittest.TestCase):
|
|
|
29
29
|
self.assertEqual(self.output(17),self.output(задание=17))
|
|
30
30
|
self.assertIn('сведения_о_сети',self.output(задание=10,год=2027))
|
|
31
31
|
self.assertIn('простое_число',self.output(поиск='is_prime'))
|
|
32
|
-
self.assertIn('
|
|
32
|
+
self.assertIn('Найдено функций: 0',self.output(поиск='несуществующее_слово_8472'))
|
|
33
33
|
self.assertIn('Функция не найдена',self.output('делител'))
|
|
34
34
|
self.assertIn('делители',self.output('делител'))
|
|
35
35
|
self.assertIn('Функция не найдена',self.output('__import__("os")'))
|
|
@@ -43,6 +43,24 @@ class ManualTests(unittest.TestCase):
|
|
|
43
43
|
self.assertIn('делители',pager.call_args.args[0])
|
|
44
44
|
pager.assert_called_once()
|
|
45
45
|
|
|
46
|
+
def test_numbers_are_shown_beside_every_function(self):
|
|
47
|
+
text=self.output()
|
|
48
|
+
self.assertIn('делители [divisors] — №25',text)
|
|
49
|
+
self.assertIn('сведения_о_сети [network_info] — №13',text)
|
|
50
|
+
self.assertIn('сведения_о_сети [network_info] — №10',self.output(год=2027))
|
|
51
|
+
self.assertIn('Нумерация: 2027 (проект)',self.output(год=2027))
|
|
52
|
+
|
|
53
|
+
def test_grouped_catalog_and_filters(self):
|
|
54
|
+
text=self.output(по_заданиям=True)
|
|
55
|
+
for n in range(1,28): self.assertIn(f'ЗАДАНИЕ №{n} —',text)
|
|
56
|
+
self.assertEqual(text.count('справка [man]'),1)
|
|
57
|
+
selected=self.output(17,по_заданиям=True)
|
|
58
|
+
self.assertIn('ЗАДАНИЕ №17 —',selected)
|
|
59
|
+
self.assertNotIn('ЗАДАНИЕ №25 —',selected)
|
|
60
|
+
self.assertIn('ЗАДАНИЕ №10 — IPv4',self.output(год=2027,по_заданиям=True))
|
|
61
|
+
self.assertIn('ЗАДАНИЕ №25 —',self.output(поиск='is_prime',по_заданиям=True))
|
|
62
|
+
self.assertIn('Найдено функций: 0',self.output(поиск='not_a_function_8482',по_заданиям=True))
|
|
63
|
+
|
|
46
64
|
def test_cyrillic_star_import(self):
|
|
47
65
|
ns={}
|
|
48
66
|
exec('from егэ import *\nрезультат = делители(12)\nчисло = перевести_в_систему(125, 3)',ns)
|
|
@@ -50,7 +68,7 @@ class ManualTests(unittest.TestCase):
|
|
|
50
68
|
self.assertEqual(ns['число'],'11122')
|
|
51
69
|
self.assertIs(ns['man'],e.man)
|
|
52
70
|
self.assertIs(ns['справка'],e.man)
|
|
53
|
-
self.assertEqual(егэ.__version__,'1.2.
|
|
71
|
+
self.assertEqual(егэ.__version__,'1.2.1')
|
|
54
72
|
for name in e.__all__: self.assertIs(getattr(егэ,name),getattr(e,name))
|
|
55
73
|
|
|
56
74
|
if __name__=='__main__': unittest.main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|