Найти - Пользователи
Полная версия: Задание из книги М. Доусона
Начало » Python для новичков » Задание из книги М. Доусона
1
archiffe
Здравствуйте, форумчане.

Недавно начал душить питона по вечерам, изучая книгу Доусона “Программируем на Python”.
В конце пятой главы есть задание - создать “Генератор персонажей для ролевой игры”. В условиях дан общий пул статов в 30 очков, которые можно перераспределять по желанию. У меня вроде все работает и добавляет статы, в то же время отнимает использованные очки от общего пула. Так же и наоборот.

Однако, при попытке вывода на экран общего списка характеристик везде показывает нули.
Есть два варианта - через словарь и через список. Результаты одни и те же. Что я делаю не так?

Вот через словарь (через список то же самое, только вместо пар данных у меня четыре кортежа):
# начальные значения
pool = 30
health = 0
strength = 0
wisdom = 0
agility = 0

new_stat = 0
choice = None
stat = None
# список характеристик
character_stats = { "Здоровье:" : health, "Сила:" : strength,
"Мудрость:" : wisdom, "Ловкость:" : agility
}

while choice != "0":
print("Сейчас Вам доступно", pool, "очков для распределения.")
print(
"""
0 - Выйти
1 - Добавить характеристики
2 - Отнять характеристики
3 - Показать характеристики
"""
)
# выход
choice = input("Ваш выбор: ")
if choice == "0":
print("Пора в бой Вашим новым героем!")
# добавить характеристики - выбор
elif choice == "1":
stat = input("\nКакую характеристику Вы хотите увеличить?")
stat = stat.lower()
# сколько характеристик добавить
if stat == "здоровье":
new_stat = int(input("Сколько очков здоровья добавить?" ))
health += new_stat
pool -= new_stat
elif stat == "сила":
new_stat = int(input("Сколько очков силы добавить?" ))
strength += new_stat
pool -= new_stat
elif stat == "мудрость":
new_stat = int(input("Сколько очков мудрости добавить? "))
wisdom += new_stat
pool -= new_stat
elif stat == "ловкость":
new_stat == int(input("Сколько очков ловкости добавить? "))
agility += new_stat
pool -= new_stat
else:
print("У персонажа нет характеристики", stat)
# удаление характеристик - выбор
elif choice == "2":
stat = input("\nКакую характеристику Вы хотите уменьшить? ")
stat = stat.lower()
# сколько характеристик удалить
if stat == "здоровье":
new_stat = int(input("Сколько очков здоровья убавить? "))
health -= new_stat
pool += new_stat
elif stat == "сила":
new_stat = int(input("Сколько очков силы убавить? "))
strength -= new_stat
pool += new_stat
elif stat == "мудрость":
new_stat = int(input("Сколько очков мудрости убавить? "))
wisdom -= new_stat
pool += new_stat
elif stat == "ловкость":
new_stat == int(input("Сколько очков ловкости убавить? "))
agility -= new_stat
pool += new_stat
else:
print("Персонажу недоступна характеристика", stat)
elif choice == "3":
print("\nТекущие характеристики:")
for key, value in character_stats.items():
print(key, value)
else:
print("\nПожалуйста, выберите пункт меню.")

input("\n\nНажмите Enter, чтобы выйти.")
py.user.next
archiffe
Однако, при попытке вывода на экран общего списка характеристик везде показывает нули.
Есть два варианта - через словарь и через список. Результаты одни и те же. Что я делаю не так?
В словаре character_stats сохраняются не имена, а объекты, к которым привязаны имена на момент сохранения.
Поэтому тебе в цикле нужно либо сам словарь менять, без имён, либо использовать имена, но в конце шага цикла в словарь character_stats сохранять их новые значения.

Пример
  
>>> a, b, c = 0, 0, 0
>>> 
>>> dct = {1: a, 2: b, 3: c}
>>> 
>>> for i in range(5):
...     a += (i + 1) * 2
...     b += (i + 1) * 10
...     c += (i + 1) * 200
...     dct = {1: a, 2: b, 3: c}
... 
>>> dct
{1: 30, 2: 150, 3: 3000}
>>>
archiffe
py.user.next
Огромное спасибо, милый человек. Это помогло мне навести порядок.
Добра и процветания!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB