Продолжаем практиковаться в программировании. После пятой главы в книге: Майкл Доусон “Программируем на Python”, 2014 (Michael Dawson “Python Programming for the Absolute Beginner”, 3rd Edition), где я научилась делать словари и пользоваться списками, пора переходить к практике. Сделаем домашнее задание вместе!
Задача: Создайте программу, которая будет выводить список слов в случайном порядке. На экране должны печататься без повторений все слова из представленного списка.
SLOVA=['кот','медведь','миска','лобстер'] print('Есть писок слов:',SLOVA) print('Эти слова в случайном порядке:') import random while SLOVA: slovo=random.choice(SLOVA) print(slovo) SLOVA.remove(slovo)
Так выглядит программа, когда ее запускаешь:
Есть писок слов: ['кот', 'медведь', 'миска', 'лобстер'] Эти слова в случайном порядке: миска лобстер кот медведь >>>
Задача: Напишите программу «Генератор персонажей» для ролевой игры. Пользователю должно быть предоставлено 30 пунктов, которые можно распределить между четырьмя характеристиками: Сила, Здоровье, Мудрость и Ловкость. Надо сделать так, чтобы пользователь мог не только брать эти пункты из общего «пула», но и возвращать их туда из характеристик, которым он решит присвоить другие значения.
print('Генератор Персонажей Игры') print('''У вас есть 30 зарядов. Их можно распределить на: 1.сила 2.ловкость 3.мудрость 4.здоровье ''') zaryad=30 skill={'сила':'0', 'ловкость':'0', 'мудрость':'0', 'здоровье':'0'} while zaryad>0: navik=input('Напиши, какой навык изменить? ') kak_izmenit=input('Добавить заряды (+) или удалить (-)? ') if kak_izmenit=='+': zaryad_add=int(input('Сколько зарядов добавить? ')) skill[navik]=zaryad_add zaryad-=zaryad_add print(skill) elif kak_izmenit=='-': zaryad+=skill[navik] skill[navik]=0 print(skill) print('У вас больше нет доступных зарядов') print(skill)
Первый вариант решения получился немного не таким, как я хотела. Но на ночь глядя ничего лучше я пока не придумала. Пока программа работает так:
Генератор Персонажей Игры У вас есть 30 зарядов. Их можно распределить на: 1.сила 2.ловкость 3.мудрость 4.здоровье Напиши, какой навык изменить? сила Добавить заряды (+) или удалить (-)? + Сколько зарядов добавить? 7 {'сила': 7, 'ловкость': '0', 'мудрость': '0', 'здоровье': '0'} Напиши, какой навык изменить? мудрость Добавить заряды (+) или удалить (-)? + Сколько зарядов добавить? 7 {'сила': 7, 'ловкость': '0', 'мудрость': 7, 'здоровье': '0'} Напиши, какой навык изменить? здоровье Добавить заряды (+) или удалить (-)? + Сколько зарядов добавить? 30 {'сила': 7, 'ловкость': '0', 'мудрость': 7, 'здоровье': 30} У вас больше нет доступных зарядов {'сила': 7, 'ловкость': '0', 'мудрость': 7, 'здоровье': 30} >>>
Решение не проверяет общую сумму присвоенных значений, так что у меня получилось, что можно присвоить больше 30 зарядов, что не соответствует условиям задачи.
И вот спустя 3 дня я написала новый код, и он мне нравится намного больше!
print('Генератор Персонажей Игры') print('''У вас есть 30 зарядов. Их можно распределить на: 1.сила 2.ловкость 3.мудрость 4.здоровье ''') zaryad=30 skill={'сила':'0', 'ловкость':'0', 'мудрость':'0', 'здоровье':'0'} zaryad_add=0 izmenit='1' while izmenit =='1': while zaryad>0: navik=input('Напиши, какой навык изменить? ') kak_izmenit=input('Добавить заряды (+) или удалить (-)? ') if kak_izmenit=='+': zaryad_add=int(input('Сколько зарядов добавить? ')) if zaryad-zaryad_add>=0: zaryad-=zaryad_add new_skill=int(skill[navik])+zaryad_add skill[navik]=new_skill print(skill) else: print('У вас всего 30 зарядов!') print(skill) elif kak_izmenit=='-': zaryad+=skill[navik] skill[navik]=0 print(skill) print('У вас всего 30 зарядов!') izmenit=input('''Хотите перераспределить заряды? 1 - Да! 2 - Нет. Оставить как есть и выйти. ''') if izmenit =='1': zaryad+=skill[navik] skill[navik]=0 print(skill) continue
Если запустить генератор статов персонажа, программа теперь работает так:
Генератор Персонажей Игры У вас есть 30 зарядов. Их можно распределить на: 1.сила 2.ловкость 3.мудрость 4.здоровье Напиши, какой навык изменить? сила Добавить заряды (+) или удалить (-)? + Сколько зарядов добавить? 1 {'сила': 1, 'ловкость': '0', 'мудрость': '0', 'здоровье': '0'} Напиши, какой навык изменить? сила Добавить заряды (+) или удалить (-)? 29 Напиши, какой навык изменить? сила Добавить заряды (+) или удалить (-)? + Сколько зарядов добавить? 29 {'сила': 30, 'ловкость': '0', 'мудрость': '0', 'здоровье': '0'} У вас всего 30 зарядов! Хотите перераспределить заряды? 1 - Да! 2 - Нет. Оставить как есть и выйти. 1 {'сила': 0, 'ловкость': '0', 'мудрость': '0', 'здоровье': '0'} Напиши, какой навык изменить? сила Добавить заряды (+) или удалить (-)? - {'сила': 0, 'ловкость': '0', 'мудрость': '0', 'здоровье': '0'} Напиши, какой навык изменить? сила Добавить заряды (+) или удалить (-)? + Сколько зарядов добавить? 30 {'сила': 30, 'ловкость': '0', 'мудрость': '0', 'здоровье': '0'} У вас всего 30 зарядов! Хотите перераспределить заряды? 1 - Да! 2 - Нет. Оставить как есть и выйти. 1 {'сила': 0, 'ловкость': '0', 'мудрость': '0', 'здоровье': '0'} Напиши, какой навык изменить? ловкость Добавить заряды (+) или удалить (-)? + Сколько зарядов добавить? 15 {'сила': 0, 'ловкость': 15, 'мудрость': '0', 'здоровье': '0'} Напиши, какой навык изменить? сила Добавить заряды (+) или удалить (-)? + Сколько зарядов добавить? 15 {'сила': 15, 'ловкость': 15, 'мудрость': '0', 'здоровье': '0'} У вас всего 30 зарядов! Хотите перераспределить заряды? 1 - Да! 2 - Нет. Оставить как есть и выйти. 1 {'сила': 0, 'ловкость': 15, 'мудрость': '0', 'здоровье': '0'} Напиши, какой навык изменить? ловкость Добавить заряды (+) или удалить (-)? - {'сила': 0, 'ловкость': 0, 'мудрость': '0', 'здоровье': '0'} Напиши, какой навык изменить? Добавить заряды (+) или удалить (-)? Напиши, какой навык изменить? сила Добавить заряды (+) или удалить (-)? + Сколько зарядов добавить? 30 {'сила': 30, 'ловкость': 0, 'мудрость': '0', 'здоровье': '0'} У вас всего 30 зарядов! Хотите перераспределить заряды? 1 - Да! 2 - Нет. Оставить как есть и выйти. 2 >>>
Задача: Напишите программу «Кто твой папа?», в которой пользователь будет вводить имя человека, а программа — называть отца этого человека. Чтобы было интереснее, можно «научить» программу родственным отношениям среди литературных персонажей, исторических лиц и современных знаменитостей. Предоставьте пользователю возможность добавлять, заменять и удалять пары «СЫН — отец».
pari={'Кот':'Медведь', 'Бася':'Бурка', 'Жбоня':'Булочка'} print(pari.keys()) vibor=0 while vibor != '4': vibor=input('''1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Выйти. ''') if vibor == '1': para=input('Для кого узнать пару? ') print(para,'и', pari[para]) elif vibor == '2': kluch=input('Введите имя: ') para=input('Введите имя пары: ') pari[kluch]=para print(pari.keys()) elif vibor == '3': kluch_del=input('Введите имя, чтобы удалить пару: ') del pari[kluch_del] print(pari.keys())
Запускаем программу:
dict_keys(['Кот', 'Бася', 'Жбоня']) 1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Выйти. 1 Для кого узнать пару? Бася Бася и Бурка 1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Выйти. 2 Введите имя: Хвост Введите имя пары: Пузико dict_keys(['Кот', 'Бася', 'Жбоня', 'Хвост']) 1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Выйти. 3 Введите имя, чтобы удалить пару: Бася dict_keys(['Кот', 'Жбоня', 'Хвост']) 1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Выйти. 4 >>>
Задача: Доработайте программу «Кто твой папа?» так, чтобы можно было, введя имя человека, узнать, кто его дед. Программа должна по-прежнему пользоваться одним словарем с парами «сын — отец». Подумайте, как включить в этот словарь несколько поколений.
pari={'Кот':['Медведь','Барсук'], 'Бася':['Бурка','Бургамистр'], 'Жбоня':['Булочка','Брыся']} print(pari.keys()) vibor=0 while vibor != '5': vibor=input('''1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Узнать, кто еще ест из его миски. 5. Выйти. ''') if vibor == '1': para=input('Для кого узнать пару? ') print(para,'и', pari[para][0]) elif vibor == '2': kluch=input('Введите имя: ') para=input('Введите имя пары: ') pari[kluch]=para print(pari.keys()) elif vibor == '3': kluch_del=input('Введите имя, чтобы удалить пару: ') del pari[kluch_del] print(pari.keys()) elif vibor == '4': kto_est=input('Введите имя, чтобы узнать кто еще \ ест из его миски: ') print('Хотя ', kto_est,'и', pari[kto_est][0],'пара,', \ 'но из их миски подъедает',pari[kto_est][1])
Работа программы выглядит так:
dict_keys(['Кот', 'Бася', 'Жбоня']) 1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Узнать, кто еще ест из его миски. 5. Выйти. 1 Для кого узнать пару? Бася Бася и Бурка 1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Узнать, кто еще ест из его миски. 5. Выйти. 2 Введите имя: Хвост Введите имя пары: Пузико dict_keys(['Кот', 'Бася', 'Жбоня', 'Хвост']) 1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Узнать, кто еще ест из его миски. 5. Выйти. 3 Введите имя, чтобы удалить пару: Бася dict_keys(['Кот', 'Жбоня', 'Хвост']) 1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Узнать, кто еще ест из его миски. 5. Выйти. 4 Введите имя, чтобы узнать кто еще ест из его миски: Жбоня Хотя Жбоня и Булочка пара, но из их миски подъедает Брыся 1. Узнать пару. 2. Добавить свою пару. 3. Удалить пару из программы. 4. Узнать, кто еще ест из его миски. 5. Выйти. 5 >>>
Приветствую! Начали возникать вопросы и в поисках примеров попал сюда.
Появились вопросы. Задавать буду по мере разбора заданий.
1. Рандомные слова.
В приведённом примере используется метод remove. Но он удаляет слова из изначального списка, который набран заглавными буквами. Может тогда стоило бы сделать копию списка и работать с ней? И ещё вопрос. В приведённом списке все слова уникальны. Если будет повторение элемента, то добиться неповторяемости слов в рандомном выводе невозможно.