Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 10, 2017 00:38:53

dezmunt1
Зарегистрирован: 2017-04-10
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь в решении задачи от товарища Доусона

Уважаемые друзья, я в питоне пару недель, прошу вашей помощи. Есть там задачка, условие в коде в коментах. Чисто функционально я ее решил, все значения выводятся и добавляются, вот код всей задачи

 # Напишите программу «Генератор персонажей» для ролевой игры.
# Пользователю должно быть предоставлено 30 пунктов, которые можно распределить
# между четырьмя характеристиками: Сила, Здоровье, Мудрость  и Ловкость.
# Надо сделать так, чтобы пользователь мог не только брать эти пункты
# из общего «Пула», но и возвращать их туда из характеристик, которым он
# решит присвоить другие значения.
skill = {"здоровье":"10", "мудрость":"12", "сила":"13", "ловкость":"14"}
points = int(30)
choice = None
choice_1 = None
razn = int("0")
z = int("0")
while choice != "0":
     print("И так у вас: ", points, "очков")
     print(
     '''
     0 - Выход
     1 - Посмотреть навыки
     2 - Распределение/начисление очков по навыкам
     ''')
     choice = input("Введите номер пункта: ")
     
     if choice == "1": #первый пункт
          for i in skill:
               print(i, "\t", skill[i])
     
          
     if choice == "2": #второй пункт 
          print("здоровье ", "мудрость ", "сила ", "ловкость \n")
          while choice_1 != "0":
               print(
     '''
     0 - Выход
     1 - Распределить навыки
     2 - Изъять очки из имеющихся навыков
     ''')
               choice_1 = input("Введите номер пункта: ")
                    
               if choice_1 == "1":           ##первый пункт
                    i = input ("Введите навык который вы хотите изменить: ")
                    if i in skill:
                         x = int(input("Введите сколько очков нужно присвоить навыку :"))
                         if x <= points:
                             razn = skill[i]
                             z = razn + x
                             skill[i] = z
                         else:
                              print("Извините, у вас недостаточно очков")
                    else:
                         print("Извините, такого навыка не существует")
               elif choice_1 == "2":         ##второй пункт
                    i = input ("Введите навык который вы хотите изменить: ")
                    if i in skill:
                         print("У данного навыка ", skill[i], " очков")
                         x = int(input("Введите сколько очков нужно вычесть :"))
                         if x <= skill[i]:
                              razn = skill[i]
                              z = razn - x
                              skill[i] = z
                         else:
                              print("Извините, у вас недостаточно очков")
                    else:
                         print("Извините, такого навыка не существует")
               elif choice_1 == "0":         ##третий пункт
                    print("До свидания")
     if choice == "0":
          print("До свидания")
А вот код части которая выдает ошибку что тип данных должен быть только строковый! Хотя я инты везде проставил
 if i in skill:
                         x = int(input("Введите сколько очков нужно присвоить навыку :"))
                         if x <= points:
                             razn = skill[i]
                             z = razn + x
                             skill[i] = z
Изначально я просто присваивал значение из доступных очков (значения словаря были пустые), но потом решил а что если у меня уже были бы какие то значения в словаре, и выявил проблему что присвоением здесь не вывезешь и надо суммировать. Причем в коде ниже вычитание отлично функционирует, без особых проблем.

Офлайн

#2 Апрель 10, 2017 03:06:03

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Помощь в решении задачи от товарища Доусона

Здесь достаточно много курьезных моментов, которые можно даже интерпретировать как ошибки.

Вы определяете перечень навыков словарем:

 skill = {"здоровье":"10", "мудрость":"12", "сила":"13", "ловкость":"14"}

10, 12,…. у вас числа, но вы их представляете в виде строк; поскольку эти параметры, вероятно, должны изменяться,
гораздо удобней было бы для этого представить их, используя числовой тип. (т.е. записать “10”, “12” … без кавычек)
Если работать со строками, то гораздо сложней сложить, например, “12” + “3” и получить при этом “15”.

Строка points = int(30) избыточна, достаточно points = 30;

Также int(“0”), это тоже самое, что просто 0, поэтому набор символов int(“”) в ней можно было опустить.

Далее, в этом фрагменте кода:

 ...
                    if i in skill:
                         x = int(input("Введите сколько очков нужно присвоить навыку :"))
                         if x <= points:
                             razn = skill[i]
                             z = razn + x
                             skill[i] = z
у вас razn становится строкой, т.к. skill – это строка, потом вы хотите строку прибавить к x и приравнять это z.
Это, вероятно, выдает ошибку;





Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version