Модуль 6

Strings: зберігання та маніпуляція даними

Ось урок, створений спеціально для вас у стилі CS50: енергійно, з глибиною, але доступно. Поїхали!


🧵 Тема уроку: Strings (Рядки). Мистецтво роботи з текстом

Привіт, друзі! 👋

1. 🔥 Вступ: Чому світ не складається лише з чисел?

Уявіть на секунду, що ви відкриваєте свій улюблений месенджер, щоб написати другу: "Зустрінемось о 18:00?". Але замість літер у вас на клавіатурі лише цифри. Ви намагаєтесь передати думку двійковим кодом... Жах, правда?

Комп'ютери обожнюють числа. Вони "думають" нулями та одиницями. Але ми, люди, спілкуємось словами, реченнями, поемами та мемами.

Риторичне питання: Як же нам подружити залізяку, яка розуміє лише електричні імпульси, з Шекспіром або вашим твітом?

Ось тут на сцену виходять Strings (Рядки). Без них ваш код був би просто калькулятором. Без рядків не існувало б пошуку в Google, не було б імен користувачів, паролів, адрес сайтів і навіть цього тексту, який ви зараз читаєте.

Аналогія: Уявіть, що пам'ять комп'ютера — це величезна шафа з маленькими шухлядками. Число — це одна річ в одній шухляді. А Рядок (String) — це намисто, де кожна літера — це окрема намистинка, яка лежить у своїй власній шухлядці, але вони пов'язані ниткою і йдуть одна за одною.

Сьогодні ми навчимося створювати це "намисто", змінювати його і знаходити в ньому потрібні нам "намистинки".


2. 🧠 Теоретична база: Що там "під капотом"?

Давайте заглянемо всередину.

Визначення:

String (Рядок) — це впорядкована послідовність символів.

Коли ви пишете "Hello", комп'ютер не бачить це як єдине ціле магічне слово. Він бачить це як список окремих символів: H, e, l, l, o.

Як це виглядає в пам'яті?

Уявіть вулицю з будинками (адресами пам'яті). Якщо наш рядок — це "CODE", він займе 4 сусідні будинки:

Адреса в пам'яті 100 101 102 103
Символ C O D E
Індекс 0 1 2 3

❗ Що треба запам'ятати (The Big Deal):

  1. Нульова індексація (Zero-indexing): Ми, програмісти, дивні люди. Ми починаємо рахувати з нуля. Перша літера C має індекс 0. Чому? Тому що індекс — це насправді зміщення від початку. На скільки кроків треба відійти від початку рядка, щоб взяти першу літеру? На нуль кроків. Ось і логіка.
  2. Лапки (Quotes): Комп'ютер повинен знати, де текст починається, а де закінчується. Тому ми завжди огортаємо рядки в лапки: "Привіт" або 'Привіт'. Без лапок комп'ютер подумає, що це назва змінної або команди.
  3. Незмінність (Immutability): (Важливо для багатьох мов, як Python/Java). Уявіть, що рядок висічений у камені. Якщо ви створили рядок "Cat", ви не можете просто взяти молоток і замінити C на B, щоб вийшло "Bat". Вам доведеться взяти нову кам'яну брилу і висікти "Bat" заново. Ви не змінюєте старий рядок, ви створюєте новий.

3. 🧪 Приклади: Від "Hello World" до реальності

Давайте подивимось на код (використаємо Python як "лінгва франка", бо він читається як англійська).

Приклад 1: Мінімальний старт

Що ми очікуємо? Просто зберегти текст і показати його.

message = "Вітаю, студенте!"
print(message)

Результат: На екрані з'явиться Вітаю, студенте!. Все просто. Ми поклали текст у коробку з написом message.


Приклад 2: "Операція Франкенштейн" (Конкатенація)

У реальному проєкті (наприклад, реєстрація на сайті) у вас є first_name та last_name. Вам треба зробити повне ім'я.

Питання до вас: Якщо ми "додамо" одне слово до іншого через плюс (+), що станеться? Чи буде там пробіл автоматично?

first_name = "Джеймс"
last_name = "Бонд"

full_name = "Мене звати " + last_name + ". " + first_name + " " + last_name + "."
print(full_name)

Результат: Мене звати Бонд. Джеймс Бонд. Пояснення: Комп'ютер склеює рядки точно так, як ви йому сказали. Він не додає пробіли сам. Ми мусили додати " " (рядок з пробілом) вручну. Це називається конкатенація.


Приклад 3: Доступ до "нутрощів" (Індексація та Зрізи)

Уявіть, що ви обробляєте квиток на літак. Код рейсу виглядає так: KIEV-2024. Вам треба витягнути тільки місто.

flight_code = "KIEV-2024"

# Беремо першу літеру (пам'ятаєте про 0?)
first_letter = flight_code[0] 

# Беремо перші 4 літери (зріз)
city = flight_code[0:4] 

print(f"Виліт з міста: {city}")

Результат: Виліт з міста: KIEV Логіка: [0:4] означає: "Почни з індексу 0 і йди до 4, але 4-й не включай". Це як відрізати шматок торта.


4. 🛠 Практична частина

Час розім'яти пальці! Відкрийте редактор коду (або просто блокнот) і спробуйте:

  1. 🔹 Повтори: Створи змінну movie з назвою твого улюбленого фільму і виведи її на екран.
  2. 🔹 Зміни умови: Створи дві змінні part1 = "Супер" і part2 = "мен". Склей їх, щоб вийшов супергерой. Не забудь про print.
  3. 🔹 Виправ помилку: python print("Це рядок з помилкою') # Подивись уважно на лапки!
  4. 🔹 Реальна задача (URL-адреса): У нас є адреса сайту: url = "google.com". Додай спереду "https://www.", щоб вийшло повноцінне посилання.
  5. 🔹 Міні-кейс (Чат-бот): Користувач ввів своє ім'я з маленької літери і з зайвими пробілами: user_input = " олег ". Твоя задача (гуглимо методи!):
    • Прибрати зайві пробіли (strip).
    • Зробити першу літеру великою (capitalize).
    • Вивести чисте "Олег".
  6. 🔹 А що, якщо... Що буде, якщо помножити рядок на число? Спробуй: print("Нана" * 3 + " Бетмен!"). Який результат ти очікуєш?

5. 💡 Мислення як у розробника

Як відрізнити новачка від профі, дивлячись на їх код з рядками?

🚧 Типові помилки новачків:

  • Плутанина типів: "100" і 100 — це різні речі. "100" + "100" дасть "100100" (текст), а 100 + 100 дасть 200 (математика).
  • Вихід за межі (Off-by-one error): Якщо у слові "Кіт" 3 літери, їх індекси 0, 1, 2. Якщо ви спробуєте взяти word[3], програма впаде з криком "Index out of range". Чому? Бо 3-го елемента немає (рахуємо 0, 1, 2).

🚀 Як думає профі:

  1. Валідація даних: Профі ніколи не вірить користувачу. Якщо просимо ввести вік, користувач може написати "двадцять". Профі перевірить, чи цей рядок складається з цифр, перш ніж робити математику.
  2. Бібліотеки: Профі не пише вручну цикли, щоб знайти слово в тексті. Він використовує готові інструменти (методи на кшталт .find(), .replace(), .upper()). Навіщо винаходити велосипед, якщо у вас є спорткар?
  3. Кодування (Encoding): Профі пам'ятає, що існують Емодзі 😸. Це теж символи! Сучасні стандарти (UTF-8) дозволяють зберігати будь-які символи будь-якої мови світу.

6. 🧩 Підсумок

Отже, що ми сьогодні зробили? Ми розібрали "атоми" цифрового тексту.

Тепер ви вмієте: 1. ✅ Зберігати текстову інформацію у змінних. 2. ✅ "Хірургічно" діставати окремі символи з тексту. 3. ✅ Склеювати фрагменти в цілісні речення. 4. ✅ Розуміти, чому "5" + "5" дорівнює "55".

Тизер наступного уроку: Окей, ми маємо рядок з паролем користувача. Але як перевірити, чи він правильний? Як сказати програмі: "ЯКЩО пароль правильний, ТО пусти користувача, ІНАКШЕ заблокуй"? Наступного разу ми зануримось у Умовні конструкції (Boolean Logic & Conditionals). Буде логічно! 😉

А поки — practice, practice, practice!