Глава 12 · Множество увлекательных мини-проектов!

Проект: записная книжка

Словарь как естественное хранилище «имя → телефон» — и первый взгляд на интерактивное меню, управляемое командами.

Используем
dictif/elifциклыf-строки
Уровень
★★ средний
Результат
текстовое меню

Что создаём

Записную книжку контактов в памяти программы: показать все контакты, добавить, найти, изменить, удалить.

Модель данных

contacts (dict)
"Anna" → "+48 111 111 111"
"Bob" → "+48 222 222 222"
Ключ — имя, значение — телефон. Почему dict? Потому что ищем контакт по имени, а не по позиции
Почему словарь, а не список
Список пришлось бы перебирать целиком в поисках нужного имени. Словарь сразу даёт доступ по ключу (глава 11) — contacts["Anna"], без перебора.

Действия

zapisnaya_knizhka.py
contacts = {
    "Anna": "+48 111 111 111",
    "Bob": "+48 222 222 222",
}

# показать все контакты
for name, phone in contacts.items():
    print(f"{name}: {phone}")

# добавить контакт
contacts["Maria"] = "+48 333 333 333"

# найти контакт
zapros = "Anna"
if zapros in contacts:
    print(f"Найдено: {contacts[zapros]}")
else:
    print("Контакт не найден")

# изменить контакт
contacts["Anna"] = "+48 111 000 000"

# удалить контакт
del contacts["Bob"]

print("Контактов осталось:", len(contacts))

Уровень 2: интерактивное меню

То же самое, но управляется командами вместо жёстко прописанной последовательности действий — предвестник консоли команд из §12.10:

zapisnaya_knizhka_menu.py
contacts = {}

while True:
    command = input("Команда (add/show/exit): ").strip().lower()
    if command == "exit":
        break
    elif command == "add":
        name = input("Имя: ")
        phone = input("Телефон: ")
        contacts[name] = phone
    elif command == "show":
        for name, phone in contacts.items():
            print(f"{name}: {phone}")
Когда программа завершится, contacts исчезнет
contacts живёт только в памяти, пока работает программа — это обычная переменная (глава 3). Чтобы данные сохранялись между запусками, понадобятся файлы — тема одной из следующих глав.

Чуть глубже — контакт с несколькими полями

Если контакту нужно больше одного значения (телефон И email), внешний словарь может хранить вложенные словари (глава 11, §11.19):

zapisnaya_knizhka_vlozhennaya.py
contacts = {
    "Anna": {"phone": "+48 111 111 111", "email": "anna@example.com"},
}
print(contacts["Anna"]["email"])

Debug Lab

debug_lab_contacts.py
contacts = {"Anna": "+48 111 111 111"}
print("+48 111 111 111" in contacts)   # False!
in у словаря проверяет ключи, а не значения
Та же ловушка из главы 11 (§11.19): in ищет среди КЛЮЧЕЙ. Чтобы проверить, есть ли такой телефон среди значений, нужно "+48 111 111 111" in contacts.values().
Практика: записная книжка — добавить, найти, изменить, удалить
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →