egekit-study 1.2.0__tar.gz → 1.2.2__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.2}/GUIDE.html +11 -5
- {egekit_study-1.2.0 → egekit_study-1.2.2}/GUIDE.md +10 -4
- {egekit_study-1.2.0 → egekit_study-1.2.2}/PKG-INFO +23 -3
- {egekit_study-1.2.0 → egekit_study-1.2.2}/README.md +22 -2
- {egekit_study-1.2.0 → egekit_study-1.2.2}/RUSSIAN_NAMES.md +1 -1
- {egekit_study-1.2.0 → egekit_study-1.2.2}/VALIDATION.md +15 -2
- {egekit_study-1.2.0 → egekit_study-1.2.2}/build_docs.py +4 -3
- {egekit_study-1.2.0 → egekit_study-1.2.2}/egekit.py +64 -9
- {egekit_study-1.2.0 → egekit_study-1.2.2}/egekit_study.egg-info/PKG-INFO +23 -3
- {egekit_study-1.2.0 → egekit_study-1.2.2}/examples_man.py +2 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/pyproject.toml +1 -1
- {egekit_study-1.2.0 → egekit_study-1.2.2}/tests/test_manual.py +27 -2
- {egekit_study-1.2.0 → egekit_study-1.2.2}/LICENSE +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/MANIFEST.in +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/egekit_study.egg-info/SOURCES.txt +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/egekit_study.egg-info/dependency_links.txt +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/egekit_study.egg-info/top_level.txt +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/examples.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/examples_ru.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/setup.cfg +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/tests/test_egekit.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/tests/test_russian_names.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}/verify_official.py +0 -0
- {egekit_study-1.2.0 → egekit_study-1.2.2}//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.2 · без зависимостей</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(по_заданиям=False) # При необходимости — алфавитный список
|
|
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,24 @@ 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, по_заданиям=True)</code></pre><p>Справочник EGEKit в терминале: назначение, сигнатура, параметры, пример и номера заданий.
|
|
407
408
|
|
|
408
409
|
функция — объект функции либо её русское/английское имя строкой.
|
|
409
410
|
Без функции выводится список с краткими описаниями. Целое число первым
|
|
410
411
|
аргументом означает номер задания. задание и год фильтруют список;
|
|
411
|
-
поиск ищет текст в именах и описаниях;
|
|
412
|
+
поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
|
|
413
|
+
по номерам 1–27 с названиями тем (режим по умолчанию).
|
|
414
|
+
по_заданиям=False включает алфавитный список. Каждый пункт показывает номера
|
|
415
|
+
заданий для выбранного года; листать=True открывает системный
|
|
412
416
|
просмотрщик через pydoc.pager (выход обычно клавишей q).
|
|
413
417
|
По умолчанию справка просто печатается, не требует действий и возвращает None.
|
|
414
418
|
Ничего не выполняет из переданной строки: имена берутся только из каталога.
|
|
415
419
|
|
|
416
420
|
</p>
|
|
417
421
|
<p class="example"><strong>Пример:</strong>
|
|
418
|
-
справка() #
|
|
422
|
+
справка() # Функции по заданиям от №1 до №27
|
|
423
|
+
справка(по_заданиям=False) # Алфавитный список
|
|
424
|
+
справка(по_заданиям=True) # Группы по заданиям 1–27
|
|
419
425
|
справка(делители) # Подробная справка о функции
|
|
420
426
|
справка('делители') # То же по строковому имени
|
|
421
427
|
справка('делители') # Английское имя тоже подходит
|
|
@@ -483,7 +489,7 @@ man(поиск='простые') # Поиск в справ
|
|
|
483
489
|
<h3>цифры_числа</h3><p class="muted">Английское имя: <code>base_digits</code></p><div class="tags" data-tags></div>
|
|
484
490
|
<pre><code>цифры_числа(n, base)</code></pre><p>Цифры неотрицательного числа списком, от старшей к младшей; допускает основания больше 36. </p>
|
|
485
491
|
<p class="example"><strong>Пример:</strong> цифры_числа(10,3) == [1,0,1].</p></article></div><p id="empty" hidden>Функций с такими условиями не найдено. Попробуйте другое слово или номер.</p>
|
|
486
|
-
<h2>Проверки и источники</h2><p>
|
|
492
|
+
<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
493
|
<script>
|
|
488
494
|
const cards=[...document.querySelectorAll('article')], search=document.querySelector('#search'), year=document.querySelector('#year'), task=document.querySelector('#task');
|
|
489
495
|
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(по_заданиям=False) # При необходимости — алфавитный список
|
|
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, по_заданиям=True)
|
|
1228
1229
|
```
|
|
1229
1230
|
|
|
1230
1231
|
Английское имя: `man`.
|
|
@@ -1236,13 +1237,18 @@ FCFS-очередь к одинаковым серверам. arrivals — (пр
|
|
|
1236
1237
|
функция — объект функции либо её русское/английское имя строкой.
|
|
1237
1238
|
Без функции выводится список с краткими описаниями. Целое число первым
|
|
1238
1239
|
аргументом означает номер задания. задание и год фильтруют список;
|
|
1239
|
-
поиск ищет текст в именах и описаниях;
|
|
1240
|
+
поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
|
|
1241
|
+
по номерам 1–27 с названиями тем (режим по умолчанию).
|
|
1242
|
+
по_заданиям=False включает алфавитный список. Каждый пункт показывает номера
|
|
1243
|
+
заданий для выбранного года; листать=True открывает системный
|
|
1240
1244
|
просмотрщик через pydoc.pager (выход обычно клавишей q).
|
|
1241
1245
|
По умолчанию справка просто печатается, не требует действий и возвращает None.
|
|
1242
1246
|
Ничего не выполняет из переданной строки: имена берутся только из каталога.
|
|
1243
1247
|
|
|
1244
1248
|
Пример:
|
|
1245
|
-
справка() #
|
|
1249
|
+
справка() # Функции по заданиям от №1 до №27
|
|
1250
|
+
справка(по_заданиям=False) # Алфавитный список
|
|
1251
|
+
справка(по_заданиям=True) # Группы по заданиям 1–27
|
|
1246
1252
|
справка(делители) # Подробная справка о функции
|
|
1247
1253
|
справка('делители') # То же по строковому имени
|
|
1248
1254
|
справка('делители') # Английское имя тоже подходит
|
|
@@ -1437,4 +1443,4 @@ FCFS-очередь к одинаковым серверам. arrivals — (пр
|
|
|
1437
1443
|
|
|
1438
1444
|
Архив проекта 2027: https://doc.fipi.ru/ege/demoversii-specifikacii-kodifikatory/2027/inf_11_2027.zip
|
|
1439
1445
|
|
|
1440
|
-
|
|
1446
|
+
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.2
|
|
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.2 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
|
|
14
14
|
|
|
15
15
|
Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
|
|
16
16
|
исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
|
|
@@ -181,8 +181,28 @@ python -m unittest discover -s tests -v
|
|
|
181
181
|
старых архивов. После публикации пользователи обновляют пакет через
|
|
182
182
|
`python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.
|
|
183
183
|
|
|
184
|
-
Готовые файлы для публикации версии 1.2.
|
|
184
|
+
Готовые файлы для публикации версии 1.2.2 находятся в папке 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.2
|
|
191
|
+
|
|
192
|
+
`man()` по умолчанию группирует функции по номерам от №1 до №27 и подписывает у каждой функции номера заданий выбранного года. Для алфавитного списка: `man(по_заданиям=False)`.
|
|
193
|
+
`man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
|
|
194
|
+
№2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
|
|
195
|
+
подходящая нескольким номерам, появляется в каждой соответствующей группе.
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
from егэ import *
|
|
199
|
+
man() # Разделы от задания №1 до №27
|
|
200
|
+
man(по_заданиям=False) # Алфавитный список с номерами
|
|
201
|
+
man(по_заданиям=True) # Группы по заданиям
|
|
202
|
+
man(17) # Только функции для №17
|
|
203
|
+
man(по_заданиям=True, год=2027) # Нумерация проекта 2027
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
На установленной версии 1.2.0 эти новые параметры ещё не работают.
|
|
207
|
+
Для установки без ожидания обновления индекса PyPI можно установить
|
|
208
|
+
готовый файл dist/egekit_study-1.2.2-py3-none-any.whl из этого архива.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# EGEKit — библиотека для подготовки к ЕГЭ по информатике
|
|
2
2
|
|
|
3
|
-
Версия 1.2.
|
|
3
|
+
Версия 1.2.2 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
|
|
4
4
|
|
|
5
5
|
Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
|
|
6
6
|
исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
|
|
@@ -171,8 +171,28 @@ python -m unittest discover -s tests -v
|
|
|
171
171
|
старых архивов. После публикации пользователи обновляют пакет через
|
|
172
172
|
`python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.
|
|
173
173
|
|
|
174
|
-
Готовые файлы для публикации версии 1.2.
|
|
174
|
+
Готовые файлы для публикации версии 1.2.2 находятся в папке 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.2
|
|
181
|
+
|
|
182
|
+
`man()` по умолчанию группирует функции по номерам от №1 до №27 и подписывает у каждой функции номера заданий выбранного года. Для алфавитного списка: `man(по_заданиям=False)`.
|
|
183
|
+
`man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
|
|
184
|
+
№2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
|
|
185
|
+
подходящая нескольким номерам, появляется в каждой соответствующей группе.
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
from егэ import *
|
|
189
|
+
man() # Разделы от задания №1 до №27
|
|
190
|
+
man(по_заданиям=False) # Алфавитный список с номерами
|
|
191
|
+
man(по_заданиям=True) # Группы по заданиям
|
|
192
|
+
man(17) # Только функции для №17
|
|
193
|
+
man(по_заданиям=True, год=2027) # Нумерация проекта 2027
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
На установленной версии 1.2.0 эти новые параметры ещё не работают.
|
|
197
|
+
Для установки без ожидания обновления индекса PyPI можно установить
|
|
198
|
+
готовый файл dist/egekit_study-1.2.2-py3-none-any.whl из этого архива.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# Проверка EGEKit 1.2.
|
|
1
|
+
# Проверка EGEKit 1.2.2
|
|
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,16 @@ 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 тестовых метода проходят.
|
|
99
|
+
|
|
100
|
+
## Сортировка по умолчанию, версия 1.2.2
|
|
101
|
+
|
|
102
|
+
man() теперь эквивалентен man(по_заданиям=True). Тест проверяет числовой
|
|
103
|
+
порядок заголовков №1–27 и алфавитный порядок альтернативного режима
|
|
104
|
+
man(по_заданиям=False). Все 24 тестовых метода проходят. Алгоритмы задач
|
|
105
|
+
не менялись.
|
|
@@ -69,6 +69,7 @@ print(делители(120))
|
|
|
69
69
|
print(перевести_в_систему(125, 3))
|
|
70
70
|
man(делители) # Назначение, параметры и пример
|
|
71
71
|
man(17) # Функции для задания 17
|
|
72
|
+
man(по_заданиям=False) # При необходимости — алфавитный список
|
|
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.2 · без зависимостей</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.2'
|
|
21
21
|
CATALOG = {}
|
|
22
22
|
|
|
23
23
|
def _task(*numbers):
|
|
@@ -1291,19 +1291,24 @@ __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, по_заданиям=True):
|
|
1295
1295
|
"""Справочник EGEKit в терминале: назначение, сигнатура, параметры, пример и номера заданий.
|
|
1296
1296
|
|
|
1297
1297
|
функция — объект функции либо её русское/английское имя строкой.
|
|
1298
1298
|
Без функции выводится список с краткими описаниями. Целое число первым
|
|
1299
1299
|
аргументом означает номер задания. задание и год фильтруют список;
|
|
1300
|
-
поиск ищет текст в именах и описаниях;
|
|
1300
|
+
поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
|
|
1301
|
+
по номерам 1–27 с названиями тем (режим по умолчанию).
|
|
1302
|
+
по_заданиям=False включает алфавитный список. Каждый пункт показывает номера
|
|
1303
|
+
заданий для выбранного года; листать=True открывает системный
|
|
1301
1304
|
просмотрщик через pydoc.pager (выход обычно клавишей q).
|
|
1302
1305
|
По умолчанию справка просто печатается, не требует действий и возвращает None.
|
|
1303
1306
|
Ничего не выполняет из переданной строки: имена берутся только из каталога.
|
|
1304
1307
|
|
|
1305
1308
|
Пример:
|
|
1306
|
-
man() #
|
|
1309
|
+
man() # Функции по заданиям от №1 до №27
|
|
1310
|
+
man(по_заданиям=False) # Алфавитный список
|
|
1311
|
+
man(по_заданиям=True) # Группы по заданиям 1–27
|
|
1307
1312
|
man(делители) # Подробная справка о функции
|
|
1308
1313
|
man('делители') # То же по строковому имени
|
|
1309
1314
|
man('divisors') # Английское имя тоже подходит
|
|
@@ -1381,15 +1386,65 @@ def man(функция=None, *, задание=None, год=2026, поиск=Non
|
|
|
1381
1386
|
query = поиск.casefold()
|
|
1382
1387
|
candidates = [name for name in candidates if query in
|
|
1383
1388
|
(name + ' ' + РУССКИЕ_ИМЕНА[name] + ' ' + documentation(name)).casefold()]
|
|
1384
|
-
lines.append('СПИСОК ФУНКЦИЙ' + (f' — задание {задание}
|
|
1385
|
-
lines.append(f'
|
|
1386
|
-
|
|
1389
|
+
lines.append('СПИСОК ФУНКЦИЙ' + (f' — задание {задание}' if задание else ''))
|
|
1390
|
+
lines.append(f'Нумерация: {год}' + (' (проект)' if год == 2027 else ''))
|
|
1391
|
+
lines.append(f'Найдено функций: {len(candidates)}')
|
|
1392
|
+
|
|
1393
|
+
def add_entry(name):
|
|
1394
|
+
numbers = catalog[name]
|
|
1395
|
+
if tuple(numbers) == tuple(range(1, 28)):
|
|
1396
|
+
label = '№1–27'
|
|
1397
|
+
elif numbers:
|
|
1398
|
+
label = '№' + ', '.join(map(str, numbers))
|
|
1399
|
+
else:
|
|
1400
|
+
label = 'историческая/вспомогательная'
|
|
1387
1401
|
description = documentation(name).split('Пример:')[0].split('. ')[0].split('\n')[0]
|
|
1388
|
-
lines.extend([f' {РУССКИЕ_ИМЕНА[name]} [{name}]',
|
|
1402
|
+
lines.extend([f' {РУССКИЕ_ИМЕНА[name]} [{name}] — {label}',
|
|
1389
1403
|
textwrap.fill(description, width=96, initial_indent=' ', subsequent_indent=' ')])
|
|
1404
|
+
|
|
1405
|
+
if по_заданиям:
|
|
1406
|
+
topics = {
|
|
1407
|
+
1: 'Графы и соответствие вершин', 2: 'Логика и таблицы истинности',
|
|
1408
|
+
3: 'Таблицы и базы данных', 4: 'Коды и условие Фано',
|
|
1409
|
+
5: 'Преобразование чисел', 6: 'Черепаха и геометрия',
|
|
1410
|
+
7: 'Изображения, звук и передача данных', 8: 'Комбинаторика и слова',
|
|
1411
|
+
9: 'Строки таблицы', 10: 'Поиск в текстовом документе',
|
|
1412
|
+
11: 'Объём хранения', 12: 'Редактор и машина Тьюринга',
|
|
1413
|
+
13: 'IPv4 и маски сетей', 14: 'Системы счисления',
|
|
1414
|
+
15: 'Логические условия и параметры', 16: 'Рекурсия',
|
|
1415
|
+
17: 'Последовательности: пары и тройки', 18: 'Робот и пути по таблице',
|
|
1416
|
+
19: 'Игры: первый ход', 20: 'Игры: стратегия победы',
|
|
1417
|
+
21: 'Игры: неизбежное поражение', 22: 'Параллельные процессы',
|
|
1418
|
+
23: 'Исполнители и количество программ', 24: 'Строки и подстроки',
|
|
1419
|
+
25: 'Делители, простые числа и маски', 26: 'Сортировка и моделирование',
|
|
1420
|
+
27: 'Кластеризация и анализ данных'}
|
|
1421
|
+
if год == 2027:
|
|
1422
|
+
topics.update({10: 'IPv4 и маски сетей',
|
|
1423
|
+
13: 'Исполнители и количество программ',
|
|
1424
|
+
23: 'Пути в ориентированном графе',
|
|
1425
|
+
27: 'Анализ данных: точки, признаки и энергия частиц'})
|
|
1426
|
+
common = [name for name in candidates if tuple(catalog[name]) == tuple(range(1, 28))]
|
|
1427
|
+
for number in ([задание] if задание is not None else range(1, 28)):
|
|
1428
|
+
group = [name for name in candidates if number in catalog[name] and name not in common]
|
|
1429
|
+
if group:
|
|
1430
|
+
lines.extend(['', f'ЗАДАНИЕ №{number} — {topics[number]}'])
|
|
1431
|
+
for name in sorted(group, key=lambda n: РУССКИЕ_ИМЕНА[n]):
|
|
1432
|
+
add_entry(name)
|
|
1433
|
+
historical = [name for name in candidates if not catalog[name]]
|
|
1434
|
+
if historical:
|
|
1435
|
+
lines.extend(['', 'ИСТОРИЧЕСКИЕ И ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ'])
|
|
1436
|
+
for name in sorted(historical, key=lambda n: РУССКИЕ_ИМЕНА[n]): add_entry(name)
|
|
1437
|
+
if common:
|
|
1438
|
+
lines.extend(['', 'ОБЩИЕ ИНСТРУМЕНТЫ ДЛЯ ВСЕХ ЗАДАНИЙ'])
|
|
1439
|
+
for name in sorted(common, key=lambda n: РУССКИЕ_ИМЕНА[n]): add_entry(name)
|
|
1440
|
+
else:
|
|
1441
|
+
for name in sorted(candidates, key=lambda n: РУССКИЕ_ИМЕНА[n]):
|
|
1442
|
+
add_entry(name)
|
|
1390
1443
|
lines.extend(['', 'Подробнее: man(делители) или man("делители")',
|
|
1391
1444
|
'Поиск: man(поиск="строк") | По заданию: man(17)',
|
|
1392
|
-
'
|
|
1445
|
+
'Алфавитный список: man(по_заданиям=False)',
|
|
1446
|
+
'Постраничный просмотр: man(листать=True)',
|
|
1447
|
+
'Номера включают смежные и вспомогательные инструменты, а не только готовые решения.'])
|
|
1393
1448
|
text = '\n'.join(lines)
|
|
1394
1449
|
if листать:
|
|
1395
1450
|
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.2
|
|
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.2 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
|
|
14
14
|
|
|
15
15
|
Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
|
|
16
16
|
исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
|
|
@@ -181,8 +181,28 @@ python -m unittest discover -s tests -v
|
|
|
181
181
|
старых архивов. После публикации пользователи обновляют пакет через
|
|
182
182
|
`python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.
|
|
183
183
|
|
|
184
|
-
Готовые файлы для публикации версии 1.2.
|
|
184
|
+
Готовые файлы для публикации версии 1.2.2 находятся в папке 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.2
|
|
191
|
+
|
|
192
|
+
`man()` по умолчанию группирует функции по номерам от №1 до №27 и подписывает у каждой функции номера заданий выбранного года. Для алфавитного списка: `man(по_заданиям=False)`.
|
|
193
|
+
`man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
|
|
194
|
+
№2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
|
|
195
|
+
подходящая нескольким номерам, появляется в каждой соответствующей группе.
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
from егэ import *
|
|
199
|
+
man() # Разделы от задания №1 до №27
|
|
200
|
+
man(по_заданиям=False) # Алфавитный список с номерами
|
|
201
|
+
man(по_заданиям=True) # Группы по заданиям
|
|
202
|
+
man(17) # Только функции для №17
|
|
203
|
+
man(по_заданиям=True, год=2027) # Нумерация проекта 2027
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
На установленной версии 1.2.0 эти новые параметры ещё не работают.
|
|
207
|
+
Для установки без ожидания обновления индекса PyPI можно установить
|
|
208
|
+
готовый файл dist/egekit_study-1.2.2-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,31 @@ 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
|
+
self.assertEqual(text,self.output())
|
|
56
|
+
positions=[text.index(f"ЗАДАНИЕ №{n} —") for n in range(1,28)]
|
|
57
|
+
self.assertEqual(positions,sorted(positions))
|
|
58
|
+
alphabetical=self.output(по_заданиям=False)
|
|
59
|
+
self.assertNotIn("ЗАДАНИЕ №1 —",alphabetical)
|
|
60
|
+
entries=[line for line in alphabetical.splitlines() if line.startswith(" ") and not line.startswith(" ")]
|
|
61
|
+
self.assertEqual(entries,sorted(entries))
|
|
62
|
+
for n in range(1,28): self.assertIn(f'ЗАДАНИЕ №{n} —',text)
|
|
63
|
+
self.assertEqual(text.count('справка [man]'),1)
|
|
64
|
+
selected=self.output(17,по_заданиям=True)
|
|
65
|
+
self.assertIn('ЗАДАНИЕ №17 —',selected)
|
|
66
|
+
self.assertNotIn('ЗАДАНИЕ №25 —',selected)
|
|
67
|
+
self.assertIn('ЗАДАНИЕ №10 — IPv4',self.output(год=2027,по_заданиям=True))
|
|
68
|
+
self.assertIn('ЗАДАНИЕ №25 —',self.output(поиск='is_prime',по_заданиям=True))
|
|
69
|
+
self.assertIn('Найдено функций: 0',self.output(поиск='not_a_function_8482',по_заданиям=True))
|
|
70
|
+
|
|
46
71
|
def test_cyrillic_star_import(self):
|
|
47
72
|
ns={}
|
|
48
73
|
exec('from егэ import *\nрезультат = делители(12)\nчисло = перевести_в_систему(125, 3)',ns)
|
|
@@ -50,7 +75,7 @@ class ManualTests(unittest.TestCase):
|
|
|
50
75
|
self.assertEqual(ns['число'],'11122')
|
|
51
76
|
self.assertIs(ns['man'],e.man)
|
|
52
77
|
self.assertIs(ns['справка'],e.man)
|
|
53
|
-
self.assertEqual(егэ.__version__,'1.2.
|
|
78
|
+
self.assertEqual(егэ.__version__,'1.2.2')
|
|
54
79
|
for name in e.__all__: self.assertIs(getattr(егэ,name),getattr(e,name))
|
|
55
80
|
|
|
56
81
|
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
|