Домашнє завдання

Тема 24 · Скрипти командного рядка

Усі три рівні — про один і той самий файл pohoda.py. Ми більше не пишемо код у зошиті: кожен рівень закінчується тим, що ти запускаєш скрипт із термінала й дивишся, що він відповів.

Дані для роботи зроби сам — маленький CSV на 6-8 рядків, щоб підсумок можна було порахувати в голові й звірити:

misto,data,temperatura,opady
Київ,2026-07-01,24.5,0.0
Львів,2026-07-01,21.0,3.2
Київ,2026-07-02,27.1,0.0
...

Працюй у власній теці. Тимчасові файли з практики видалилися самі — тут ти господар.


рівень 1Рівень 1 — База

Напиши pohoda.py, який приймає один позиційний аргумент — шлях до CSV — і друкує середню температуру. Додай необовʼязковий -m / --misto: якщо його передали, рахуй лише по рядках цього міста.

Обовʼязково:

Зроблено, якщо: усі чотири команди нижче поводяться саме так, як написано, і ти перевірив кожну через echo $? (у PowerShell — echo $LASTEXITCODE):

команда що має статися
python3 pohoda.py dani.csv середня температура по всіх рядках, код 0
python3 pohoda.py dani.csv --misto Київ середня лише по Києву, код 0
python3 pohoda.py повідомлення про брак аргументу, код 2
python3 pohoda.py nemaye.csv твоє повідомлення в stderr, код 1

рівень 2Рівень 2 — Плюс

Доростимо скрипт до утиліти, яку не соромно дати колезі.

  1. Додай -d / --dija з choices=["serednya", "maksymum", "minimum"] і типовим значенням serednya.
  2. Додай -t / --tochnist із type=int і default=1.
  3. Додай прапорець --tyho (action="store_true"), який прибирає з виводу весь текст — лишається голе число.
  4. У кожен help= встав %(default)s там, де є типове значення.
  5. Додай description= — одне речення про те, що робить скрипт.

Потім не заглядаючи у власний код, запусти python3 pohoda.py -h і прочитай, що вийшло. Якщо з довідки незрозуміло, як користуватись скриптом, — виправляй тексти help=, а не додавай пояснення в print.

Зроблено, якщо:


рівень 3Рівень 3 — Виклик

Три окремі задачі. Кожну можна зробити незалежно.

А. Конвеєр. Навчи скрипт читати зі stdin, коли замість імені файлу передали одинокий дефіс -. Перевір роботу в справжньому конвеєрі:

cat dani.csv | python3 pohoda.py - --misto Львів

Б. Власна перевірка типу. Напиши функцію nevidjemne_cile(tekst), яка повертає int, а на відʼємному числі кидає argparse.ArgumentTypeError зі своїм поясненням українською. Підстав її в type= для --tochnist.

В. Кілька файлів і підкоманди. Або зроби позиційний аргумент nargs="+" і навчи скрипт рахувати спільний підсумок по кількох файлах, або розбий утиліту на дві підкоманди через add_subparsers(): pohoda.py temperatura dani.csv і pohoda.py opady dani.csv, кожна зі своїм набором аргументів.

Зроблено, якщо:


Підказки