Python: Задачи и решения (Глава 5. Списки и словари. Игра «Виселица»).


Продолжаем практиковаться в программировании. После пятой главы в книге: Майкл Доусон “Программируем на 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
>>> 

 


Запись опубликована в рубрике Python. Добавьте в закладки постоянную ссылку.

Один ответ на “Python: Задачи и решения (Глава 5. Списки и словари. Игра «Виселица»).

  1. DarMorar говорит:

    Приветствую! Начали возникать вопросы и в поисках примеров попал сюда.
    Появились вопросы. Задавать буду по мере разбора заданий.
    1. Рандомные слова.
    В приведённом примере используется метод remove. Но он удаляет слова из изначального списка, который набран заглавными буквами. Может тогда стоило бы сделать копию списка и работать с ней? И ещё вопрос. В приведённом списке все слова уникальны. Если будет повторение элемента, то добиться неповторяемости слов в рандомном выводе невозможно.

Добавить комментарий

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.