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 :

Pendu avec randrange (Python 3)


Sujet :

Python

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Points : 26
    Points
    26
    Par défaut Pendu avec randrange (Python 3)
    Bonjour,

    J'ai à nouveau besoin de vous

    J'aimerais bien créer un petit jeu du pendu avec Python.. Rien de graphique ni de très compliqué.

    Donc j'ai un fichier avec 830 mots que j'ai créé et le module Random de Python me permet d'en trouver un au hasard. Une fois un mot trouvé, le programme affiche autant d'étoiles que de caractères dans le mot (lapin => * * * * *). Le joueur entre une lettre et si elle est fausse le programme affiche une liste avec les lettres fausses et une autre liste avec les lettres correctes. Si après un certain nombre d'essais, le mot n'est pas trouvé le programme affiche "Perdu !".

    Voilà comment je l'aimerais bien..

    Mon programme tel qu'il est maintenant :

    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
     
    # -*- coding: utf-8 -*-
     
    from random import randrange
     
    def lectLigne(numLigne):
        oFichier = open('questions', 'read')
        i = 0
        while i < numLigne :
            l = oFichier.readline()
            i = i + 1
        oFichier.close()
        return l
     
    # PROGRAMME PRINCIPAL #
     
    while 1 :
        ligneHasard = randrange(10)
        rep = lectLigne(ligneHasard)
        print '####################################'
        print '\n',rep
        print '####################################'
        answer = raw_input('Réponse : ')
        if answer == '':
            print 'Aurevoir !'
            break
    Pour le moment il cherche une question au hasard dans mon fichier "questions" et tant que l'utilisateur entre des réponses, le programme continue...

    Merci !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    lire le fichier qu'une seule fois et créer une liste de mots mélangée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from random import shuffle
     
    with open('questions') as oFichier:
        questions = oFichier.readlines()
        # pas besoin de traiter les "\n", le faire sur le mot choisit
        shuffle(questions)
    suffit ensuite de questions.pop()er les mots à trouver (idéalement replacer la question en fin de liste), ou bien indexer la liste via un compteur à modulo.

  3. #3
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Et pour un "Lecture-ligne" plus efficace, tu as le module linecache
    qui permet un accès direct à une ligne donnée dans un fichier de type texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import linecache
    lineno = 120 # random number
    contenu_ligne = linecache.getline("question",lineno)
    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

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    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 : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Une solution pour les gros fichiers ici, écris par Alok

    Sinon proposé par Maître Martelli

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def picklines(thefile, whatlines): 
      return [x for i, x in enumerate(thefile) if i in whatlines]
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def yieldlines(thefile, whatlines): 
      return (x for i, x in enumerate(thefile) if i in whatlines)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Déjà il faudrait avoir plus consistant que 830 mots.
    Téléchargez ceci et appliquez lui le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with open('liste.de.mots.francais.frgut.txt', 'r') as f_in:
        with open('mots.txt', 'w') as f_out:    
            for l in f_in:
                if 4 < len(l) < 11:
                    try:
                        l.encode('ascii')
                        f_out.write(l)
                    except:
                        pass
    Vous vous retrouverez avec un fichier 'mots.txt' contenant 86268 mots (sans accents) de 5 à 10 lettres. Cela devrais suffire.
    Vous pouvez aussi enlever les '-' si vous voulez.
    Notes:
    Attention à l'encodage du fichier d'origine. Si problème ouvrez le et enregistrez le au bon format.

    Lire le fichier:
    Pas besoin de se compliquer la chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liste_mots = []
    with open('mots.txt', 'r') as f_mots:
        for l in f_mots:
            liste_mots.append(l.strip())
    Sauf d'avoir un to7 la lecture du fichier est rapide, même avec 86268 mots.
    liste_mots contient maintenant ceux ci.

    Après, puisque vous partez avec while, tout est une question de logique et de test (if)
    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
    def load_mots():
        with open('mots.txt', 'r') as f_mots:
            for l in f_mots:
                liste_mots.append(l.strip())
     
    liste_mots = []
    load_mots()
     
    try:
        print("Bienvenu.\nPour quitter utilisez ctrl+c")
        while 1:
            # Gerer la liste
            if len(liste_mots) == 0:
                recharger = raw_input("Plus de mots dans la liste... Voulez vous la recharger ? (O/N) ")
                if recharger.lower == 'o':
                    load_mots()
                else:
                    print("Dommage... A bientot")
                    break
            elif len(liste_mots) == 1:
                print("Formidable ! Dernier mots a trouver !")
                mots_a_trouver = liste_mots.pop()
            else:
                mots_a_trouver = liste_mots.pop(randrange(len(liste_mots)-1))
            nb_essai = len(mots_a_trouver)*1.5
            cache = '*'*len(mots_a_trouver)
            while nb_essai > 0:
                ...
    except KeyboardInterrupt:
        print("\nA bientot !\n")
    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
    mots_a_trouver = "test"
    cache = '*'*len(mots_a_trouver)
    while 1:
        print("Mots a trouver : %s" % cache)
        print("Mots a trouver : %s" % mots_a_trouver)
        chr_to_test = raw_input("Donnez une lettre : ").lower()
        if chr_to_test == '':
            print("Dommage... Mots suivant")
            break
        elif chr_to_test in cache:
            print("Vous avez deja proposer cette lettre")
        elif chr_to_test in mots_a_trouver:
            for i, ch in enumerate(mots_a_trouver):
                if ch == chr_to_test:
                    cache = cache[:i] + ch + cache[i+1:]
        if cache == mots_a_trouver:
            rejouer = raw_input("Bravo ! Mots suivant ? (o/n) ").lower()
            if rejouer != "o":
                print("Dommage, A bientot")
                break
    @+
    Merci d'utiliser le forum pour les questions techniques.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    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
     
    ´# -*- coding: cp1252 -*-
     
    def load_mots():
        with open('mots.txt', 'r') as f_mots:
            for l in f_mots:
                liste_mots.append(l.strip())
     
    liste_mots = []
    load_mots()
     
    try:
        print("Bienvenu.\nPour quitter utilisez ctrl+c")
        while 1:
            # Gerer la liste
            if len(liste_mots) == 0:
                recharger = raw_input("Plus de mots dans la liste... Voulez vous la recharger ? (O/N) ")
                if recharger.lower == 'o':
                    load_mots()
                else:
                    print("Dommage... A bientot")
                    break
            elif len(liste_mots) == 1:
                print("Formidable ! Dernier mots a trouver !")
                mots_a_trouver = liste_mots.pop()
            else:
                mots_a_trouver = liste_mots.pop(randrange(len(liste_mots)-1))
            nb_essai = len(mots_a_trouver)*1.5
            cache = '*'*len(mots_a_trouver)
            while nb_essai > 0:
                ...
    except KeyboardInterrupt:
        print("\nA bientot !\n")
     
     
    mots_a_trouver = "test"
    cache = '*'*len(mots_a_trouver)
    while 1:
        print("Mots a trouver : %s" % cache)
        print("Mots a trouver : %s" % mots_a_trouver)
        chr_to_test = raw_input("Donnez une lettre : ").lower()
        if chr_to_test == '':
            print("Dommage... Mots suivant")
            break
        elif chr_to_test in cache:
            print("Vous avez deja proposer cette lettre")
        elif chr_to_test in mots_a_trouver:
            for i, ch in enumerate(mots_a_trouver):
                if ch == chr_to_test:
                    cache = cache[:i] + ch + cache[i+1:]
        if cache == mots_a_trouver:
            rejouer = raw_input("Bravo ! Mots suivant ? (o/n) ").lower()
            if rejouer != "o":
                print("Dommage, A bientot")
                break
    Voilà à quoi je suis pour le moment. Le fichier mots.txt je l'ai sur mon ordi avec les 80000 mots.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while nb_essai > 0:
                ...
    Je ne sais pas quoi mettre à la place des ...

    Je vous demande à l'aide !

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Avez vous tester à partir de la ligne 36 (sans tout le reste) ?

    @+
    Merci d'utiliser le forum pour les questions techniques.

Discussions similaires

  1. jeu du pendu avec python
    Par TermS dans le forum Général Python
    Réponses: 3
    Dernier message: 08/05/2013, 18h14
  2. Créer ou modifier un shell avec interface python et le lancer
    Par jameson dans le forum Général Python
    Réponses: 11
    Dernier message: 26/08/2008, 09h59
  3. probleme d'import avec eric python
    Par remitbo dans le forum Général Python
    Réponses: 1
    Dernier message: 20/05/2007, 22h57
  4. comment créer un mail avec Zope / Python ?
    Par malmzi2007 dans le forum Zope
    Réponses: 3
    Dernier message: 12/07/2006, 19h19
  5. Moteur de recherche interne avec zope/python
    Par tunix dans le forum Zope
    Réponses: 3
    Dernier message: 01/05/2006, 15h45

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