PROJET AUTOBLOG


Sam & Max: Python, Django, Git et du cul

Site original : Sam & Max: Python, Django, Git et du cul

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

La martingale à la roulette en Python

jeudi 1 mai 2014 à 12:17

Sur internet, c’est bien connu, on peut perdre du poids, trouver une fille facile près de chez soit, et gagner beaucoup d’argent rapidement et sans risque.

Une de ces techniques qu’on vous vend est la fameuse martingale, mais appliquée aux casinos en ligne. Outre le fait que vous ne pouvez pas vous fier à un serveur distant pour ne pas tricher, les jeux de hasard sont de toute façon toujours en faveur de la banque.

Nous allons nous intéresser à la martingale la plus simple, celle appliquée à la roulette. Quand j’étais à l’université, entre deux parties de Munchkins, nous cherchions un moyen de faire du pognon. Et on a failli s’organiser une session au casino de notre ville pour appliquer la technique suivante :

  1. Jouer une petite mise sur une couleur;
  2. Si on perd, revenir en 1 mais avec une mise équivalent au double de ses pertes.
  3. Si on gagne, encaisser, retourner en 1, mais avec la toute petite mise de départ.

L’idée était que si tu perdais, tu doublais ta mise jusqu’à ce que ça te rembourse tes pertes. Sinon, tu gagnes, et tu empoches. Seulement voilà, la roulette à la couleur, ce n’est pas 50% de chance, car il y a le zéro, qui n’est ni rouge, ni noir.

Comme on était des petits cons nuls en probas, mais des petits cons programmeurs, on avait simulé le jeu avec un programme Python, juste au cas où :

import random
 
# Une roulette (en France), c'est un 0 vert, et des numéros de
# 1 à 36 alternativement rouges et noirs.
roulette = ["green"]
roulette.extend("red" for i in range(1, 37, 2))
roulette.extend("black" for i in range(2, 37, 2))
 
# Regardons ce que donne la proba de choper le rouge avec le générateur
# de nombre pseudo-aléatoires de Python.
count = 0
for i in range(100000):
    count += random.choice(roulette) == "red"
print("Average chance of picking red: %s" % (count / 100000 * 100))
 
# Time to play ! Insérer ici la musique d'un film américain ambiance Las Vegas.
def play(rounds, budget=10000, color="red", start_bet=5):
    initial_budget = budget
    max_bet = start_bet
    bet = start_bet
    loss = 0
    # On limite le nombre de paris
    for round in range(rounds):
        # On mise
        budget -= bet
        if random.choice(roulette) != color:
            # On a perdu, on mise le double de ses pertes.
            loss += bet
            bet = loss * 2
            # Si jamais c'est plus que notre pognon, on se couche et on chiale.
            if bet > budget:
                break
            # On garde une trace de notre mise max pour évaluer le budget max.
            if (max_bet < bet):
                max_bet = bet
        else:
            # Si on gagne, on récupère notre mise et le gain, et on recommence.
            budget += bet * 2
            bet = start_bet
            loss = 0
 
    return budget - initial_budget, max_bet
 
print("10 rounds | balance: %s (max=%s)" % play(10))
print("100 rounds | balance: %s (max=%s)" % play(100))
print("1000 rounds | balance: %s (max=%s)" % play(1000))
print("10000 rounds | balance: %s (max=%s)" % play(1000))

Là le budget est large, mais nous on avait 800 euros… Bref, le résultat :

$ python3 roulette.py
Average chance of picking red: 48.78
10 rounds | balance: 10 (max=90)
100 rounds | balance: 1835 (max=2430)
1000 rounds | balance: -3585 (max=2430)
10000 rounds | balance: -3495 (max=2430)
 
$ python3 roulette.py
Average chance of picking red: 48.67
10 rounds | balance: 15 (max=30)
100 rounds | balance: -3620 (max=2430)
1000 rounds | balance: -3180 (max=2430)
10000 rounds | balance: -4670 (max=7290)
 
$ python3 roulette.py
Average chance of picking red: 48.507
10 rounds | balance: 45 (max=90)
100 rounds | balance: 1800 (max=2430)
1000 rounds | balance: -3370 (max=2430)
10000 rounds | balance: -3455 (max=2430)
 
$ python3 roulette.py
Average chance of picking red: 48.4
10 rounds | balance: 50 (max=30)
100 rounds | balance: 1940 (max=2430)
1000 rounds | balance: 1435 (max=7290)
10000 rounds | balance: -970 (max=7290)
 
$ python3 roulette.py
Average chance of picking red: 48.853
10 rounds | balance: -115 (max=270)
100 rounds | balance: -3535 (max=2430)
1000 rounds | balance: -2100 (max=7290)
10000 rounds | balance: -2120 (max=7290)

C’est pas vraiment la fortune assurée et en prime, dès qu’on veut jouer un peu sérieusement, il faut un budget max énorme. Mais surtout, il y a une grosse contrainte de temps, puisque 10 rounds c’est une bonne heure de jeu dans un casino réel.


Télécharger le code de l’article.

flattr this!

Error happened! 0 - count(): Argument #1 ($value) must be of type Countable|array, null given In: /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php:428 http://www.ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/?La-martingale-%C3%A0-la-roulette-en-Python #0 /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php(999): VroumVroum_Blog->update() #1 /var/www/ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/index.php(1): require_once('...') #2 {main}