Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
7 / 7 / 2
Регистрация: 24.09.2015
Сообщений: 80

Включить в словарь несколько поколений

20.02.2016, 08:25. Показов 2010. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По книге Майкла Доусона, есть задача в которой к имеющимся родственным связям (сын - отец) нужно добавить “деда”, используя все тот же словарь. С первой частью я справился, а вот как добавить связь (внук - дед) ? Подскажите
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
family = {"Джони": "Гаденыш",
          "Филя": "Сеня",
          "люк": "дарт"}
 
choice = None
 
 
while choice != "0":
    print(
    """
    Выберите требуемый пункт
 
    0 - Выход
    1 - Поиск по имени
    2 - Добавить значение
    3 - Замена значения
    4 - Удаление значения
    5 - Кто твой дед?
 
    """
    )
    choice = input("Введите ")
 
    # Поиск по имени
    if choice == "1":
        name = input("Введите имя: ")
        if name in family:
            definition = family[name]
            print("\n",name, "отец", definition)
        else:
            print("\nНет такого имени: ", name)
 
    # Добавить значение
    if choice == "2":
        name = input("Введите имя сына: ")
        if name not in family:
            definition = input("\nВведите имя отца: ")
            family [name] = definition
            print("\n", name, " добавлен в словарь")
        else:
            print("Такое имя уже есть!")
 
    # Замена значения
    if choice == "3":
        name = input("Какое имя сына вы хотите заменить? ")
        if name in family:
            definition = input("\nВведите имя отца: ")
            family [name] = definition
            print("\n", name, " переопределен")
        else:
            print("\nТакого имени еще нет!")
 
    # Удаление значения
    if choice == "4":
        name = input("Какое имя хотите удалить? ")
        if name in family:
            del family[name]
            print("\n",name," удалено")
        else:
            print("Такого имени: ", name, " нет")
            
    # Кто твой дед?
 
            
input("\n\nenter")
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2016, 08:25
Ответы с готовыми решениями:

Как включить несколько объектов?
делал так: var Shape : Array of TShape; потом так for i:=1 to 100 do begin Shape.Visible:=true; end; ещё пробовал добавлять...

Как добавить ключ и несколько элементов в словарь?
Нужно добавить элементы в словарь, ключ и элементы не знаем до ввода. Вот код: #include <iostream> #include <map> ...

Несколько дней не могу включить ReportViewer
не могу создать отчеты, вижуалстудия2013 ультимейт х64, ставил файл Reportviewer.msi, после этого в тулбоксе нашел этот самый репортвъювер,...

7
29 / 1 / 1
Регистрация: 30.08.2013
Сообщений: 37
20.02.2016, 09:42
Да все просто - в два прохода.
Сначала ищешь отца, потом отца для отца. Он и будет дедом
0
7 / 7 / 2
Регистрация: 24.09.2015
Сообщений: 80
20.02.2016, 12:20  [ТС]
что-то не совсем я догоняю, вот сделаю я поиск, как дед будет хранится в словаре?
вот получается ключ:значение (как я делал сын:отец), можно поподробнее
0
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
20.02.2016, 13:18
Можно через список в словаре. Например
Python
1
family={'Сын':['Отец', 'Дед',  'Прадед']}
То есть чем глубже будет список тем дальше будут поколения
0
29 / 1 / 1
Регистрация: 30.08.2013
Сообщений: 37
21.02.2016, 15:36
Whost Зачем так сложно-то???? Все прекрасно ложится в одномерный словарь
Ссори, интерпретатора под руками нет, но общая мысль должна быть понятна
Python
1
2
3
4
5
6
7
8
9
10
11
if choice == "5":
        name = input("Введите имя: ")
        if name in family:
            father= family[name]
            if father in family:
                grandfather = family[father]
                print("\n",name, " дед: ", grandfather )
            else:
                 print("\nДеда НЕТ! ", name)
        else:
            print("\nДеда НЕТ! ", name)
0
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
23.02.2016, 14:14
Erik945, а что сложного то?
Python
1
2
3
4
5
6
7
family={'Сын':['Отец','Дед']}
if choise == '5':
    name = input('Введите имя\n')
    if len(family[name])==2:
        print(family[name][1])
    else:
        print('Деда нет')
Или вообще так
Python
1
2
3
4
5
if choise == '5':
    try:
        print(family[input('Введите имя\n')][1])
    except:
        print('Деда нет!')
0
29 / 1 / 1
Регистрация: 30.08.2013
Сообщений: 37
23.02.2016, 18:56
Можно конечно, но ИМХО, это делает код более запутанным, хуже расширяется (если добавить еще какого-нибудь пра-пра-пра-предка, придется опять перестраивать структуру данных), плюс ему придется писать отдельный метод чтобы сначала этого деда добавить, потом удалить, потом заменить. ИМХО, не слишком рационально.
0
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
23.02.2016, 22:00
Цитата Сообщение от Erik945 Посмотреть сообщение
хуже расширяется (если добавить еще какого-нибудь пра-пра-пра-предка, придется опять перестраивать структуру данных), плюс ему придется писать отдельный метод чтобы сначала этого деда добавить, потом удалить, потом заменить
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> family={'Сын':['Отец','Дед']}
>>> print(family['Сын'])
['Отец', 'Дед']
 
>>> family['Сын'].append('Прадед')
>>> print(family['Сын'])
['Отец', 'Дед', 'Прадед']
 
>>> family['Сын'][1]='Бабка'
>>> print(family['Сын'])
['Отец', 'Бабка', 'Прадед']
 
>>> family['Сын'].remove('Бабка')
>>> print(family['Сын'])
['Отец', 'Прадед']
Все просто. И ничего перестраивать не надо. Код так даже более структурированный становится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2016, 22:00
Помогаю со студенческими работами здесь

Как занести слово в словарь MS Word автоматически, если оно встречается в тексте несколько раз?
Есть текст, сильно наполненный терминами. Заносить их все вручную долго и лень. Крайне хотелось бы автоматизировать этот процесс. Слышал,...

Написать программу, реализующую словарь. В словаре содержится следующая информация: слово и его несколько пере
Написать программу, реализующую словарь. В словаре содержится следующая информация: слово и его несколько переводов. Реализовать вывод...

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

Супер крутые эффекты. Смена поколений
Всем привет, кто нибудь знает как реализуются супер крутые эффекты при наведении? к примеру буквы в 3d рассыпаются в разные стороны в...

Сравнение разных поколений линейки Intel Core i3
Всем привет. Хотел бы задать несколько вопросов и получить на них аргументированный ответ. 1. Далеко ли ушел по производительности Intel...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru