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

>>>