Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/57: Рейтинг темы: голосов - 57, средняя оценка - 4.63
1 / 1 / 2
Регистрация: 05.11.2012
Сообщений: 11

Задача из самоучителя Майкла Доусона

14.02.2017, 10:47. Показов 12010. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условия:
* Напишите программу «Кто твой папа?», в которой пользователь будет вводить имя человека, а программа
- называть отца этого человека. Чтобы было интереснее, можно «научить» программу родственным
отношениям среди литературных персонажей, исторических лиц и современных знаменитостей. Предоставьте
пользователю возможность добавлять, заменять и удалять пары «СЫН - отец».
* Доработайте программу «Кто твой папа?» так, чтобы можно было, введя имя человека, узнать, кто его дед.
Программа должна по-прежнему пользоваться одним словарем с парами «сын - отец». Подумайте, как
включить в этот словарь несколько поколений.
Никак не работает 1 пункт программы, то есть с 33 по 41 строку, - добавить в словарь список [папа, дед] с ключом [сын]. Вылезает ошибка. Пытался избавиться от переменных fat и gra, не помогает. Все остальное, вроде, работает. Можете помочь?
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
#Кто папа и дед
fam = {"Боб": ["Джон", "Лев"],
       "Джек": ["Эндрю", "Рокки"],
       "Стив": ["Гомез", "Саша"],
       "Пол": ["Роберт", "Кеша"],
       "Иван": ["Вася", "Егор"]}
choice = None
while choice != '0':
    print(
        '''
    Кто папа и дед?
    0 - Выйти
    1 - Узнать кто папа и дед
    2 - Добавить  папу, сына и деда
    3 - Изменить папу и деда
    4 - Удалить  папу сына и деда
    '''
        )
    choice = input('Ваши выбор: ')
    print()
    #выход
    if choice == "0":
        print('До свидания. ')
    #кто папа
    elif choice == '1':
        son = input('Папу и деда кого вы хотите узнать? ')
        if son in fam:
            fat = fam[son][0]
            gra = fam[son][1]
            print('\n', son, '- сын\t', fat, '- отец\t', gra, '-дед')
        else:
            print('\nУвы, этого сына нет в базе', son)
    #добавление папы сына и деда
    elif choice == "2":
        son = input('Введите имя сына: ')
        if son in fam:
            print('Такой сын уже есть в базе. Введите другого')
        else:
            fam[son][0] = input('Введите имя отца: ')
            fam[son][1] = input('Введите имя деда: ')
            print('\nCын',son, 'отец', fam[son][0], 'дед', fam[son][1], 'добавлены в базу')
    #Новый папа и дед известного сына
    elif choice == "3":
        son = input('Папу и деда кого вы хотите изменить? ')
        if son in fam:
            fam[son][0] = input('Введите имя папы: ')
            fam[son][1] = input('Введите имя деда: ')
            print('\nУ сына', son, 'теперь папа', fam[son][0], ', а дед', fam[son][1])
        else:
            print('\nТакого сына нет в базе! Попробуйте его добавить')
    #Удаление
    elif choice == "4":
        son = input('Какого сына вы хотите удалить? ')
        if son in fam:
            del fam[son]
            print('\nСын', son, ',папа', fat, 'и дед', gra, 'удалены')
        else:
            print('\nНичем не могу помочь. Сына', son, 'нет в базе. ')
    #Непонятный пользовательский ввод
    else:
        print('Извините, в меню нет пункта', choice)
input('\n\nНажмите Enter, чтобы выйти. ')
Добавлено через 1 минуту
Сорри, второй пункт
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2017, 10:47
Ответы с готовыми решениями:

Не могу скачать материалы из книги Майкла Доусона "Программируем на Python"
В книге указан сайт с которого нужно скачивать задания - http://www.courseptr.com/downloads, он не работает или я разобраться не могу...

Требуется небольшое пояснение по выполнению задачи из книги Майкла Доусона "Программируем на Phyton"
Разобрал 5 главу. Вторая задача в конце главы гласит "Напишите программу "Генератор персонажей" для ролевой игры. Пользователю должно...

Задача из книги (М. Доусона)
Глава из книги посвящена ООП. В конце её такая задача: "Создайте несложную объектно-ориент. приключенческую игру, в которой игрок сможет...

3
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.02.2017, 13:13
Если бы у вас был defaultdict(list), тогда можно было создавать ключ и добавлять значения в список таким макаром:
Python
1
fam['bob'].append('piter')
Но у вас обычный dict, поэтому при отсутствии ключа сначала нужно сначала создать список с двумя (если более вам не нужно) пустыми значениями:
Python
1
fam[son]=['','']
потому что сам по себе - волшебным образом, список не появится, и только потом уже добавлять туда значения по индексам:
Python
1
fam[son][0] = input('Введите имя отца: ')
Либо создать пустой список:
Python
1
fam[son]=[]
и добавлять значения append'ом. В этом случае, раз не используется индексация - append'ить можно сколько угодно значений.
1
1 / 1 / 2
Регистрация: 05.11.2012
Сообщений: 11
21.02.2017, 23:42  [ТС]
Спасибо за предыдущий ответ.
Помогите еще. Задача чуть дальше из той же книги. Доработать игру блек-джек, чтобы игрок мог делать ставки и его выводили из за стола, если денег осталось мало. При цикле for удаляется только каждый второй игрок(если проигравшихся игроков за 1 раунд больше одного) из списка self.players. То есть если у всех игроков после раунда осталось меньше 50 денег, то удалится каждый нечетный игрок.
Python
1
2
3
4
for player in self.players:
                if player.cash < 50:
                    print(player.name, 'Вас вывели из-за стола\n')
                    self.players.remove(player)
А если сделать цикл в цикле, то есть:
Python
1
2
3
4
5
       for player in self.players:
           for player in self.players:
                if player.cash < 50:
                    print(player.name, 'Вас вывели из-за стола\n')
                    self.players.remove(player)
То из 7 игроков останется только 4-ый игрок, если за раунд у всех стало меньше 50.
Как построить цикл, чтобы удалялись все у кого меньше 50?

Добавлено через 52 минуты
Все я понял, можно закрывать.
0
0 / 0 / 0
Регистрация: 12.04.2019
Сообщений: 1
12.04.2019, 16:43
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# "Who your dad and grandfather?"
 
# The program calls the name of son's father, grandfather.
# The user can add, delete, replace, the pair "son - father, grandfather"
 
# Псевдокод.
 
# Составляем словарь,
# в котором ключ это имя сына,
# значения это имена отца и деда соответственно.
 
# Игру всегда можно завершить, введя "0",
# поэтому заключаем изначально весь код в цикл.
# Пока юзер не введет ноль:
#   Приветствуем, объясняем правила.
 
#   Предлагаем сделать выбор.
#   Если требуется выйти:
#       выходим.
#   Если требуется назвать отца:
#       называем отца.
#   Если требуется назвать деда:
#       называем деда.
#   Если требуется назвать обоих:
#       называем обоих.
#   Предлагаем изменить словарь.
#   Если требуется добавить новые пары "сын - отец, дед":
#       спрашиваем имена, и добавляем.
#   Если требуется заменить пару:
#       спрашиваем имена, и меняем.
#   Если требуется удалить пару:
#       удаляем.
#   Иначе:
#       ошибочный ввод.
 
#   Выводим текущий словарь.
 
# Заканчиваем игру.
 
# Код.
 
generations = {'Mike': ['Mark Twain', 'Walter Scott'], 
'Harry': ['Arthur Conan Doyle', 'Rudyard Kipling'], 
'John': ['Oscar Wilde', 'Daniel Defoe'],
'Charlie': ['Jack London', 'Stephen King']}
 
# the user can always end the game by entering "0"
choice = None
while choice != '0':
 
    # welcome and explain rules
    print(
    '''
    "Who your dad and grandfather?"
 
    Make a choice:
    0 - Quit
    1 - Father's name
    2 - Grandfater's name
    3 - Both name
    4 - Add a Generation
    5 - Redefine a Generation
    6 - Delite a Generation
    '''
    )
 
    # choice
    choice = input("Choice: ")
    print()
 
    # exit
    if choice == '0':
        print('Good-bye.')
        break
 
    # name father
    elif choice == '1':
        print(list(generations.keys()))
        generation = input('\nEnter Son''s name from the list above: ')
        if generation in generations:
            father_name = generations[generation][0]
            print('\nFather''s name:', father_name, '.')
        else:
            print('\nI don''t know', generation)
 
    # name grandpa
    elif choice == '2':
        print(list(generations.keys()))
        generation = input('\nEnter Son''s name from the list above: ')
        if generation in generations:
            grandpa_name = generations[generation][1]
            print('\nGrandfather''s name:', grandpa_name, '.')
        else:
            print('\nI don''t know', generation)
 
    # both name
    elif choice == '3':
        print(list(generations.keys()))
        generation = input('\nEnter Son''s name from the list above: ')
        if generation in generations:
            generation = generations[generation]
            print('\nFather''s and Grandfather''s name''s:', generation, 'respectively.')
        else:
            print('\nI don''t know', generation)
 
    # change the list of generations
 
    # add a generation pair
    elif choice == '4':
        generation = input('\nEnter new Son''s name: ')
        if generation not in generations:
            # create a new list of ancestors
            values_new_generation = []
            add_father = input('\nEnter Father''s name: ')
            values_new_generation.append(add_father)
            add_grandpa = input('\nEnter Grandfather''s name: ')
            values_new_generation.append(add_grandpa)
            # create a new generation pair
            generations[generation] = values_new_generation
            print('\nNew generation', generation, 'is added.')
        else:
            print('\nThat Generation already exists! Try redefining it.')
 
    # redefine a generation pair
    elif choice == '5':
        print(list(generations.keys()))
        generation = input('\nWhat generation do you want me to redefine?'
            '\nEnter Son''s name from the list above: ')
        if generation in generations:
            # create a list of new ancestors
            new_values_generation = []
            new_father = input('\nEnter new Father''s name: .')
            new_values_generation.append(new_father)
            new_grandpa = input('\nEnter new Grandfather''s name: ')
            new_values_generation.append(new_grandpa)
            # changing the list of new ancestors
            generations[generation] = new_values_generation
            print('\n', generation, 'has been redefined.')
        else:
            print('\nThat generation doesn''t exist! Try adding it.')
 
    # delite a generation pair
    elif choice == '6':
        print(list(generations.keys()))
        generation = input('What generation do you want me to delete?'
            '\nEnter Son''s name from the list above: ')
        if generation in generations:
            del generations[generation]
            print('\nOkay, I deleted', generation)
        else:
            print('\nI can''t do that!', generation, 'doesn''t exist in the dictionary.')
 
    # some unknown choice
    else:
        print('\nSorry, but', choice, 'isn''t a valid choice.')
 
print('\nList of Generations:\n', generations)
 
input("\n\nPress the enter key to exit.")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2019, 16:43
Помогаю со студенческими работами здесь

Изучаем С++ по книге Майкла Доусона
Всем привет, недавно начал изучать C++ и начал я с книги (Майкл Доусон - Изучаем С++ через программирование игр) по мере прочтения и...

Из волос Майкла Джексона сделают бриллианты
Особая технология поможет превратить локоны звезды в многогранную блестящую память Из волос Майкла Джексона, оставшихся после жуткого...

Движение объекта! SCREEN 12. Майкла Джексон рулееез !!! ))))
Препод сказал сделать анимацию в QBasic а я плоховато с ним знаком Помогите пожалуйтся сделать Лунную походку Майкла Джексона в SCREEN...

Есть 3 книги Доусона, Лутца и Саммерфилда. С какой лучше начать?
Один человек говорит - с одной начать, другой - с другой, третий - с третьей. А книги то не малые, особенно Лутца, 1200 страниц. Но Лутц...

Поиск самоучителя
Проблема собственно в чём, отлично рисую и анимирую, но не могу создать полноценный ролик ( рекламу ) и приходиться часто обращаться к кому...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru