Problème pendu...

Fermé
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018 - 25 mai 2017 à 00:13
Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 - 25 mai 2017 à 13:09
Bonjour,
Apprenant le Python, j'ai tenté de faire un pendu, mais une erreur que je n'arrive pas à trouver se manifeste.
Le code:
#Imports
from random import choice

#Initialisation variables importantes
letter = ""

#Mots pendu
def getWords():
wordsList = [
"peinture",
"ecran",
"montagne",
"carte",
"python",
"balle",
"clavier",
"espoir",
"volant",
"carton",
"couteau",
"fiche",
"feuille",
"travail",
"sciences",
"scandale",
"canard",
"utile",
]
return wordsList

#Permet d'obtenir un mot random
def pickWord():
return choice(getWords())

#Récupération des entrées de l'utilisateur
def GetLettre():
lettre = input("Tapez une lettre: ")
lettre = lettre.lower()
if (len(lettre) > 1 or not lettre.isalpha()):
return GetLettre()
else:
return lettre
#Obtention du mot en partie trouvé
def getMaskedWord(word, foundLettres, testLettre):
maskedWord = ""
for lettre in word:
if testLettre in word:
maskedWord += foundLettres
else:
maskedWord+="*"
return maskedWord

#Initialisation
def main(word):
b = True
while (b ==True):
letter+=GetLettre() #Erreur ici
print("Mot: ", getMaskedWord(word, letter))
main()

#Variabled + start
word = pickWord()
main(word)


Bonne journée, OmeGaFire_
A voir également:

1 réponse

Gerik0 Messages postés 8 Date d'inscription samedi 15 avril 2017 Statut Membre Dernière intervention 7 juin 2017
Modifié le 25 mai 2017 à 01:28
Bonsoir,

Essais avec un "global letter"
def main(word):
    global letter
[...]

ou alors rajoutes letter en paramètre de ta fonction main.
#Initialisation
def main(word, letter):
    b = True
    while (b ==True):
        letter+=GetLettre() #Erreur ici
        print("Mot: ", getMaskedWord(word, letter))
        main()
main(word, letter)

Ton problème est expliqué ici :
https://python.developpez.com/faq/?page=Questions-Python#J-ai-ce-message-UnboundLocalError-local-variable-referenced-before-assignment-Ca-veut-dire-quoi

D'ailleurs tu n'as pas besoins de rappeler main à la ligne 7 ici puisque tu es dans une boucle while. Sinon tu rappelles main qui exécute la boucle while et qui appelle à nouveau main pour ensuite etc ..

Après avoir résolu ce problème il y en a un autre, il manque une variable lors de l'appel de la fonction getMaskedWord.
TypeError: getMaskedWord() missing 1 required positional argument: 'testLettre'


Tu peux aussi te passer de la fonction getWords et pickWord, initialiser wordsList après letter et ainsi affecter à word choice(wordsList)
#Mots pendu
wordsList = [
    "peinture",
    "ecran",
    "montagne",
    "carte",
    "python",
    "balle",
    "clavier",
    "espoir",
    "volant",
    "carton",
    "couteau",
    "fiche",
    "feuille",
    "travail",
    "sciences",
    "scandale",
    "canard",
    "utile",
    ]

[ ... ]

#Variabled + start
word = choice(wordsList)


En espérant t'avoir aidé,
Bonne soirée !
0
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018
25 mai 2017 à 01:37
Merci :) J'essaie ça de suite
0
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018
25 mai 2017 à 01:59
Autre problème :'( https://prnt.sc/fbrgkb
0
Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11 > OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018
25 mai 2017 à 13:09
Tu appelles deux fois la fonction « GetLettre() », place là dans une variable, comme :
#Initialisation
def main(word, letter):
    b = True
    
    while(b):
        getLettre = GetLettre()
        letter   += getLettre
        
        print("Mot: ", getMaskedWord(word, letter, getLettre))
        
        main(word, letter)
0