Petit programme de statistiques sur les montantes

Section pour poser toutes vos questions sur les paris sportifs en général.

Modérateurs : gromarco67, Uncia, Bergkamp, G-rom, admin, def, Loicprono

Avatar de l’utilisateur
Radiateur
Débutant(e)
Débutant(e)
Messages : 11
Inscription : 23 févr. 2013, 12:12

Petit programme de statistiques sur les montantes

Message par Radiateur »

Bonjour

Afin de voir si les montantes classiques pouvaient faire gagner de l'argent, j'ai écrit un tout petit programme qui simule la carrière de X joueurs et montre combien d'argent ils ont après Y coups. J'imagine que de tels outils existent mais je ne les ai pas trouvés alors je poste ce petit programme ici. il a été écrit pour linux mais devrait fonctionner sans problème sous windows si vous enlevez la première ligne (il faudra que vous installiez Python pour lire et éxécuter ce programme).

Les variables que vous pouvez modifier sont en haut du programme :
nbDeCarrieresAJouer : nombre de joueurs virtuels que le programme affichera à la fin
coteOfferte : la côte offerte par le bookmaker
uneChanceSur : quelle chance de gagner son pari (mettez un nombre entier ou réel)
nbDeParisDansUneCarriere : au bout de combien de paris le joueur virtuel renvoie ses stats (sauf s'il est ruiné avant bien sûr)
carriere["cash"] = 1000.0 : l'argent de départ en euros

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding : utf8 -*-
import random

nbDeCarrieresAJouer = 10

def carriereJoueur():
        coteOfferte = 1.7
        uneChanceSur = 2
        gainVoulu = 1.0
        nbDeParisDansUneCarriere = 1000
        carriere = {}
        carriere["cash"] = 1000.0
        carriere["nbParis"] = 0
        carriere["nbParisGagnes"] = 0
        carriere["sommet"] = 0.0
        probaVictoire = 1.0 / uneChanceSur
        pertes = 0.0

        while carriere["nbParis"] < nbDeParisDansUneCarriere :
                #on calcule la mise d'apres les pertes et le gain voulu
                mise = (gainVoulu + pertes) / coteOfferte

                #si on a assez d'argent, on retire la mise du cash, sinon on retourne la "carriere"
                if mise < carriere["cash"]:
                        carriere["cash"] -= mise
                else:
                        carriere["nbParis"] += 1
                        return carriere

                #si on gagne, on recoit l'argent, sinon on met a jour les pertes
                chiffreAleatoire = random.random()
                if  chiffreAleatoire <= probaVictoire:
                        carriere["cash"] += mise * coteOfferte
                        carriere["nbParisGagnes"] += 1
                        if carriere["cash"] > carriere["sommet"]:
                                carriere["sommet"] = carriere["cash"]
                        pertes = 0
                else:
                        pertes += mise

                carriere["nbParis"] += 1
        return carriere

if __name__ == '__main__':
        carrieres = []
        for i in range(nbDeCarrieresAJouer):
                carrieres.append(carriereJoueur())
        for carriere in carrieres:
                print "nb de paris : {0:5}, % de paris gagnes : {1:6.2f}, cash : {2:7.2f}, sommet : {3:.2f}".format(carriere["nbParis"], carriere["nbParisGagnes"] / float(carriere["nbParis"]) * 100, carriere["cash"], carriere["sommet"])
Voilà, voilà, les conseils, critiques, améliorations possibles sont les bienvenus :)

Bonne soirée,
Avatar de l’utilisateur
Victor-y
Débutant(e)
Débutant(e)
Messages : 5
Inscription : 02 mars 2013, 14:31

Re: Petit programme de statistiques sur les montantes

Message par Victor-y »

Salut Radiateur,

qu'est-ce qu'il faut faire apres avoir installer pyton? Comment puis-je procéder pour exécuter le programme?

Merci!
Avatar de l’utilisateur
Radiateur
Débutant(e)
Débutant(e)
Messages : 11
Inscription : 23 févr. 2013, 12:12

Re: Petit programme de statistiques sur les montantes

Message par Radiateur »

Bonjour Victor-y


Désolé pour le temps de réponse, je ne m'étais pas connecté cette semaine :)

Je suppose que tu es sous windows et que tu as déjà installé Python :

1) Démarre le bloc-notes / Notepad
(tu dois le trouver dans Démarrer > Programmes > Accessoires > Bloc-Notes (ou Notepad, un des deux), ou alors dans le menu démarrer tu tapes "notepad" dans la zone ou on peut écrire, puis "Entrée")

2) Copie-colle le programme dans notepad
(attention, ça descend plus bas que le bas de la fenêtre <code>, tu peux utiliser "Tout sélectionner en haut de la fenêtre <code>)

3) Dans notepad : supprime la première ligne du programme (elle est pour Linux / Unix) :
#!/usr/bin/env python

4) Enregistre ton programme avec l'extension .py : unNomQuelconque.py statsMontante.py, bref, ce que tu veux suivi de .py
(après avoir changé les variables entre "nbDeCarrieresAJouer" et "carriere["cash"]" si tu souhaites d'autres valeurs)

5) Ouvre une ligne de commande/invite de commande.
Pour cela ouvre le menu Démarrer et tapes "cmd" dans la zone où on peut écrire, puis "Entrée"
Sinon c'est dans le menu Accessoires, là où on trouve aussi le Bloc-Notes (ça s'appelle "Invite de commandes je crois")

6) Dans la ligne de commandes tapes :
cd c:\le\chemin\ou\tu\as\installe\python (sans doute un truc du genre : cd c:\Python27)
python c:\le\chemin\ou\tu\as\enregistre\le\programme (sans doute un truc du genre : python c:\Users\tonNom\Desktop\nomDuProgramme.py)
Tu peux utiliser Tabulation après avoir écrit le début d'un chemin et ça complètera peut-être le chemin (toutes les versions de Windows n'ont pas l'auto-complétion)

7) Le programme affiche en sortie le nombre de paris que le joueur a fait (inférieur au nombre que tu as décidé s'il a été ruiné avant la fin), le pourcentage de paris qu'il a gagné, l'argent qu'il a actuellement et le plus d'argent qu'il a eu dans sa carrière.

8 ) Pour relancer le programme, tu tapes sur la flèche du haut dans l'invite de commandes (pour rappeler la dernière commande), puis Entrée.

Voilà, j'espère que c'est assez clair, n'hésite pas à demander des précisions sinon :)
Avatar de l’utilisateur
Radiateur
Débutant(e)
Débutant(e)
Messages : 11
Inscription : 23 févr. 2013, 12:12

Re: Petit programme de statistiques sur les montantes

Message par Radiateur »

Bonjour


Je poste deux trois autres programmes que j'ai faits pour voir si des montantes à la roulette étaient une manière possible de gagner de l'argent.

La façon de les faire fonctionner est la même que pour le premier programme en haut du topic. Étant donné qu'un certain nombre de personnes semblent avoir consulté ce topic, je pense en faire des programmes en C que je compilerai pour Windows, de cette façon il suffira de les télécharger, double-cliquer dessus, fournir les valeurs demandées et regarder défiler les résultats (s'il est autorisé de joindre des binaires aux posts?)

Le premier simule un joueur suivant une montante classique : il double à chaque fois qu'il perd. Faire tourner le programme montre clairement qu'on finit toujours ruiné après une mauvaise série... :p

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding : utf8 -*-

import random
import time

listeMontantes = []
nbCoups = 0
nbCoupsGagnes = 0
argent = 1000
miseChoisie = False
mise = 0
pertes = 0

while argent > mise:
	mise = pertes + 1
	
	if argent < mise:
		print "Vous etes ruine."
		exit(1)
	else:
		argent -= mise

	# ON JOUE LE COUP
	if random.randint(0,36) >= 19:
		#si on gagne, on la supprime
		argent += mise * 2
		nbCoupsGagnes += 1
		pertes = 0
	else:
		#sinon, on la met a jour
		pertes += mise
	nbCoups += 1


	#RESUME DU COUP
	print "Coup N. {}".format(nbCoups)
	print "Argent : " + repr(argent) + ", pertes : " + repr(pertes)
	print "Pourcentage de coups gagnes : {:.2f}".format( float(nbCoupsGagnes) * 100.0 / nbCoups)
	print "\n"


	#on reinitialise la variable de choix de la mise
	miseChoisie = False
	# et on patiente un peu avant le prochain coup
	time.sleep(0.1)

Le deuxième simule un joueur qui a de multiples montantes en cours en même temps, et les joue de façon aléatoire, sans jamais jouer sur une montante qui lui demanderait de miser plus d'un quart de son cash disponible (dans ce cas il la met "en attente" avant d'avoir assez d'argent pour miser desssus). Les résultats sont plus mitigés, on ne finit pas forcèment ruiné mais on ne gagne pas vraiment d'argent non plus (en général on oscille entre la moitié et 3 fois la mise de départ pour quelques pics) :

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding : utf8 -*-

import random
import time

listeMontantes = []
nbCoups = 0
nbCoupsGagnes = 0
argent = 1000
miseChoisie = False

while True:
	#CHOIX DE LA MISE A JOUER
	while not miseChoisie:
		#on choisit une montante a joueur si randrange(101) < 100- (len(listeMontantes) * 5)
		if random.randrange(101) < 100- (len(listeMontantes) * 5):
			#joue une montante
			mise = 1
			listeMontantes.append(0)
			montanteNumeroN = len(listeMontantes) - 1
			miseChoisie = True
		else:
			#sinon on choisit une montante a jouer (en s'assurant que ce ne soit pas le double de la derniere fois)
			montanteNumeroN = random.randrange(len(listeMontantes))
			mise = listeMontantes[montanteNumeroN] + 1
			if not mise > argent * 0.25:
				miseChoisie = True
			

	
	# ON JOUE LE COUP
	argent -= mise
	if random.randint(0,36) >= 19:
		#si on gagne, on la supprime
		argent += mise * 2
		listeMontantes.pop(montanteNumeroN)
		nbCoupsGagnes += 1
	else:
		#sinon, on la met a jour
		listeMontantes[montanteNumeroN] += mise
	nbCoups += 1

	if argent < 100:
		print "Vous n'avez plus d'argent pour la roulette, total des montantes en cours : " + str(sum(listeMontantes))
		exit(1)

	#RESUME DU COUP
	print "Coup N. {}".format(nbCoups)
	print "Liste des montantes en cours : " + repr(listeMontantes)
	print "Argent : " + repr(argent)
	print "Pourcentage de coups gagnes : {:.2f}".format( float(nbCoupsGagnes) * 100.0 / nbCoups)
	print "\n"


	#on reinitialise la variable de choix de la mise
	miseChoisie = False
	# et on patiente un peu avant le prochain coup
	time.sleep(0.1)

Le troisième est le même que le précédent, mais il ajoute entre 1 et 3 à chaque mise, pour ne pas toujours avoir 1, 2, 4, 8, 16, 32, 64, 128, 256, etc... même dans le désordre c'est très louche pour un programme qui analyserait les coups joués...^^ Ça augmente pas mal le total des mises mais ça permet d'avoir des mises plus aléatoires (le programme affiche toutes les mises jouées à la fin, ça veut dire aussi qu'il peut prendre plus de mémoire si vous le faites tourner des heures...) :

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding : utf8 -*-

import random
import time

listeDerniersCoups = []
listeDernieresMises = []
listeMontantes = []
nbCoups = 0
nbCoupsGagnes = 0
argent = 1000
miseChoisie = False

while True:
	#CHOIX DE LA MISE A JOUER
	while not miseChoisie:
		#on choisit une montante a joueur si randrange(101) < 100- (len(listeMontantes) * 5)
		if random.randrange(101) < 100- (len(listeMontantes) * 5):
			#joue une montante
			mise = 1
			listeMontantes.append(0)
			montanteNumeroN = len(listeMontantes) - 1
			miseChoisie = True
		else:
			#sinon on choisit une montante a jouer (en s'assurant que ce ne soit pas le double de la derniere fois)
			montanteNumeroN = random.randrange(len(listeMontantes))
			mise = listeMontantes[montanteNumeroN] + 1 + random.randint(1,3)
			if not mise > argent * 0.25:
				miseChoisie = True
	listeDernieresMises.append(mise)
	if nbCoups > 11:
		listeDernieresMises = listeDernieresMises[1:]
			

	
	# ON JOUE LE COUP
	argent -= mise
	if random.randint(0,36) >= 19:
		#si on gagne, on la supprime
		argent += mise * 2
		listeMontantes.pop(montanteNumeroN)
		nbCoupsGagnes += 1
	else:
		#sinon, on la met a jour
		listeMontantes[montanteNumeroN] += mise
	nbCoups += 1

	if argent < 100:
		print "Vous n'avez plus d'argent pour la roulette, total des montantes en cours : " + str(sum(listeMontantes))
		print "Voici les coups que vous avez joue : " + repr(listeDerniersCoups)
		exit(1)
	#on met a jour la derniere valeur jouee
	listeDerniersCoups.append(mise)



	#RESUME DU COUP
	print "Coup N. {}".format(nbCoups)
	print "Liste des montantes en cours : " + repr(listeMontantes)
	print "Argent : " + repr(argent)
	print "Pourcentage de coups gagnes : {:.2f}".format( float(nbCoupsGagnes) * 100.0 / nbCoups)
	print "Liste des dernieres mises : " + repr(listeDernieresMises)
	print "\n"


	#on reinitialise la variable de choix de la mise
	miseChoisie = False
	# et on patiente un peu avant le prochain coup
	time.sleep(0.1)

Voilà, voilà, les commentaires/critiques/améliorations possibles sont les bienvenus :)
Avatar de l’utilisateur
OzloW
Professionnel(le)
Professionnel(le)
Messages : 1263
Inscription : 04 avr. 2013, 00:08
A été remercié : 6 fois

Re: Petit programme de statistiques sur les montantes

Message par OzloW »

Je pense que tu dois exclure le 0 de tes random
Avatar de l’utilisateur
Radiateur
Débutant(e)
Débutant(e)
Messages : 11
Inscription : 23 févr. 2013, 12:12

Re: Petit programme de statistiques sur les montantes

Message par Radiateur »

Il y a les chiffres 0 à 36 sur une roulette... et le 0 sort parfois ;)

Sinon on aurait 50% de chance exactement, ce qui n'est pas le cas :)

EDIT : j'ai fait tourner les programmes pour vérifier ce que je disais : correction : on finit toujours ruiné, mais plus lentement et après avoir eu l'impression d'avoir plus d'argent entre les mains^^ (mais au final, les 10 montantes à 500 euros dans le casino sont bien l'argent du casino, et non le vôtre puisque vous n'avez plus d'argent dans le porte-monnaie...)

J'ai fait une autre version où les montantes à plus de 250 euros étaient complètement "oubliées" (pour ne pas risquer de gros paris), et le résultat est le même... :p
Avatar de l’utilisateur
OzloW
Professionnel(le)
Professionnel(le)
Messages : 1263
Inscription : 04 avr. 2013, 00:08
A été remercié : 6 fois

Re: Petit programme de statistiques sur les montantes

Message par OzloW »

autant pour moi erreur de calcul :p
Répondre

Revenir à « Aides »