Simulation à analyser

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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.

Édité par Dr@zielux

+0 -0
Staff

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 ?

+2 -0
Auteur du sujet

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.

+0 -0
Auteur du sujet

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 ?

Édité par Dr@zielux

+0 -0
Auteur du sujet

Comparer la ligne 1, 2, 3 mais bon j'ai bien compris que ça clochait vu qu'elles n'existaient pas encore dans le for ^^

Pour regex je ne connais pas encore ? J'ai un petit niveau en python précisons lol.

Édité par Dr@zielux

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

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 ?

+1 -0

@Kje,

Voici quelques lignes

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
fred1599@fred1599-Aspire-5741G:~/Bureau$ more numeros_roues.txt
2
3
8

1
9
1

2
8
8

3
1
8

1
6
9

3
2
8

Bonne continuation…

+0 -0
Auteur du sujet

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.

+0 -0

Bon ça va pas révolutionner le python, mais ça fonctionne

Je confirme, mais si tu ne veux pas progresser en python et que ton objectif est juste "ça fonctionne !", alors certes, c'est résolu…

+0 -0
Auteur du sujet

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…

+0 -0
Staff

Heu … tu as vérifié ton code ? Car pour info ta ligne 23 n'a aucune influence sur la boucle et ton résultat est probablement faux du coup.

Édité par Kje

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

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 !

+0 -0
Auteur du sujet

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.

Édité par Dr@zielux

+0 -0
Staff

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.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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