Найти тему
Bednyakov

Python с нуля. Программа-переводчик (работа со словарями).

Что же, поизучав Python в течение нескольких дней я бросил это занятие более чем на шесть месяцев. На то было много причин, основная из которых - лень. Но даже она не вечна, поэтому пришло время продолжить занятия по укрощению кода.

И сейчас будет написана простецкая программа, демонстрирующая использование словарей. Напомню, что Python я изучаю впервые, и делаю это с помощью книги М. Доусона, откуда и беру примеры программ для разбора. Поэтому не удивляйтесь, что словарь будет немного "американобумерский", однако вы всегда можете его переделать по своему усмотрению.

Первое, что мы делаем, не считая написания комментариев- это создаем сам словарь под названием geek. Он будет содержать шесть пар ключей и значений, с помощью которых можно будет получить сакральные знания о значении устаревших "гиковских" слов. Ключ находится всегда слева от двоеточия, а значение справа, например "Бутылка" : "Сосуд для напитков и жидкостей с длинной горловиной.".

# Переводчик с гикского на русский
# Демонстрирует использование словарей

geek = {"404": "Не знать. Не владеть информацией. От сообщения об ошибке 404 'Страница не найдена'.",
"Googling": "'Гугление', поиск сведений в сети.",
"Keyboard Plaque": "Мусор, который скапливается в клавиатуре компьютера.",
"Link Rot": "Процесс устаревания гиперссылов на вэб-страницах.",
"Percussive Mainenance": "Бить по корпусу неисправного электронного прибора в надежде восстановиьть работу.",
"Uninstalled": "Об увольнении кого-либо. Популярное выражение в конце 90-х, начале 2000-х."}
Кусок кода в интерпретаторе PyCharm
Кусок кода в интерпретаторе PyCharm

При создании словарей следуйте образцу. Введите ключ, поставьте двоеточие и введите значение, соответствующее ключу. Пары "ключ-значение" следует отделять друг от друга запятыми. Располагать их можно как в одной строке, так и построчно. А весь набор необходимо заключить в фигурные скобки.

Дальше создадим меню для нашей программы и условия выхода из неё. Пишем:

# Меню словаря
choice = None
while choice != "0":
print(
"""
Переводчик с гикского на русский
0- Выйти
1- Найти толкование термина
2- Добавить термин
3- Изменить толкование
4- Удалить термин
"""
)
choice = input("Ваш выбор: ")
print()
#выход
if choice == "0":
print("До свидания.")
Кусок кода в интерпретаторе PyCharm
Кусок кода в интерпретаторе PyCharm

Если читать эту часть когда построчно, то получится, что мы создали переменную choice, которой присвоили нейтральное значение с помощью None. Дальше срабатывает цикл "пока choice неравна 0 печатать..." и пользователю будет выводиться заготовленный текст. С помощью тройных кавычек текст выводится многострочно. Choice будет равна пользовательскому вводу. Если choice станет равна 0, программа попрощается и завершит работу.

Дальше пишем внутри этого же цикла условие поиска значения:

#поиск значения
elif choice == "1":
term = input("Какой термин вы хотите перевести с гикского на русский? ")
if term in geek:
definition = geek[term]
print("\n", term, "означает", definition)
else:
print("\nУвы, этот термин мне незнаком: ", term)
Кусок кода в интерпретаторе PyCharm
Кусок кода в интерпретаторе PyCharm

В этой части кода мы создали условие, что в случае, если choice примет значение 1, у пользователя будет запрошен ввод термина, который будет присвоен переменной term. Если term содержится в словаре geek (if term in geek) значение ключа term будет передано переменной definition и выведено на экран с помощью соответствующей команды print. Иначе (т.е. в случае отсутствия значения по ключу term) будет выведена другая надпись о том, что термин не знаком.

Теперь пишем условие добавления пары "ключ-значение" в словарь geek, чтобы пользователь мог дополнить кладезь и своими бесценными знаниями.

# Добавление термина
elif choice == "2":
term = input("Какой термин гикского языка вы хотите добавить? ")
if term not in geek:
definition = input("\nВпишите ваше толкование: ")
geek[term] = definition
print("\nТермин", term, "добавлен в словарь.")
else:
print("\nТакой термин уже есть! Попробуйте изменить его толкование.")
Кусок кода в интерпретаторе PyCharm
Кусок кода в интерпретаторе PyCharm

Это условие предусматривает, что если choice примет значение 2, у пользователя будет запрошен ввод термина, которые будет передан переменной term. И если term не окажется в словаре geek (if term not in geek), у пользователя будет запрошен ввод толкования этого термина, который будет присвоен переменной definition. После чего ключу term в словаре geek будет присвоено значение definition. То есть в словаре будет создана новая пара term: definition. Иначе пользователь получит сообщение, что термин в словаре уже есть.

И добавим условие переопределения значения содержащихся в словаре терминов.

# Добавление нового значения термину
elif choice == "3":
term = input("Какой термин вы хотите переопределить? ")
if term in geek:
definition = input("Впишите ваше толкование: ")
geek[term] = definition
print("\nТермин", term, "переопределен.")
else:
print("\nТакого термина пока нет! Попробуйте добавить его в словарь.")
Кусок кода в интерпретаторе PyCharm
Кусок кода в интерпретаторе PyCharm

Тут всё аналогично предыдущему условию, и даже замену значения выполняет та же строка, с помощью которой ранее мы создавали новую пару.

И наконец, создадим условие удаления пары "ключ-значение" из словаря.

# Удаление термина и толкования
elif choice == "4":
term = input("Какой термин вы хотите удалить? ")
if term in geek:
del geek[term]
print("\nТермин", term, "удален.")
else:
print("\nНичем не могу помочь. Термина ", term, "нет в словаре.")
Кусок кода в интерпретаторе PyCharm
Кусок кода в интерпретаторе PyCharm

Если пользователь ввел 4, компьютер запросит ввод термина для удаления, который будет присвоен переменной term. Если term содержится в geek (проверка происходит с помощью оператора in), инструкция del удалит этот ключ (и его значение) из словаря, о чем будет выведено соответствующее сообщение. В противном случае пользователь будет уведомлен о невозможности проведения операции.

А последнее, что мы сделаем- это создадим условие обработки ошибочного ввода пользователя.

# Ошибочный ввод пользователя
else:
print("Извините, в меню нет пункта", choice)
input("\n\nНажмите Enter. чтобы выйти.")
Кусок кода в интерпретаторе PyCharm
Кусок кода в интерпретаторе PyCharm

Всё. Программа готова к использованию. Если кому-то лень печатать всё это руками, что я категорически осуждаю, то файл с кодом будет выложен в телеге (если не забуду).