Логика

Теперь реализуем внутреннюю логику. Нужно будет при каждом нажатии на кнопку в форме генерировать датафрейм с результатами ставок.

Начнём с импорта нужных модулей.

from dataclasses import dataclass
from random import random

import pandas as pd

Так как нужно будет генерировать N наборов данных, построенных по одинаковому принципу, то упакуем начальные «настройки» в класс, и будем использовать их при вызове методов.

@dataclass
class Simulator:
    start_bankroll: int
    winrate: float
    winning_amount: int
    losing_amount: int

    def simulate_bets(self, n: int) -> list[int]:
        bankroll = self.start_bankroll
        history = []

        for i in range(n):
            if random() <= self.winrate:
                bankroll += self.winning_amount
            else:
                bankroll -= self.losing_amount
            history.append(bankroll)
        return history

    def make_dataframe(self, n: int, players_number: int) -> pd.DataFrame:
        raw_data = {}
        for i in range(players_number):
            player = f'Игрок #{i + 1}'
            raw_data[player] = self.simulate_bets(n)
        return pd.DataFrame(raw_data)