Bonjour, j'aide actuellement ma sœur a ses devoirs et elle doit utiliser python pour étudier les probabilités.
Il nous est demandé de faire le programme permettant de faire 1000 fois l'essai de la course et d'obtenir les résultats.
J'ai donc effectué ce programme :
# -*- coding: utf-8 -*-
import os
from random import ranint as entierAleatoire
l = 0
t = 0
i = 0
while i > 1000 :
i += 1
def lancer_le_de() :
return entierAleatoire(1,6)
def jouer(point) :
de = lancer_le_de()
point+=1
if de == 6 : l+=1
elif point == 6 : t+=1
else : return jouer(point)
print("La Tortue a gagné", t, "fois")
os.system("pause")
Malheureusement cela ne m'affiche que 0 pour la tortue, j'ai essayé diverses methodes et ai vu selon les infos que j'ai recupere une erreur d'identation que je ne trouve pas ou du moins n'arrive pas a resoudre
Merci de votre aide
- Edité par AlexiPoure 17 décembre 2017 à 14:37:39
La définition des fonctions (lignes 13 à 23) n'a aucune raison de se trouver au milieu du code (en plus en plein cœur d'une boucle). C'est à mettre en début de fichier.
D'ailleurs la fonction lance_le_de n'a aucune utilité. Autant utiliser directement randint(1, 6).
Et la fonction jouer à l'air d'être le cœur du programme. Donc encore une fois, il n'y a pas d'intérêt à mettre le code dans une fonction.
Si tu sais le nombre d'itération que tu vas effectuer, autant utiliser la boucle for plutôt qu'une boucle while (qui force en plus à gérer une variable)
Pour des raisons de clarté du code, on met les blocs d'instructions sur plusieurs lignes et non sur une seule (lignes 21 à 23)
Ça ne présente aucun intérêt de renommer la fonction randint (ligne 4). Autant garder son vrai nom, ce qui est plus parlant pour tout le monde.
Il vaut mieux lancer ton programme à partir d'un terminal (ainsi tu pourra facilement voir les print et les éventuels erreurs), mai si tu veux continuer en double-cliquant, il vaut mieux remplacer le os.system par un simple input() (ou raw_input() dans une v2 de python).
Pour finir, autant nommer explicitement tes variables (plutôt que l, t et i). On gagnera encore en lisibilité.
# -*- coding: utf-8 -*-
from random import randint
lievre = 0
tortue = 0
for _ in range(1000):
de = randint(1, 6)
#
#J'ai pas compris la logique du reste du code
#
print("La Tortue a gagné", tortue, "fois")
input() #ou raw_input en v2
Le code vient de l’énoncé de l'exercice et j'avoue que je ne le comprend pas, le principe est de dire que l'on lance un dé, si l'on obtient un 6 alors le lièvre gagne, mais si l'on obtient un autre chiffre, la tortue avance de 1, lorsque la tortue arrive a 6, elle gagne, je ne suis pas très bon en python et avoue être perdu dans le code a effectuer
Oui oui je suis sure, quoiqu'il en soit je me retrouve coincé,
la seul différence avec l'original étant qu'en ligne 22 et 23 j'avais un return "lievre" et un return "tortue" en lieu et place des l+=1 et t+=1 que j'ai justement remplacé pour pouvoir avoir un compte global des reussites de chacun, aurai-je fait une erreur ?
# -*- coding: utf-8 -*-
""" Le lievre et la tortue """
from random import randint as entierAleatoire
def lancer_le_de() :
"""
Fonction qui simule le lancer
d'un dé et renvoie la valeur du dé.
"""
return entierAleatoire(1,6)
def jouer(point)
"""
Fonction qui simule le jeu
du lievre et de la tortue.
"""
de = lancer_le_de()
point+=1
if de == 6 : return"lievre"
elif point == 6 : return "tortue"
else : return jouer(point)
pointTortue = 0
print(jouer(pointTortue))
Voila l'original, mon objectif et de m'arranger pour savoir sur milles essais, combien de fois le lievre gagne et combien de fois la tortue gagne
Les 25 premières lignes ne vont pas changer. Elles correspondent à la création des deux fonctions.
La boucle est à créer au niveau de la ligne 27. Pour la construire, il suffit de comprendre ce que renvoie la fonction. D'où l'intérêt de la dernière ligne (le print de la ligne 29). Qu'est-ce que tu obtiens? Et si tu relances le code une deuxième fois, qu'obtiens-tu? Une troisième? Une quatrième?
Bref, si tu lances plusieurs fois ce code (sans rien modifié pour l'instant) tu vas comprendre l'utilité de la fonction jouer. Et c'est uniquement à cette condition-là que tu vas pouvoir construire ta boucle pour comptabiliser les victoires de la tortue
j'avais compris l'utilité de la fonction, mais etant un gros noob en python je suppose que je dois creer une boucle pour le lancer 1000 fois, mais je ne sais absolument pas comment comptabiliser mes resultats, les modifications que j'avais faites etait a mon sens un moyen de comptabiliser, donc je devrai rajouter 2 variable avec l'une augmentant de 1 lorsque la tortue gagne et l'une augmentant de 1 lorsque le lievre gagne, malheureusement pour moi c'est beaucoup trop de logique pour ma petite tete et je suis completement perdu
Oui, c'est exactement ça. Il suffit d'initialiser deux variables à 0 qui vont comptabiliser le nombre de victoire de chaque animal.
Ensuite, il suffit de lancer 1000 fois la fonction jouer, qui renvoie à chaque fois le vainqueur: "lievre" ou "tortue". Il ne reste plus qu'à faire une comparaison pour attribuer la victoire à qui de droit:
#Initialisation des variables
score_tortue = 0
score_lievre = 0
#Boucle
for _ in range(1000):
#remise à zéro des points de la tortue à chaque nouvelle course
pointTortue = 0
#On récupère le nom du vainqueur et on attribut le point au gagnant
vainqueur = jouer(pointTortue)
if vainqueur == "lievre":
score_lievre += 1
else:
score_tortue += 1
print("Score tortue:", score_tortue)
print("Score lievre:", score_lievre)
print("total:", score_tortue + score_lievre)
# -*- coding: utf-8 -*-
""" Le lievre et la tortue """
from random import randint as entierAleatoire
score_tortue = 0
score_lievre = 0
for _ in range(1000):
pointTortue = 0
def lancer_le_de() :
"""
Fonction qui simule le lancer
d'un dé et renvoie la valeur du dé.
"""
return entierAleatoire(1,6)
def jouer(point)
"""
Fonction qui simule le jeu
du lievre et de la tortue.
"""
de = lancer_le_de()
point+=1
if de == 6 : return"lievre"
elif point == 6 : return "tortue"
else : return jouer(point)
print(jouer(pointTortue))
vainqueur = jouer(pointTortue)
if vainqueur == "lievre":
score_lievre += 1
else:
score_tortue += 1
print("Score tortue:", score_tortue)
print("Score lievre:", score_lievre)
print("total:", score_tortue + score_lievre)
print(jouer(pointTortue))
input()
Mais ma fenetre se ferme automatiquement, je n'arrive donc pas a voir si cela fonctionne
Comme dit précédemment, le début du code n'est pas à modifier (ou à déplacer). Donc la création de la fonction n'est pas du tout à mettre à l'intérieur de la boucle. Il ne faut pas confondre la création d'une fonction (qui ne se fait qu'une seule fois et en général en début de code) avec l'utilisation de la fonction (qui peut se faire autant de fois que souhaité).
Bref, le code que je t'ai donné est à mettre directement à la suite des fonctions. Autrement dit, remplacer les lignes 25 à 27 par ce code.
AlexiPoure a écrit:
Mais ma fenetre se ferme automatiquement, je n'arrive donc pas a voir si cela fonctionne
C'est pour ça qu'il ne faut pas double-cliquer sur le fichier mais le lancer à partir d'une console (comme dit dans mon premier message), car sinon tu ne peux pas voir les messages d'erreurs (ce qui est FONDAMENTAL pour pouvoir débuger ton programme). Ici, tu as une erreur au niveau de la fonction jouer où il manque les deux petits points (au niveau de l'entête):
# -*- coding: utf-8 -*-
""" Le lievre et la tortue """
from random import randint as entierAleatoire
def lancer_le_de() :
"""
Fonction qui simule le lancer
d'un dé et renvoie la valeur du dé.
"""
return entierAleatoire(1,6)
def jouer(point) :
"""
Fonction qui simule le jeu
du lievre et de la tortue.
"""
de = lancer_le_de()
point+=1
if de == 6 : return"lievre"
elif point == 6 : return "tortue"
else : return jouer(point)
score_tortue = 0
score_lievre = 0
for _ in range(1000):
pointTortue = 0
vainqueur = jouer(pointTortue)
if vainqueur == "lievre":
score_lievre += 1
else:
score_tortue += 1
print("Score tortue:", score_tortue)
print("Score lievre:", score_lievre)
print("total:", score_tortue + score_lievre)
print(jouer(pointTortue))
input()
Ok j'ai donc ça, ça ne fonctionne pas et je vois dans le terminal une erreur me parlant d'une erreur de syntax a def jouer(point) : en ligne 15 avec une petite fleche sur le f de def et d'autres erreur en dessous me parlant de Identation error sur beaucoup de ligne avec file"<stdin>", line 1
- Edité par AlexiPoure 17 décembre 2017 à 18:11:45
Non je ne pense pas. Vérifie bien que tu as fermé toutes les parenthèses, que tu as mis les deux petits points sur chaque entête et que tu as bien respecté l'indentation, car en l'état ton code est bon
PS: Par contre la ligne 44 n'est plus utile (elle servait juste à te montrer ce que renvoyait la fonction).
""" Fonction qui simule le lancer d'un dé et renvoie la valeur du dé. """ return entierAleatoire(1,6)
def jouer(point) :
""" Fonction qui simule le jeu du lievre et de la tortue. """ de = lancer_le_de() point+=1 if de == 6 : return"lievre" elif point == 6 : return "tortue" else : return jouer(point)
Bonjour j'ai un problème le "else" ne fonctionne pas s'il vous plait aidez moi!!!
from random import*
def COURSE() :
l=0
de=0
while de<6 and l<6:
de=randint(1,6)
if de!=6:
l=l+1
print (de)
if de==6:
gagnant='lievre'
else:
gagnant= 'tortue'
return(gagnant)
Il faut indenter le else au même niveau que le if correspondant.
Et chaque bloc doit être indenté de façon logique, en remontant d'un cran quand on sort d'un bloc (ça concerne donc le second if et le return).
Aussi, « ne fonctionne pas » ça ne veut rien dire. else fonctionne très bien, c'est ton utilisation qui en est mauvaise, et Python produit normalement une erreur pour te l'expliquer.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Ok j'ai donc ça, ça ne fonctionne pas et je vois dans le terminal une erreur me parlant d'une erreur de syntax a def jouer(point) : en ligne 15 avec une petite fleche sur le f de def et d'autres erreur en dessous me parlant de Identation error sur beaucoup de ligne avec file"<stdin>", line 1
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique