Форум сайта python.su
0
Следуя учебника для новорожденных в питоне, нужно было выполнить такую задачу:
Напишите программу «Кто твой папа?», в которой пользователь будет вводить имя человека, а программа - называть отца этого человека. Чтобы было интереснее, можно «научить» программу родственным отношениям среди литературных персонажей, исторических лиц и современных знаменитостей. Предоставьте пользователю возможность добавлять, заменять и удалять пары «сын - отец».
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("Такого пункта в меню нет")
Traceback (most recent call last): File "C:/Python34/other_v.py", line 48, in <module> print("\nРодителем", son, "является", son_father[son]) KeyError: None
Отредактировано shotokan (Июль 7, 2015 20:16:50)
Офлайн
568
Куча ифов!
Вам же Доусон показал, как пользоваться словарями. Засуньте всё ваше меню в словарь, ключами будут пункты меню, а значениями - функции. Код станет гораздо чище. Или до функций вы еще не дочитали?
Офлайн
0
FishHookНет, не дочитал.
Куча ифов!Вам же Доусон показал, как пользоваться словарями. Засуньте всё ваше меню в словарь, ключами будут пункты меню, а значениями - функции. Код станет гораздо чище. Или до функций вы еще не дочитали?
Офлайн
0
Переписал все заново, так как при тестировании вывалило кучу глюков.
Упростил меню:
MENU = (""" 0 - Выход 1 - Просмотр данных 2 - Изменение данных 3 - Удаление данных 4 - Добавить новый объект """) son_father = {"Петров Сергей":"Петров Иван", "Михайлов Никита":"Михайлов Иван", "Джаггер Джорджия":"Джаггер Мик", "1":"test" } option1 = None # Выбор пункта основного меню son = "" father = "" while option1 != 0: print(MENU) option1 = int(input("Выберите пункт меню:")) if option1 == 0: print("Пока!") elif option1 == 1: son = str(input("Введите имя потомка: ")) if son in son_father: print("\nРодителем", son, "является", son_father[son]) else: print("Ошибка, такого потомка нет в базе") elif option1 == 2: son = str(input("Введите имя потомка: ")) if son in son_father: father = str(input("Введите имя родителя: ")) son_father[son] = father print("\nРодителем", son, "является", son_father[son]) else: print("Ошибка, такого потомка нет в базе") elif option1 == 3: son = str(input("Введите имя потомка: ")) if son in son_father: del son_father[son] print("\nУдалено") else: print("Ошибка, такого потомка нет в базе") elif option1 == 4: son = str(input("Введите имя потомка: ")) if son in son_father: print("\nТакая запись уже существует") else: father = str(input("Введите имя родителя: ")) son_father[son] = father print("Добавлено в базу")
Отредактировано shotokan (Июль 7, 2015 22:00:29)
Офлайн
33
shotokan
Если удалить пару из словаря и сбросить значение переменной son в None, при обращении к словарю, получаем ошибку:
d = {} son = None d[son] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: None
Офлайн