Я пытался использовать global, но, похоже, он не переназначает переменную. Извините, если на этот вопрос уже был ответ, я не смог найти ответ. Всякий раз, когда я запускаю код, он выводит здоровье по расчету, но не рассчитывает снова например если здоровье 10, и я запускаю функцию, я получаю 7. Если я повторно запускаю, я получаю еще 7; он больше не будет опускаться
def mon_attack(health, monDamage, defense):
print("The monster attacked!")
health = health - ((monDamage // defense) + 1)
print("You have " + str(health) + " health left!")
Вы должны вернуть health
и присвоить возвращаемое значение. health = mon_attack(health, monDamage, defense)
Здоровье — это локальная переменная, она существует только на время действия функции. Хотя вы, вероятно, вызываете функцию и можете передать другую переменную с именем health, эта переменная находится в другой области видимости и является просто другой переменной с тем же именем, поэтому, когда вы изменяете работоспособность в своей функции, вы изменяете только локальную версию, а не версии, с которой вы вызвали функцию. Вместо этого вы можете заставить функцию возвращать новое значение здоровья после атаки и перемещать операторы печати за пределы функции.
С глобальной переменной - убираем параметр функции "здоровье":
health = 100
def mon_attack(monDamage, defense):
global health
print("The monster attacked!")
health = health - ((monDamage // defense) + 1)
print("You have " + str(health) + " health left!")
Это было так просто. Большое спасибо!
Хотя в данном конкретном случае, вероятно, было бы проще
return
новое значениеhealth
из функции и переназначить его на сайте вызова.