Bonsoir tout le monde
J'ai passé toute cette après-midi a essayer d'écrire le code du pendu (mais version un peu simplifiée ) mais ...
j'ai pas arreté de réflechir mais il y'a un probleme dans le bloc "Choix d'une lettre de la part du joueur et remplir le mot étoilé"
ca me ferait plaisir que quelqu'un jette un coup d'oeil a mon code
et encore une fois merci
# -*-coding:Latin-1 -*
import os
from random import randrange
print("\n------------------------Bienvenue dans mon pendule !!------------------------\n\n\n")
#-------------------Confirmation d'entrée dans le jeu et identification du joueur------------------
confirmation = "non"
while (confirmation.lower() != "oui") :
confirmation = input("Etes vous prets a jouer ?? ")
nom_joueur = ""
while (nom_joueur.strip() == "") :
nom_joueur = input("Veuillez saisir votre nom : ")
#--------------------------------------------------------------------------------------------------
#---------------Ouverture et lecture du fichier "donnees.txt" transformer les mots en liste---------------
mes_mots = open("donnees.txt", "r")
contenu = mes_mots.read()
liste_mots = contenu.split("\n")
#---------------------------------------------------------------------------------------------------------
#--------------Choix aléatoire d'un mot contenu dans le fichier "donnees.txt" par l'ordinateur--------------
indice_mot_aleatoire = randrange(0, len(liste_mots))
mot_aleatoire = liste_mots[indice_mot_aleatoire]
nombre_etoile = len(mot_aleatoire)
#-----------------------------------------------------------------------------------------------------------
#---------------------Affichage du mot étoilé---------------------
print("\nLe mot que vous recherchez est de la forme : ")
mot_etoile = str()
i = 0
while (i < len(mot_aleatoire)) :
mot_etoile = mot_etoile[0 : i] + "*" + mot_etoile[i + 1 : len(mot_aleatoire)]
i += 1
print(mot_etoile)
#-----------------------------------------------------------------
#-------------------------Choix d'une lettre de la part du joueur et Remplir le mot étoilé------------------
mot_choisi = mot_etoile
j = 0
i = 0
while ((j < 8) and (mot_choisi != mot_aleatoire)) :
lettre_choisie = ""
while (len(lettre_choisie.strip()) == 0) or (len(lettre_choisie.strip()) > 1) :
lettre_choisie = input("\nVeuillez entrer une seule lettre : ")
while (i < len(mot_aleatoire)) :
if (lettre_choisie in mot_aleatoire) and (i == 0) :
mot_choisi = lettre_choisie + mot_aleatoire[1 : len(mot_aleatoire)]
elif (lettre_choisie in mot_aleatoire) and (i != 0) :
mot_choisi = mot_choisi[0 : i] + lettre_choisie + mot_choisi[i + 1 : len(mot_aleatoire)]
i += 1
print(mot_choisi)
j += 1
if (mot_choisi == mot_aleatoire) :
print("\nFélicitations !!\n")
print("Vous avez gagne en {0} coups !! Le mot secret était bien {1} .".format(j + 1, mot_aleatoire))
print("\nVotre score dans cette partie s'éléve à ", str((j - len(mot_aleatoire))))
elif (mot_choisi != mot_aleatoire) :
print("\nDésolé vous avez perdu !!")
print("\nLe mot secret est : ", mot_aleatoire)
#----------------------------------------------------------------------------------------------------------
#----------------------Fermeture du fichier "donnees.txt"----------------------
mes_mots.close()
#------------------------------------------------------------------------------
os.system("pause")
<titre1></titre1>
rien à voir avec les class l'exemple que je t'ai donné; en gros ça fait ça ...
mot_aleatoire = 'maison'
mot_choisi = 'm***o*'
lettre_choisie = 's'
si 1ere lettre de mot_choisi n'est pas '*' alors retenir cette lettre
sinon, si 1ere lettre de mot_aleatoire est lettre_choisie alors retenir lettre_choisie
si 2eme lettre de mot_choisi n'est pas '*' alors retenir cette lettre
sinon, si 2eme lettre de mot_aleatoire est lettre_choisie alors retenir lettre_choisie
etc ...
sortie = 1ere lettre retenue + 2eme lettre retenue + etc ...
Je te propose une "solution". J'ai essayé de ne pas trop m'éloigner de ton implémentation dans l'idée, mais j'ai apporté quelques
modifications qui me semblent appropriées. Je pense que la partie qui t'intéressera sera la fonction "tryReplaceLetter".
from random import choice
DATAFILE = "donnees.txt"
NOMBRE_ESSAIS = 8
def startGame(message):
confirmation = ""
while confirmation.strip() != "oui":
confirmation = raw_input(message+"\n")
def askName(message):
name = raw_input(message)
while name.strip() == "":
name = raw_input(message+"\n")
return name
def readWordList(filename):
flist = open(filename, 'r')
return [line.strip('\n') for line in flist]
def chooseRandomWord(wordList):
return choice(wordList)
def askLetter(message):
letter = raw_input(message)
while len(letter.strip()) != 1:
letter = raw_input(message+"\n")
return letter
def tryReplaceLetter(mot_reference, mot_en_cours, nouvelle_lettre):
mot_actualise = []
for index, lettre in enumerate(mot_reference):
if lettre == nouvelle_lettre:
mot_actualise.append(lettre)
else:
mot_actualise.append(mot_en_cours[index])
return "".join(mot_actualise)
def main():
startGame("Pret?")
name = askName("Comment t'appelles-tu?")
wordList = readWordList(DATAFILE)
randomWord = chooseRandomWord(wordList)
mot_en_cours = "*" * len(randomWord)
print mot_en_cours
for i in range(NOMBRE_ESSAIS):
mot_en_cours = tryReplaceLetter(randomWord, mot_en_cours, askLetter("Entrez une lettre:"))
print mot_en_cours
if mot_en_cours == randomWord:
print "Bravo %s, vous avez devinez le mot mystere" % name
return
print "Dommage %s, tu as perdu.. le mot etait: %s" % (name, randomWord)
return
if __name__ == "__main__":
main()
Mon code fonctionne sous python 2.6 mais il devrait également fonctionner pour les versions ultérieures. Quelques commentaires:
Essaie d'utiliser plus de fonctions. Cela permet de mettre en évidence la logique de ton code (même si le programme est "petit")
Si tu es sous python 2.6, utilise raw_input() au lieu de input()
Pour choisir un élément aléatoire dans une liste, la fonction choice() du module random est plus adaptée que randrange()
× 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.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.