Глава 12 · Множество увлекательных мини-проектов!
Проект: записная книжка
Словарь как естественное хранилище «имя → телефон» — и первый взгляд на интерактивное меню, управляемое командами.
Используем
dictif/elifциклыf-строкиУровень
★★ средний
Результат
текстовое меню
Что создаём
Записную книжку контактов в памяти программы: показать все контакты, добавить, найти, изменить, удалить.
Модель данных
contacts (dict)
"Anna" → "+48 111 111 111"
"Bob" → "+48 222 222 222"
Почему словарь, а не список
Список пришлось бы перебирать целиком в поисках нужного имени. Словарь сразу даёт доступ по ключу (глава 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, без установки