Как сохранить аргумент в функции
Пытаюсь сделать свою текстовую игру но столкнулся с такой проблемой.
Вот часть кода
def stats (XH,GTH=9999999999,ATH=""):
if ATH == "":
ATH = 0
ATH = int(ATH)
ATH += XH
if GTH == 0:
GTH = 9999999999
if XH < GTH:
GTH = XH
print(GTH)
print(ATH)
Мне надо чтобы GTH и ATH не меняли свои значения обратно когда это функция вызывается повторно.
Пример:
XH=2
На выводе мы получаем
GTH=2
ATH=2
При повторном вызове у нас:
XH=3
На выводе мы получаем:
GTH=3
ATH=3
А должны:
GTH=2
ATH=5
Надеюсь понятно объяснил
P.s команда print в этом коде не нужна она служит проверкой.
import random
def game (start,winner="",GNA=0,GNH=0,XH=0,next_try=""):
if start:
while True:
if start in ('E','e'):
print('Легкий режим')
break
elif start in ('N','n'):
print('Нормальный режим')
break
elif start in ('H','h'):
print('Тут надо угадать чилсло от 1 до 250')
winner = random.randint(1,250)
print(winner)
GNA += 1
GNH += 1
while True:
x = input('Введите число: ')
if x.isdigit():
x = int(x)
XH += 1
else:
print('Введите челое число!')
continue
if x == winner:
print('Вы победили!\nЧисло попыток: ' + str(XH))
stats(XH)
XH = 0
next_try = input ('Хотите продолжить? Y/N: ')
if next_try in ('Y','y','yes','Yes','YES'):
winner = random.randint(1,250)
GNA += 1
GNH += 1
continue
else:
winner = random.randint(1,250)
menu ()
break
elif x > winner:
print('Загаданое число меньше')
continue
else:
print('Загаданое число больше')
continue
def stats (XH,GTH=9999999999,ATH=""):
if ATH == "":
ATH = 0
ATH = int(ATH)
ATH += XH
if GTH == 0:
GTH = 9999999999
if XH < GTH:
GTH = XH
print(GTH)
print(ATH)
def menu ():
while True:
start = input('Куда пойдем E/N/H/exit: ')
if start in ('E','e'):
game(start)
break
elif start in ('N','n'):
game(start)
break
elif start in ('H','h'):
game(start)
break
elif start in ('exit','Exit','EXIT'):
pass
menu()
Ответы (3 шт):
Используйте stats.GTH и stats.ATH внутри функции. Это нечто вроде статических переменных в питоне.
Пример:
def foo(parameter):
foo.static_var += parameter
print(foo.static_var)
foo.static_var = 0
foo(2)
foo(3)
Чуть чуть запутано)ATH и GTH выглядят как нечто из генетики)Может ван нужно сохранение в глобальную переменную?Делается так:
my_glob_long_liv_var=0
def my_func(inpt:int)->None:
global my_glob_long_liv_var
my_glob_long_liv_var+=inpt
При каждом вызове с аргументом 3,my_glob_long_liv_var будет прирастать на 3.(суммироваться,акамулироваться))
В начале игры создаете объект Pers. При создании объекта передавайте начальные значения, при вызове метода stats меняете значения.
Пример:
class Pers:
def __init__(self, GTH=9999999999, ATH=0):
self.GTH = GTH
self.ATH = ATH
def stats(self, XH):
self.ATH += XH
if self.GTH <= 0:
self.GTH = 9999999999
if XH < self.GTH:
self.GTH = XH
pers = Pers()
pers.stats(XH=2)
print(pers.GTH, pers.ATH) # 2 2
pers.stats(XH=3)
print(pers.GTH, pers.ATH) # 2 5