Тест самоперевірки

Рядки

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

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

Рядок запис = "Київ;кава;249.50" має 16 символів. Що поверне запис[10:100]?

Чому так. Зріз ніколи не падає з IndexError — це принципова відмінність від індексу. Верхня межа мовчки притискається до довжини рядка, тож запис[10:100] дорівнює запис[10:16]. Спокуса обрати IndexError природна: саме так поводиться запис[100] — але це вже індекс, а не зріз.
Питання 2 / 8

У змінній напій лежить рядок "кава". Виконали окремим рядком напій.upper(), а наступним рядком — print(напій). Що надрукується?

Чому так. Рядок незмінний, тому .upper() нічого не міняє на місці — він повертає новий рядок ʼКАВАʼ. Ми його нікуди не записали, тож він зник тієї ж миті, а ярлик напій так і лишився на старому обʼєкті. Щоб отримати ʼКАВАʼ, треба написати напій = напій.upper().
Питання 3 / 8

Перевірку «чи знайшовся підрядок» написали як if текст.find(підрядок): — у чому помилка?

Чому так. find повертає індекс, а не «так/ні». Індекс 0 — цілком успішна знахідка, але для умови нуль хибний. А −1 («не знайшло») для умови істинний. Отже перевірка дає протилежну відповідь у обох крайніх випадках. Пиши if текст.find(підрядок) >= 0: або, ще краще, if підрядок in текст:.
Питання 4 / 8

У рядку між словами «a» і «b» стоять два пробіли поспіль, а після «b» — ще один. Скільки елементів дадуть виклики .split() і .split(" ") відповідно?

Чому так. Це дві різні операції. .split() без аргументу ріже по будь-якій кількості пробільних символів поспіль і викидає порожні шматки з країв — виходить [ʼaʼ, ʼbʼ]. .split(" ") ріже рівно по одному пробілу й чесно лишає порожні рядки між сусідніми роздільниками — виходить [ʼaʼ, ʼʼ, ʼbʼ, ʼʼ].
Питання 5 / 8

Скільки дадуть len("Київ") і len("Київ".encode())?

Чому так. len над рядком рахує символи — їх чотири. .encode() дає обʼєкт типу bytes, і в UTF-8 кожна кирилична літера займає два байти, отже 8. Саме через це в нашому наскрізному записі 16 символів, але 24 байти: вісім кириличних літер по два байти плюс вісім символів ASCII по одному.
Питання 6 / 8

Чому дописування «результат += шматок» десять тисяч разів гірше за один виклик "".join(частини)?

Чому так. Рядок незмінний, тому «дописати» неможливо — можна лише створити третій рядок і скопіювати в нього обидва. На k-му кроці копіюється вже k шматків, разом — пропорційно n². join спершу рахує сумарну довжину, один раз виділяє памʼять і копіює кожен символ рівно один раз. Швидкість самої мови тут ні до чого: різниця в кількості роботи, а не в тому, хто її виконує.
Питання 7 / 8

Що дасть f"{1234567.891:>6.2f}" — тобто ширина поля 6, точність 2?

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

У коді a = "кава", а далі c = "".join(["ка", "ва"]). Що дадуть c == a і c is a?

Чому так. == питає про значення — воно однакове, отже True. is питає про той самий обʼєкт у памʼяті. Рядок, склеєний під час роботи програми, завжди новий обʼєкт, тому False. Автоматично інтернуються лише рядки, схожі на ідентифікатори (латиниця, цифри, підкреслення) — і саме тому покладатись на is для рядків не можна.