Problème pendu...

OmeGaFire_ Messages postés 83 Date d'inscription   Statut Membre Dernière intervention   -  
Felice_ Messages postés 271 Statut Membre -
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_

1 réponse

  1. Gerik0 Messages postés 8 Statut Membre
     
    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
    1. OmeGaFire_ Messages postés 83 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci :) J'essaie ça de suite
      0
    2. OmeGaFire_ Messages postés 83 Date d'inscription   Statut Membre Dernière intervention  
       
      Autre problème :'( https://prnt.sc/fbrgkb
      0
      1. Felice_ Messages postés 271 Statut Membre 11 > OmeGaFire_ Messages postés 83 Date d'inscription   Statut Membre Dernière intervention  
         
        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