Одним из способов решения этой проблемы является определение всех ваших начальных значений вне функции (что вы уже делаете), затем передача их в качестве дополнительных переменных функции и создание функции рекурсивной.Используйте оператор return
в конце каждого прогона.Если враг все еще жив, и вы хотите снова запустить функцию, команда return encounter(enemy, y, enhealth, health, med)
просто вызывает функцию снова, передавая значения, которые она обновляла ранее.Когда враг мертв, простой return
выходит из функции все вместе.
from random import randint
def encounter(enemy, y, enhealth, health, med):
print("Engaging "+enemy+"!\n")
print("Pick your move!")
print("1. Smack with shovel")
print("2. Use a medkit (you have "+str(med)+" medkits)")
print("3. Attempt escape")
enc = input("I will try to (put a #): ")
if enc == '1':
if randint(0,100) < 80:
enhealth = int(enhealth - y)
print("\nYou hit "+enemy+" for "+str(y)+" damage!\n")
else:
print("\nMiss!\n")
elif enc == '2':
if med > 0:
print("\nYou used a medkit!\n")
health += 30
med -= 1
print("\nHealth is at " + str(health) + "\n")
else:
print("\nYou're out of medkits!\n")
if enhealth <= 0:
print(enemy + " has been defeated! Well done!")
return
return encounter(enemy, y, enhealth, health, med)
strength = int(25)
y = 10 + (strength*.10)
enhealth = int(100 - y)
health = int(100)
med = 2
enemy = "Cornelius"
encounter(enemy, y, enhealth, health, med)
Однако вместо того, чтобы пытаться отслеживать все эти переменные, вы можете рассмотреть возможность сохранения всей статистики внутри словаря Python для передачи и выхода из функций.Таким образом, вы также можете return
словарь, если вы закончили с encounter()
, но хотели сохранить те же итоговые характеристики для передачи в новую функцию.