IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Amélioration de mon "pendu".


Sujet :

Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut Amélioration de mon "pendu".
    Bonjour à tous,

    J'ai fais un petit pendu qui tourne presque rond. Je crois qu'il y a un soucis avec la boucle pour le menu, parce que le script ne sort pas lorsqu'on à joué et qu'on répond ; "non" à la question, si oui ou non on aimerait bien rejouer...

    De plus j'aimerais y apporter quelques améliorations

    - permettre au joueur d'entrer la solution du mot et si la solution n'est pas juste, le programme compte une chance en moins.

    - le joueur ne peut entrer plusieurs fois la même lettre.

    - ajouter de nouveaux mots au fichier "motsPendu"

    Voilà

    Merci de m'aider et de me donner des pistes...

    Comme vous le voyez, le code n'est pas très évolué et fait avec les bases de Python. J'aimerais rester dans ce style, donc pas de fonctions compliquées etc.. ^^ Je n'y comprendrais plus rien..

    Un grand merci !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    Citation Envoyé par tonykart13 Voir le message
    Bonjour à tous,

    J'ai fais un petit pendu qui tourne presque rond. Je crois qu'il y a un soucis avec la boucle pour le menu, parce que le script ne sort pas lorsqu'on à joué et qu'on répond ; "non" à la question, si oui ou non on aimerait bien rejouer...

    De plus j'aimerais y apporter quelques améliorations

    - permettre au joueur d'entrer la solution du mot et si la solution n'est pas juste, le programme compte une chance en moins.

    - le joueur ne peut entrer plusieurs fois la même lettre.

    - ajouter de nouveaux mots au fichier "motsPendu"

    Voilà

    Merci de m'aider et de me donner des pistes...

    Comme vous le voyez, le code n'est pas très évolué et fait avec les bases de Python. J'aimerais rester dans ce style, donc pas de fonctions compliquées etc.. ^^ Je n'y comprendrais plus rien..

    Un grand merci !
    EDIT : J'ai oublié de mettre le code !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    # import ---------------------------------------
     
    from random import randrange # fonction randrange du module random
     
    # ------------- fonctions ----------------------
     
    def lireMot(nLigne):
        'lecture du mot à partir du nombre aléatoire'
        oFich = open('motsPendu','r') # création objet fichier
        i = 0
        while i <= nLigne :
            mot = oFich.readline() # lecture de la ligne
            i+=1
        oFich.close()
        return (mot[:-1]) # lecture du mot sans le caractère "aller à la ligne"
     
    def afficheMot(mot,listeBolet,listeMalet):
        'affiche le mot en fonction des lettres trouvées'
        print('\n')
        for car in mot : # pour car dans mot
            if car in listeBolet :
                print(car,end='')
            else :
                print('*',end='')
        print('\n')
        if len(listeMalet) > 0 :
            print('Mauvaises lettres : ', end='')
            for elem in listeMalet :
                print(elem,' ',end='')
        print('\n')
     
    # ------------- programme principal ----------------
     
    print('# --------------- PENDU --------------- #')
    print('-----------------------------------------')
    print('1 - Jouer.')
    print('2 - Ajouter un nouveau mot au répertoire.')
    print('3 - Quitter')
    print('-----------------------------------------')
    choix = input('Votre choix : ')
     
    maxChance = 5
    repCont = 'Y' # valeur par défaut pour continuer à jouer
     
    while 1 :
        if choix == '1' :
            while repCont == 'Y' :
                print('\n')
                print('*** LE PENDU ***')
                nbLignMot = randrange(850) # ...
                motSecret = lireMot(nbLignMot)
                lisGoodLet = []
                lisBadLet = []
                nbChance = 0
                while 1 :
                    afficheMot(motSecret,lisGoodLet,lisBadLet)
                    lettre = input('Entrez une lettre : ')
                    if lettre[0] in motSecret :
                        lisGoodLet.append(lettre[0]) # 0 car on ne prend que la première lettre
                        good = True
                        for car in motSecret :
                            if car not in lisGoodLet :
                                good = False
                        if good == True :
                            print('Vous avez gagné !')
                            break;
                    else :
                        lisBadLet.append(lettre[0])
                        nbChance+=1
                        if nbChance == maxChance :
                            print ('Vous avez perdu ! Le mot était : ',motSecret)
                            break;
                repCont = input('Voulez-vous rejouer ? (Y) (N) ')
                repCont = repCont.upper() # pour afficher en majuscules
            print ('\n')
            print('Merci pour votre participation !');
     
        elif choix == '3':
            print('Aurevoir !')
            break;
    Bien à vous !

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    pourquoi as-tu une liste pour les "bonnes lettres" et une liste pour les "mauvaises" ?
    les bonnes lettres sont celles du mot à trouver,les mauvaises toutes les autres ...

    si le mot est 'hello' et que le joueur propose un 'm', il perd un essai; s'il est distrait et propose à nouveau un 'm' il perd encore un essai. A quoi sert de mémoriser 'm' comme étant une mauvaise lettre ?

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    - le joueur ne peut entrer plusieurs fois la même lettre.
    C'est plus simple que de lire un fichier par exemple pour en retirer tous les mots, non?

    - permettre au joueur d'entrer la solution du mot et si la solution n'est pas juste, le programme compte une chance en moins.
    Que ferais-tu?

    - ajouter de nouveaux mots au fichier "motsPendu"
    L'ajouter dans ton fichier txt?

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Ajouter à une liste juste les lettres ne se trouvant pas dans une liste, c'est une simple condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def ajouter(lettre, liste):
        if lettre not in liste:
            liste.append(lettre)
     
    # test
     
    ma_liste = ["a",  "c",  "p"]
    ajouter("d",  ma_liste)
    ajouter("c",  ma_liste)
    print(ma_liste)
    Pour le compteur, beaucoup de solution, en voilà une, simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def compter(my_solution,  user_solution,  counter):
        if my_solution != user_solution:
            counter -= 1
        return counter
     
    # test
     
    solution = "test"
    compteur = 5
    compteur = compter(solution,  "t",  compteur)
    compteur = compter(solution,  "te",  compteur)
    compteur = compter(solution,  "test",  compteur)
     
    print(compteur)

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Ajouter à une liste juste les lettres ne se trouvant pas dans une liste, c'est une simple condition
    plus simple en changeant de container ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ma_liste = set("acp")
    ma_liste |= set("d")
    ma_liste |= set("c")
    print(ma_liste)
    >>> {'a', 'p', 'c', 'd'}

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    J'ai été absent plusieurs jours et je viens donc seulement de voir toutes les réponses. Je me rends compte que je ne comprends pas les techniques que vous me décrivez...

    Sinon pour mon pendu j'ai un peu retravaillé dessu et il ne me manque qu'une seule chose Je n'arrive pas à trouver comment résoudre ceci :

    Si l'utilisateur pense connaître le mot, il peu entrer le mot en entier et si c'est correct, il gagne et sinon le programme compte une faute de plus.

    Voilà mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    # -*- coding: utf-8 -*-
    # import ---------------------------------------
     
    from random import randrange # fonction randrange du module random
     
    # ------------- fonctions ----------------------
     
    def lireMot(nLigne):
        'lecture du mot à partir du nombre aléatoire'
        oFich = open('motsPendu.txt','r') # création objet fichier
        i = 0
        while i <= nLigne :
            mot = oFich.readline() # lecture de la ligne
            i+=1
        oFich.close()
        return (mot[:-1]) # lecture du mot sans le caractère "aller à la ligne"
     
    def afficheMot(mot,listeBolet,listeMalet):
        'affiche le mot en fonction des lettres trouvées'
        print('\n')
        for car in mot : # pour car dans mot
            if car in listeBolet :
                print(car,end='')
            else :
                print('*',end='')
        print('\n')
        if len(listeMalet) > 0 :
            print('Mauvaises lettres : ', end='')
            for elem in listeMalet :
                print(elem,' ',end='')
        print('\n')
     
    def ajouterMot(nouvMot):
        oFichier = open('motsPendu.txt', 'a')
        oFichier.write(nouvMot.upper()+'\n')
        oFichier.close()
     
    # ------------- programme principal ----------------
    while 1 :
        print('# --------------- PENDU --------------- #')
        print('-----------------------------------------')
        print('1 - Jouer.')
        print('2 - Ajouter un nouveau mot au répertoire.')
        print('3 - Quitter')
        print('-----------------------------------------')
        choix = input('Votre choix : ')
     
        maxChance = 5
        repCont = 'Y' # valeur par défaut pour continuer à jouer
     
        if choix == '1' :
            while repCont == 'Y' :
                print('\n')
                print('*** LE PENDU ***')
                nbLignMot = randrange(850) # ...
                motSecret = lireMot(nbLignMot)
                lisGoodLet = []
                lisBadLet = []
                nbChance = 0
                while 1 :
                    afficheMot(motSecret,lisGoodLet,lisBadLet)
                    lettre = input('Entrez une lettre : ').upper()
                    if lettre[0] in motSecret :
                        lisGoodLet.append(lettre[0]) # 0 car on ne prend que la première lettre
                        good = True
                        for car in motSecret :
                            if car not in lisGoodLet :
                                good = False
                        if good == True :
                            print('Vous avez gagné !')
                            break;
                    else :
                        lisBadLet.append(lettre[0])
                        nbChance+=1
                        if nbChance == maxChance :
                            print ('Vous avez perdu ! Le mot était : ',motSecret)
                            break;
                repCont = input('Voulez-vous rejouer ? (Y) - (N) : ')
                repCont = repCont.upper() # pour afficher en majuscules
            print ('\n')
            print ('Merci pour votre participation !')
            print ('\n');
     
        elif choix == '2':
            while repCont == 'Y' :
                print ('\n')
                newMot = input('Mot à ajouter à la liste : ')
                ajouterMot(newMot)
                print ('Le mot a été ajouté avec succès.')
                repCont = input('Un autre mot ? (Y) - (N) : ')
                repCont = repCont.upper()
                print ('\n')
     
        elif choix == '3':
            print('Aurevoir !')
            break;
    Merci bien !

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lettre = input('Entrez une lettre : ').upper()
    if lettre == motSecret : etc ...
    elif lettre[0] in motSecret : etc ...
    else : etc ...
    non ?

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    Citation Envoyé par josmiley Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lettre = input('Entrez une lettre : ').upper()
    if lettre == motSecret : etc ...
    elif lettre[0] in motSecret : etc ...
    else : etc ...
    non ?
    Si ! ça fonctionne. J'ai cherché trop loin...

    Le jeu tourne quasi comme je le voulais mais il reste un petit problème.. Comment je pourais faire pour empêcher d'entrer deux fois la même lettre ?

    Pour le moment si la lettre est correcte, il ne fait rien mais si elle est fausse mais déjà dans la liste, il rajoute encore une chance de plus...

    Mettez moi juste sur la piste..

    Merci !

  10. #10
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Salut,
    -concernant la fonction "lireMot", le module <linecache> te permet de le faire de manière plus rapide, et plus soft
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import linecache
     
    def lireMot(fileName, line): #line:1...n
        return linecache.getline(fileName, line).split("\n")[0]
    pour les lettres incorectes, tu peux faire un test et n'incrémenter nbChance que lorsque le mauvais caractère n'est pas dans ta liste "lisBadLet". (Et naturellement, il faut faire le test avant de l'ajouter )
    Pour savoir si un élément est dans une liste: "if element in ensemble:..."
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lettre = input('Entrez une lettre : ').upper()
    if lettre == motSecret : etc ...
    elif lettre[0] in motSecret : etc ...
    elif not lettre in lisBadLet : etc ...
    peut-être ...

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    Merci les gars ! Le pendu fonctionne comme je le veux.

    C'est sympa de m'aider !!

    Voilà le code si vous voulez y jeter un coup d'oeil :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    # -*- coding: utf-8 -*-
    # import ---------------------------------------
     
    from random import randrange # fonction randrange du module random
     
    # ------------- fonctions ----------------------
     
    def lireMot(nLigne):
        'lecture du mot à partir du nombre aléatoire'
        oFich = open('motsPendu.txt','r') # création objet fichier
        i = 0
        while i <= nLigne :
            mot = oFich.readline() # lecture de la ligne
            i+=1
        oFich.close()
        return (mot[:-1]) # lecture du mot sans le caractère "aller à la ligne"
     
    def afficheMot(mot,listeBolet,listeMalet):
        'affiche le mot en fonction des lettres trouvées'
        print('\n')
        for car in mot : # pour car dans mot
            if car in listeBolet :
                print(car,end='')
            else :
                print('*',end='')
        print('\n')
        if len(listeMalet) > 0 :
            print('Mauvaises lettres : ', end='')
            for elem in listeMalet :
                print(elem,' ',end='')
        print('\n')
     
    def ajouterMot(nouvMot):
        oFichier = open('motsPendu.txt', 'a')
        oFichier.write(nouvMot.upper()+'\n')
        oFichier.close()
     
    # ------------- programme principal ----------------
    while 1 :
        print('# --------------- PENDU --------------- #')
        print('-----------------------------------------')
        print('1 - Jouer.')
        print('2 - Ajouter un nouveau mot au répertoire.')
        print('3 - Quitter')
        print('-----------------------------------------')
        choix = input('Votre choix : ')
     
        maxChance = 8
        repCont = 'Y' # valeur par défaut pour continuer à jouer
     
        if choix == '1' :
            while repCont == 'Y' :
                print('\n')
                print('*** LE PENDU ***')
                nbLignMot = randrange(850) # ...
                motSecret = lireMot(nbLignMot)
                lisGoodLet = []
                lisBadLet = []
                nbChance = 0
                while 1 :
                    afficheMot(motSecret,lisGoodLet,lisBadLet)
                    lettre = input('Entrez une lettre : ').upper()
                    if lettre == motSecret :
                        good = True
                        if good == True :
                            print('Vous avez gagné !')
                            break;
     
                    elif lettre[0] in motSecret :
                        if lettre[0] in lisGoodLet :
                            print('Vous avez déjà essayé cette lettre.')
                        else :
                            lisGoodLet.append(lettre[0]) # 0 car on ne prend que la première lettre
                            good = True
                        for car in motSecret :
                            if car not in lisGoodLet :
                                good = False
                        if good == True :
                            print('Vous avez gagné !')
                            break;
                    else :
                        if lettre[0] in lisBadLet :
                            print ('Vous avez déjà essayé cette lettre.')
                        else :
                            lisBadLet.append(lettre[0])
                            nbChance+=1
                        if nbChance == maxChance :
                            print ('Vous avez perdu ! Le mot était : ',motSecret)
                            break;
                repCont = input('Voulez-vous rejouer ? (Y) - (N) : ')
                repCont = repCont.upper() # pour afficher en majuscules
            print ('\n')
            print ('Merci pour votre participation !')
            print ('\n');
     
        elif choix == '2':
            while repCont == 'Y' :
                print ('\n')
                newMot = input('Mot à ajouter à la liste : ')
                ajouterMot(newMot)
                print ('Le mot a été ajouté avec succès.')
                repCont = input('Un autre mot ? (Y) - (N) : ')
                repCont = repCont.upper()
                print ('\n')
     
        elif choix == '3':
            print('Aurevoir !')
            break;

  13. #13
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    essayes ça ...
    tu vois, tu peux encore optimiser ton code

    dans ce code tu peux entrer les lettres manquantes par groupe dans l'ordre mais pas le mot complet.
    ex:
    pour tortue
    T _ _ T _ E
    tu peux entrer 'or'
    T O R T _ E
    puis 'u'
    T O R T U E

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    from random import choice
     
    with open('motsPendu.txt')as mots: mots = mots.read().splitlines()
     
    def play():
        print("********  LE PENDU  ********\n")
        mot = choice(mots)
        mot = mot.replace(mot[0],mot[0].upper()).replace(mot[-1],mot[-1].upper())
        essai = 5
        while essai and not mot.isupper():
            print('essai(s):%i'%essai)
            print('mot: %s\n'%' '.join([i if i.isupper() else '_'for i in mot]))
            l = input('une lettre: ').lower()
            if l.isalpha() and not l in mot: essai -= 1
            mot = mot.replace(l,l.upper())
            print()
        if essai: print("Bravo! c'était bien %s\n"%mot)
        else:     print('Perdu! le mot était %s\n'%mot.upper())
     
    play()
    while input('rejouer (o ou rien, sinon une autre lettre) ?') in ('o',''): play()

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    Merci c'est pas mal du tout mais je trouve que pour moi c'est pas utile... Ou alors je connais le mot ou alors j'essaie avec des lettres... Mais si je connais plusieurs lettres, c'est que je connais sûrement le mot en entier. C'est tout de même intéressant et je l'ai enregistré pour un autre programme peut-être

    Par contre, pour mon petit programme, je viens de remarquer quelque chose qui ne me plaît pas... Le nombre que l'on donne à "randrange" ne change pas.. C'est à dire que si on rajoute des mots, il faut à chaque fois changer le nombre entre parenthèses dans "randrange".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbLignMot = randrange(850)
    Y a-t-il un moyen de changer ça assez facilement sans devoir faire une fonction ? Sinon je pensais faire une fonctionne et mettre "n" à "randrange" et faire en sorte que "n" évolue avec le nombres de mots dans le fichier texte...

    Merci !

  15. #15
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Le nombre que l'on donne à "randrange" ne change pas.. C'est à dire que si on rajoute des mots, il faut à chaque fois changer le nombre entre parenthèses dans "randrange".
    Donc tu veux connaître le nombre de lignes dans ton fichier?

    Si oui alors

    Y a-t-il un moyen de changer ça assez facilement sans devoir faire une fonction ?
    Non! Et pour info les fonctions c'est le bien, c'est une preuve d'un minimum d'organisation.

    Voici le code pour connaître le nombre de lignes d'un fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import mmap
     
    def mapcount(filename):
        f = open(filename, "r+")
        buf = mmap.mmap(f.fileno(), 0)
        lines = 0
        readline = buf.readline
        while readline():
            lines += 1
        return lines
     
    nbLignMot = randrange(mapcount('motsPendu.txt'))

  16. #16
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Sinon t'as celui-ci, plus concis mais moins efficace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nbLignMot = sum(1 for line in open('motsPendu.txt', 'r'))
    nbLignMot = randrange(nbLignMot)

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    Je n'ai jamais vu mmap donc je ne sais pas si je vais l'utiliser.. Je vais un peu voir comment je vais résoudre le problème..

    En attendant je suis tombé sur un autre problème.. Quand je crois connaître le mot et que je le rentre mais qu'il est faut, le programme ne compte pas une erreur mais me dit que la lettre a déjà été essayée..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    # -*- coding: utf-8 -*-
    # import ---------------------------------------
     
    from random import randrange # fonction randrange du module random
     
    # ------------- fonctions ----------------------
     
    def lireMot(nLigne):
        'lecture du mot à partir du nombre aléatoire'
        oFich = open('motsPendu.txt','r') # création objet fichier
        i = 0
        while i <= nLigne :
            mot = oFich.readline() # lecture de la ligne
            i+=1
        oFich.close()
        return (mot[:-1]) # lecture du mot sans le caractère "aller à la ligne"
     
    def afficheMot(mot,listeBolet,listeMalet):
        'affiche le mot en fonction des lettres trouvées'
        print('\n')
        for car in mot : # pour car dans mot
            if car in listeBolet :
                print(car,end='')
            else :
                print('*',end='')
        print('\n')
        if len(listeMalet) > 0 :
            print('Mauvaises lettres : ', end='')
            for elem in listeMalet :
                print(elem,' ',end='')
        print('\n')
     
    def ajouterMot(nouvMot):
        oFichier = open('motsPendu.txt', 'a')
        oFichier.write(nouvMot.upper()+'\n')
        oFichier.close()
     
    # ------------- programme principal ----------------
    while 1 :
        print('# --------------- PENDU --------------- #')
        print('-----------------------------------------')
        print('1 - Jouer.')
        print('2 - Ajouter un nouveau mot au répertoire.')
        print('3 - Quitter')
        print('-----------------------------------------')
        choix = input('Votre choix : ')
     
        maxChance = 8
        repCont = 'Y' # valeur par défaut pour continuer à jouer
     
        if choix == '1' :
            while repCont == 'Y' :
                print('\n')
                print('*** LE PENDU ***')
                nbLignMot = randrange(850) # ...
                motSecret = lireMot(nbLignMot)
                lisGoodLet = []
                lisBadLet = []
                nbChance = 0
                while 1 :
                    afficheMot(motSecret,lisGoodLet,lisBadLet)
                    lettre = input('Entrez une lettre : ').upper()
                    if lettre == motSecret :
                        good = True
                        if good == True :
                            print('Vous avez gagné !')
                            break;
     
                    elif lettre[0] in motSecret :
                        if lettre[0] in lisGoodLet :
                            print('Vous avez déjà essayé cette lettre.')
                        else :
                            lisGoodLet.append(lettre[0]) # 0 car on ne prend que la première lettre
                            good = True
                        for car in motSecret :
                            if car not in lisGoodLet :
                                good = False
                        if good == True :
                            print('Vous avez gagné !')
                            break;
                    else :
                        if lettre[0] in lisBadLet :
                            print ('Vous avez déjà essayé cette lettre.')
                        else :
                            lisBadLet.append(lettre[0])
                            nbChance+=1
                        if nbChance == maxChance :
                            print ('Vous avez perdu ! Le mot était : ',motSecret)
                            break;
                repCont = input('Voulez-vous rejouer ? (Y) - (N) : ')
                repCont = repCont.upper() # pour afficher en majuscules
            print ('\n')
            print ('Merci pour votre participation !')
            print ('\n');
     
        elif choix == '2':
            while repCont == 'Y' :
                print ('\n')
                newMot = input('Mot à ajouter à la liste : ')
                ajouterMot(newMot)
                print ('Le mot a été ajouté avec succès.')
                repCont = input('Un autre mot ? (Y) - (N) : ')
                repCont = repCont.upper()
                print ('\n')
     
        elif choix == '3':
            print('Aurevoir !')
            break;
    J'ai essayé avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elif lettre != motSecret :
    mais celà ne fonctionne pas..

  18. #18
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    remplace lettre[0] par lettre[:-1]

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    Voilà j'ai encore un peu travaillé sur le programme mais je n'arrive pas à faire un petit truc..

    ==> Quand l'utilisateur croît connaître le mot mais qu'il est faux, le programme doit compter une erreure mais il ne le fait pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    # -*- coding: utf-8 -*-
    # import ---------------------------------------
     
    from random import randrange # fonction randrange du module random
     
    # ------------- fonctions ----------------------
     
    def lireMot(nLigne):
        'lecture du mot à partir du nombre aléatoire'
        oFich = open('motsPendu.txt','r') # création objet fichier
        i = 0
        while i <= nLigne :
            mot = oFich.readline() # lecture de la ligne
            i+=1
        oFich.close()
        return (mot[:-1]) # lecture du mot sans le caractère "aller à la ligne"
     
    def afficheMot(mot,listeBolet,listeMalet):
        'affiche le mot en fonction des lettres trouvées'
        print('\n')
        for car in mot : # pour car dans mot
            if car in listeBolet :
                print(car,end='')
            else :
                print('*',end='')
        print('\n')
        if len(listeMalet) > 0 :
            print('Mauvaises lettres : ', end='')
            for elem in listeMalet :
                print(elem,' ',end='')
        print('\n')
     
    def ajouterMot(nouvMot):
        oFichier = open('motsPendu.txt', 'a')
        oFichier.write(nouvMot.upper()+'\n')
        oFichier.close()
     
    # ------------- programme principal ----------------
    while 1 :
        print('# --------------- PENDU --------------- #')
        print('-----------------------------------------')
        print('1 - Jouer.')
        print('2 - Ajouter un nouveau mot au répertoire.')
        print('3 - Quitter')
        print('-----------------------------------------')
        choix = input('Votre choix : ')
     
        maxChance = 8
        repCont = 'Y' # valeur par défaut pour continuer à jouer
     
        if choix == '1' :
            while repCont == 'Y' :
                print('\n')
                print('*** LE PENDU ***')
                print('Tapez "QUITTER" ou "quitter" pour sortir du jeu !')
                nbLignMot = sum(1 for line in open('motsPendu.txt', 'r'))
                nbLignMot = randrange(nbLignMot) # ...
                motSecret = lireMot(nbLignMot)
                lisGoodLet = []
                lisBadLet = []
                nbChance = 0
     
                while 1 :
                    afficheMot(motSecret,lisGoodLet,lisBadLet)
                    lettre = input('Entrez une lettre : ').upper()
                    if lettre == motSecret :
                        good = True
                        if good == True :
                            print('Vous avez gagné !')
                            break;
                    elif lettre == "" or lettre in "0123456789":
                        print("/!\ VEUILLEZ ENTRER UNE LETTRE /!\ ")
     
                    elif lettre == "quitter" or lettre == "QUITTER" :
                        break;
     
                    elif lettre[0] in motSecret :
                        if lettre[0] in lisGoodLet :
                            print('Vous avez déjà essayé cette lettre.')
                        else :
                            lisGoodLet.append(lettre[0]) # 0 car on ne prend que la première lettre
                            good = True
                        for car in motSecret :
                            if car not in lisGoodLet :
                                good = False
                        if good == True :
                            print('Vous avez gagné !')
                            break;
     
                    else :
                        if lettre[0] in lisBadLet :
                            print ('Vous avez déjà essayé cette lettre.')
                        else :
                            lisBadLet.append(lettre[0])
                            nbChance+=1
                        if nbChance == maxChance :
                            print ('Vous avez perdu ! Le mot était : ',motSecret)
     
                            break;
                repCont = input('Voulez-vous rejouer ? (Y) - (N) : ')
                repCont = repCont.upper() # pour afficher en majuscules
     
            print ('\n')
            print ('Merci pour votre participation !')
            print ('\n');
     
        elif choix == '2':
            while repCont == 'Y' :
                print ('\n')
                newMot = input('Mot à ajouter à la liste : ')
                ajouterMot(newMot)
                print ('Le mot a été ajouté avec succès.')
                repCont = input('Un autre mot ? (Y) - (N) : ')
                repCont = repCont.upper()
                print ('\n')
     
        elif choix == '3':
            print('Aurevoir !')
            break;
    Merci d'y jeter un coup d'oeil !

    Tk13

  20. #20
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Peux pas tester pas de fichier ...txt (pas la force d'en chercher un )
    Jette un coup d'oeil aux <Edit>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
    # -*- coding: utf-8 -*-
    # import ---------------------------------------
     
    from random import randrange # fonction randrange du module random
     
    # ------------- fonctions ----------------------
     
    def lireMot(nLigne):
        'lecture du mot à partir du nombre aléatoire'
        oFich = open('motsPendu.txt','r') # création objet fichier
        i = 0
        while i <= nLigne :
            mot = oFich.readline() # lecture de la ligne
            i+=1
        oFich.close()
        return (mot[:-1]) # lecture du mot sans le caractère "aller à la ligne"
     
    def afficheMot(mot,listeBolet,listeMalet):
        'affiche le mot en fonction des lettres trouvées'
        print('\n')
        for car in mot : # pour car dans mot
            if car in listeBolet :
                print(car,end='')
            else :
                print('*',end='')
        print('\n')
        if len(listeMalet) > 0 :
            print('Mauvaises lettres : ', end='')
            for elem in listeMalet :
                print(elem,' ',end='')
        print('\n')
     
    def ajouterMot(nouvMot):
        oFichier = open('motsPendu.txt', 'a')
        oFichier.write(nouvMot.upper()+'\n')
        oFichier.close()
     
    # ------------- programme principal ----------------
    while 1 :
        print('# --------------- PENDU --------------- #')
        print('-----------------------------------------')
        print('1 - Jouer.')
        print('2 - Ajouter un nouveau mot au répertoire.')
        print('3 - Quitter')
        print('-----------------------------------------')
        choix = input('Votre choix : ')
     
        maxChance = 8
        repCont = 'Y' # valeur par défaut pour continuer à jouer
     
        if choix == '1' :
            while repCont == 'Y' :
                print('\n')
                print('*** LE PENDU ***')
                print('Tapez "QUITTER" ou "quitter" pour sortir du jeu !')
                nbLignMot = sum(1 for line in open('motsPendu.txt', 'r'))
                nbLignMot = randrange(nbLignMot) # ...
                motSecret = lireMot(nbLignMot)
                lisGoodLet = []
                lisBadLet = []
                nbChance = 0
     
                while 1 :
                    afficheMot(motSecret,lisGoodLet,lisBadLet)
                    lettre = input('Entrez une lettre : ').upper()
                    """if lettre == motSecret :
                        good = True
                        if good == True :
                            print('Vous avez gagné !')
                            break;
                    """
                    ##Start edit 1:
                    #on compte le mot entier uniquement pour la meme longueur (je suppose)
                    if len(lettre) == len(motSecret):
                        if lettre==motSecret:
                            good = True
                            #good étant un booléen, pas la peine ==True
                            if good:
                                print('Vous avez gangé !')
                                break;
                        else:
                            nbChance += 1
                    ##End edit 1
     
                    elif lettre == "" or lettre in "0123456789":
                        print("/!\ VEUILLEZ ENTRER UNE LETTRE /!\ ")
     
                    elif lettre == "quitter" or lettre == "QUITTER" :
                        break;
     
                    elif lettre[0] in motSecret :
                        if lettre[0] in lisGoodLet :
                            print('Vous avez déjà essayé cette lettre.')
                        else :
                            lisGoodLet.append(lettre[0]) # 0 car on ne prend que la première lettre
                            good = True
                        for car in motSecret :
                            if car not in lisGoodLet :
                                good = False
                        if good == True :
                            print('Vous avez gagné !')
                            break;
     
                    else :
                        if lettre[0] in lisBadLet :
                            print ('Vous avez déjà essayé cette lettre.')
                        else :
                            lisBadLet.append(lettre[0])
                            nbChance+=1
                    ##Start edit 2
                    #vu que l'on modifie nbChance autre part que dans ce else, on doit
                    #le remonter d'un bloc (dédenter)
                    if nbChance == maxChance :
                        print ('Vous avez perdu ! Le mot était : ',motSecret)
                        break;
                    ##End edit 2
                repCont = input('Voulez-vous rejouer ? (Y) - (N) : ')
                repCont = repCont.upper() # pour afficher en majuscules
     
            print ('\n')
            print ('Merci pour votre participation !')
            print ('\n');
     
        elif choix == '2':
            while repCont == 'Y' :
                print ('\n')
                newMot = input('Mot à ajouter à la liste : ')
                ajouterMot(newMot)
                print ('Le mot a été ajouté avec succès.')
                repCont = input('Un autre mot ? (Y) - (N) : ')
                repCont = repCont.upper()
                print ('\n')
     
        elif choix == '3':
            print('Aurevoir !')
            break;
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo