Напишите программу «Кто твой папа?», в которой пользователь будет вводить имя человека, а программа - называть отца этого человека. Чтобы было интереснее, можно «научить» программу родственным отношениям среди литературных персонажей, исторических лиц и современных знаменитостей. Предоставьте пользователю возможность добавлять, заменять и удалять пары «сын - отец».
Ничего сложного, если действительно, использовать пары.
В данном случае, код у меня получился такой:
MENU = (""" 0 - Выход 1 - Определить обьект для изменения просмотра 2 - Добавить новый объект """) MENU_EXIST = (""" 0 - Вернуться на уровень выше 1 - Просмотр данных 2 - Изменение данных 3 - Удаление данных """) MENU_NEW = (""" 0 - Вернуться на уровень выше 1 - Добавить новые данные """) son_father = {"Петров Сергей":"Петров Иван", "Михайлов Никита":"Михайлов Иван", "Джаггер Джорджия":"Джаггер Мик", "1":"test" } option1 = None # Выбор пункта основного меню option2 = None # Выбор пункта меню "MENU_EXIST" option3 = None # Выбор пункта меню "MENU_NEW" son = "" father = "" dlina = None while option1 != 0: print(MENU) option1 = int(input("Выберите пункт меню:")) if option1 == 0: print("Пока!") elif option1 == 1: son = str(input("Введите имя потомка: ")) while son not in son_father: print("Ошибка, такого потомка нет в базе") son = str(input("Введите имя потомка: ")) while option2 != 0: print(MENU_EXIST) option2 = int(input("Выберите пункт подменю:")) if option2 == 0: print("Выход в главное меню") elif option2 == 1: print("\nРодителем", son, "является", son_father[son]) elif option2 == 2: print("Введите родителя для", son) father = str(input(":")) son_father[son] = father print("Данные изменены.") elif option2 == 3: del son_father[son] print("Объект удален.") else: print("Такого пункта в меню нет") elif option1 == 2: while option3 != 0: print(MENU_NEW) option3 = int(input("Выберите пункт подменю:")) if option3 == 0: print("Выход в главное меню") elif option3 == 1: son = str(input("Введите имя потомка")) father = str(input("Введите имя родителя")) son_father[son] = father else: print("Такого пункта в меню нет") else: print("Такого пункта в меню нет")
Загвоздка возникла только в блоке удаления пары. Если удалить пару из словаря и сбросить значение переменной son в None, при обращении к словарю, получаем ошибку:
Traceback (most recent call last): File "C:/Python34/other_v.py", line 48, in <module> print("\nРодителем", son, "является", son_father[son]) KeyError: None
И еще один вопрос, как быть с многодетными родителями, у которых несколько детей?
Понимаю, что для опытных вопросы покажутся глупыми, но я бьюсь над ними сегодня с 10 утра. Возможно, иду не в том направлении. Кто-то подскажет верное?