Python з нуля · Тема 01 · Тест самоперевірки

Що таке програмування і навіщо Python

Обери відповідь — і одразу побачиш пояснення. Помилитись тут корисніше, ніж на іспиті.

← до лекції
Відповіді0 / 8   правильних: 0
Питання 1 / 8

В інтерактиві з роботом ти завантажив програму з помилкою: чотири «вперед» замість трьох. Робот пішов у стіну й зупинився на команді №4. Що це говорить про природу комп'ютера?

Чому так. Робот виконав рівно те, що написано, у написаному порядку — жодної власної ініціативи. Спокуслива відповідь «він зламався» помилкова саме тому, що збою не було: помилка була в програмі, тобто в людині. Машина не здогадується, чого ти хотів насправді.
Питання 2 / 8

В інтерактиві з рівнями мов видно: машинний код і асемблер займають однакові три рядки, а C і Python — по одному. Що саме додає асемблер порівняно з машинним кодом?

Чому так. Стовпчик у інтерактиві однаковий саме тому, що інструкції ті самі — асемблер лише дає їм імена (mov, add). Швидшим він бути не може: це той самий машинний код. Переносимості теж не додає — асемблер привʼязаний до конкретного процесора так само жорстко.
Питання 3 / 8

Чому твердження «Python — інтерпретована мова» неточне?

Чому так. Одна й та сама мова може мати різні реалізації: CPython робить компіляцію в байт-код і його інтерпретацію, PyPy додає ще й JIT у машинний код. Твердження про повну компіляцію в машинний код хибне — саме тому й потрібна віртуальна машина, яка байт-код виконує.
Питання 4 / 8

У байт-коді для `print(2 + 3)` стоїть інструкція LOAD_CONST зі значенням 5, а не окремі 2 і 3. Чому, і що зміниться для виразу `print(a + 3)`?

Чому так. Компілятор рахує наперед лише те, що відоме наперед. Значення змінної `a` зʼявиться аж під час виконання, тому для `a + 3` у байт-коді залишається BINARY_OP. Перевірити це можна самому: `dis.dis(ʼprint(a + 3)ʼ)` у практиці.
Питання 5 / 8

Тобі треба обробити мільярд чисел у циклі. За моделлю з інтерактиву 6 чистий Python витратить ≈45 секунд, скомпільований C — ≈0.4 секунди. Що зазвичай роблять на практиці?

Чому так. Саме так «повільний» Python і домінує в обчисленнях: він працює клеєм, а важку роботу робить бібліотека на C. Варіант із потоками хибний окремо: через GIL кілька потоків у CPython не прискорять обчислення взагалі — там потрібні процеси.
Питання 6 / 8

Що таке GIL і як він впливає на програму, яка більшу частину часу чекає відповіді від мережі?

Чому так. GIL заважає саме обчисленням: два потоки не рахуватимуть одночасно. Але потік, що чекає відповіді сервера, замок не тримає — тому для мережевих задач багатопотоковість працює. І це обмеження CPython, а не мови: у MicroPython чи в free-threaded збірці 3.13 картина інша.
Питання 7 / 8

У практиці ми написали `"2" + 3` і отримали TypeError лише під час виконання. Java такий код не дала б навіть зібрати. Як правильно оцінити цю різницю?

Чому так. Жодна зі сторін не «правильна»: явні типи ловлять помилки раніше, але коштують часу й багатослівності. Останній варіант хибний фактично: SyntaxError ловиться парсером ще до запуску, а TypeError — аж коли виконання дійде до рядка.
Питання 8 / 8

З чого складається будь-який алгоритм — і що з переліченого НЕ є окремим будівельним блоком?

Чому так. Три конструкції керування ходом виконання — послідовність, розгалуження, повторення — достатні, щоб записати будь-який алгоритм. Змінна до них не належить: вона зберігає дані, а не вирішує, який рядок виконається наступним.