Simulation à analyser

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous, J'ai effectué une simulation de hasard à l'aide d'un petit prototype de machine à sous réalisé en C++ (Pour mon TPE). La simulation s'effectuait sur 9999 essais. La machine à sous était constituée de 3 rouleaux pour chaque essai, et j'ai enregistré ces rouleaux dans un document word que voici :

Document .txt Désolé pour le format j'ai mis le fichier en partage mais il ne contient pas de virus lol.

J'aurai donc besoin de savoir pour chaque simulation si le joueur a perdu / gagné / gagné le jackpot avec cette règle : - 1 rouleau identique : on perd - 2 rouleaux identiques : on gagne - 3 rouleaux identiques : on gagne le jackpot. Sauf que réaliser ceci à la main serait très très long, et je ne sais pas comment analyser ces données (rapidement). Quelqu'un connaitrait il un moyen de le faire par une fonction c++ / python ou directement à partir de word ? Merci d'avance.

+0 -0

Salut,

Si tu sais écrire dans un fichier en C++, tu sais sûrement aussi lire dans le même fichier. Il ne te reste à écrire une fonction qui à partir de tes trois entiers indique si le joueur a gagné ou perdu. Ensuite, la dernière étape est d'écrire une boucle pour tester toutes les données du fichier. Ça te pose problème ou non ?

Au fait, pourquoi parles-tu de Word ?

J'ai pensé qu'à l'aides de quelques fonctions sur word on aurait pu arriver au même résultat (je sais je suis fainéant, mais le temps est limité). Un genre de crtl+f amélioré ^^

Je voulais éviter de faire un second programme puisque c'est plus long pour le TPE mais je vais m'y tenter :) Merci.

Je me disais aussi que ça devait bien exister ^^ Ce sera pour la prochaine fois j'ai opté pour la version code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
jackpot = 0
gain = 0
perte = 0
jackpot_bool = False 


Fichier = open('test.txt','r')

lignes  = Fichier.readlines()

for i in lignes:
    if((int(i) == int(i)+1) and (int(i) == int(i)+2)):
        print("Jackpot")
        jackpot = jackpot + 1
        jackpot_bool == True

    if((int(i) == int(i)+1) or (int(i) == int(i)+2) and (jackpot_bool == False)):
        print("Gain")
        gain = gain + 1
    else:
        print("Perte")
        perte = perte + 1

print(str(jackpot) + str(gain) + str(perte))


Fichier.close()

Cependant j'obtiens une erreur à la ligne 12 avec ValueError : invalidliteral for int() with base 10: '\n' et je ne sais pas pourquoi, quelqu'un pourrait t'il m'éclairer svp ?

EDIT : j'ai compris que i+1 et i+2 n'existaient pas encore (les lignes suivantes quoi…) mais du coup comment les récupérer pour effectuer mon calcul ?

+0 -0

Non ton probleme est que quand tu fais ta ligne 11, chaque i est un caractère du fichier. Ce n'est pas la position dans le fichier, mais le caractère.

quand tu fais, en python, int("5") il va convertir la chaine de caractère 5 en entier 5. Le problème est que ça ne marche que quand ta chaine est bien un nombre. int("a") ça n'a pas de sens ! Or là, à un moment, il y a un saut de ligne dans ton fichier. Tu lui demande de le convertir en nombre, il ne sait pas faire…

Par contre je ne peux pas t'aider plus, j'arrive pas à télécharger ton fichier, il veut me faire télécharger un setup.exe ce qui sous linux ne me servira pas à grand chose.

Tu peux pas nous coller quelques lignes de ton fichier ici pour qu'on voit ce que ça donne ?

En repensant à ce que m'a indiqué Kje j'ai finalement réussi :)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
jackpot_bool = False
jackpot = 0
gain = 0
perte = 0

Fichier = open("test2.txt", "r")

lignes = Fichier.readlines()

for i in range (9999):
    if((lignes[i-1] == lignes[i]) and (lignes[i-1] == lignes[i+1])):
        print("Jackpot")
        jackpot += 1
        jackpot_bool = True

    elif((jackpot_bool == False) and (lignes[i-1] == lignes[i]) or (lignes[i] == lignes[i+1]) or (lignes[i-1] == lignes[i+1])):
        print("Gain")
        gain += 1
    else:
        print("Perte")
        perte+= 1

    i += 3

print(int(jackpot))
print(int(gain))
print(int(perte))

Fichier.close()

Bon ça va pas révolutionner le python, mais ça fonctionne :D Merci, le sujet est résolu.

Au contraire je souhaite progresser et j'ai beaucoup de petits projets pour, mais comme je l'ai expliqué c'était dans le cadre de mon tpe, et je n'ai qu'un temps très limité pour faire le côté programmation :( J'ai déjà de la chance d'avoir un TPE dans lequel j'ai pu glisser de la programmation…

la boucle ne prend pas en compte le "i+3", c'est le range qui le controle.

Donc au premier tour de boucle tu va comparer ("2", "3", "8"), puis au deuxieme ("3", "8", ""), au troisième ("8", "", "1"), etc.

Donc ton résultat ne sera pas bon à la fin !

J'ai effectivement eu le doute mais je m'étais dit que ça faisait peut être comme while…

Du coup ceci serait il meilleur ?

1
for i in range (1,9999,4):

Ce qui me parait juste sans l'être, puisque j'obtiens 2500 simulations, contre 10 000 dans mon fichier.

+0 -0

Ce qui peut être intéressant pour augmenter la certitude dans ton résultat, c'est d'utiliser une autre méthode pour vérification, par exemple avec un tableur à la Excel. Si tes deux méthodes donnent des résultats différents, tu peux être sûr qu'au moins une des deux est fausse ! Si tu as envie de faire un tirage sur 10 millions d'essais, mieux vaut avoir un programme bien testé, parce que Excel ne te sera pas d'une grande aide.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte