Рядок запис = "Київ;кава;249.50" має 16 символів. Що поверне запис[10:100]?
IndexError — це принципова відмінність від індексу. Верхня межа мовчки притискається до довжини рядка, тож запис[10:100] дорівнює запис[10:16]. Спокуса обрати IndexError природна: саме так поводиться запис[100] — але це вже індекс, а не зріз.У змінній напій лежить рядок "кава". Виконали окремим рядком напій.upper(), а наступним рядком — print(напій). Що надрукується?
.upper() нічого не міняє на місці — він повертає новий рядок ʼКАВАʼ. Ми його нікуди не записали, тож він зник тієї ж миті, а ярлик напій так і лишився на старому обʼєкті. Щоб отримати ʼКАВАʼ, треба написати напій = напій.upper().Перевірку «чи знайшовся підрядок» написали як if текст.find(підрядок): — у чому помилка?
find повертає індекс, а не «так/ні». Індекс 0 — цілком успішна знахідка, але для умови нуль хибний. А −1 («не знайшло») для умови істинний. Отже перевірка дає протилежну відповідь у обох крайніх випадках. Пиши if текст.find(підрядок) >= 0: або, ще краще, if підрядок in текст:.У рядку між словами «a» і «b» стоять два пробіли поспіль, а після «b» — ще один. Скільки елементів дадуть виклики .split() і .split(" ") відповідно?
.split() без аргументу ріже по будь-якій кількості пробільних символів поспіль і викидає порожні шматки з країв — виходить [ʼaʼ, ʼbʼ]. .split(" ") ріже рівно по одному пробілу й чесно лишає порожні рядки між сусідніми роздільниками — виходить [ʼaʼ, ʼʼ, ʼbʼ, ʼʼ].Скільки дадуть len("Київ") і len("Київ".encode())?
len над рядком рахує символи — їх чотири. .encode() дає обʼєкт типу bytes, і в UTF-8 кожна кирилична літера займає два байти, отже 8. Саме через це в нашому наскрізному записі 16 символів, але 24 байти: вісім кириличних літер по два байти плюс вісім символів ASCII по одному.Чому дописування «результат += шматок» десять тисяч разів гірше за один виклик "".join(частини)?
join спершу рахує сумарну довжину, один раз виділяє памʼять і копіює кожен символ рівно один раз. Швидкість самої мови тут ні до чого: різниця в кількості роботи, а не в тому, хто її виконує.Що дасть f"{1234567.891:>6.2f}" — тобто ширина поля 6, точність 2?
У коді a = "кава", а далі c = "".join(["ка", "ва"]). Що дадуть c == a і c is a?
== питає про значення — воно однакове, отже True. is питає про той самий обʼєкт у памʼяті. Рядок, склеєний під час роботи програми, завжди новий обʼєкт, тому False. Автоматично інтернуються лише рядки, схожі на ідентифікатори (латиниця, цифри, підкреслення) — і саме тому покладатись на is для рядків не можна.