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 шт):

Автор решения: Vadim.Sharoikin

у вас в функции 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.

→ Ссылка