Return возвращает старое значение и меняет тип на tuple
При написании программы возникла такая проблема: при передаче переменной balance в game_strategy_1 она сохраняет свой тип (int), но после того как из game_strategy_1 я передаю эту же переменную в balance_manipulaion и возвращаю, ее тип меняется с int на tuple.
Так же еще есть сопутствующая проблема, мне кажется, что она связана с первой проблемой. В функции game_strategy_1 есть локальные переменные win и loose. Внутри функции они равны 0 и изменение их значений происходит в функции check_result, но когда я возвращаю значения через return, то они не меняются.
Буду благодарен любой помощи с данными проблемами.
Код:
import random
from configuration import BET_COEFFICIENT, STOP_POINT, WIN_FIELDS
def balance_manipulaion(balance, BET):
# balance -= BET if BET < balance else 0
if BET > balance:
BET = balance
balance -= BET
return balance, BET
def check_result(balance, win, loose, BET):
ball = random.randint(0, 36)
# (balance += BET * 2) and (win += 1) if ball in WIN_FIELDS else loose += 1
if ball in WIN_FIELDS:
balance += BET * 2
win += 1
else:
loose += 1
return balance, win, loose
def print_result(index, win, loose):
print(f"Стратегия №{index}",
f"Общее число игр: {win + loose}",
f"Выиграно ставок: {str(win)}, ({str(win/(win + loose) * 100)}%)",
f"Проиграно ставок: {str(loose)}, ({str(loose/(win + loose) * 100)}%)",
sep="\n", end="\n\n")
def game_strategy_1(balance, BET, balance_strategy_1):
win = 0
loose = 0
while balance > 0:
balance = balance_manipulaion(balance, BET)
# ball = random.randint(0, 36)
check_result(balance, win, loose, BET)
balance_strategy_1.append(balance)
print_result(1, win, loose)
def main():
balance = int(input("Введите ваш стартовый баланс: "))
BET = balance * BET_COEFFICIENT
balance_strategy_1 = [balance]
balance_strategy_2 = [balance]
balance_strategy_3 = [balance]
game_strategy_1(balance, BET, balance_strategy_1)
if __name__ == "__main__":
main()
configuration.py:
BET_COEFFICIENT = 0.001
STOP_POINT = 40000
WIN_FIELDS = [
2,
4,
6,
8,
10,
11,
13,
15,
17,
20,
22,
24,
26,
28,
28,
29,
31,
33,
35]
Ответы (1 шт):
у вас в функции balance_manipulaion возвращается 2 переменных balance, BET
Поэтому результат функции будет tuple. И так у вас дальше по коду в других функциях.
приведу небольшой пример.
def some_fun(a,b):
s1=a+b
s2=a*b
return s1,s2
print(some_fun(3,4))
#выведет (7, 12)
r1, r2 = some_fun(3,4)
print(f'r1 = {r1},r2={r2}')
#а тут уже выведет r1 = 7,r2=12
Надеюсь так будет понятней почему у вас получается tuple.