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 :

Remplacer Caractère par Underscore à partir d'un mot aléatoire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 109
    Par défaut Remplacer Caractère par Underscore à partir d'un mot aléatoire
    Bonjour à tous, je dois réaliser un pendu et je bute sur une des questions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import random
     
    mots = ["chien", "chat", "radiometrie", "photogrammetrie", "geodesie", "bibliotheque", "panier", "television"]
    def select_word (mots):
          return random.choice(mots)
     
    print("Le mot sélectionné est: ",select_word (mots))
    chosen_word = (select_word (mots))
    print =(len (chosen_word))
    Je dois sélectionner un mot dans une liste prédéfinie et ensuite je dois remplacer le mot par des underscores et séparer chaque lettre par "." et j'ai interdiction de mettre un point en début et fin de chaine.

    Si je prends l'exemple du mot chat, j'aimerais retourner cela "_._._._", 4 underscores qui correspondent aux 4 lettres qui composent le mot chat et des points séparant chacun des caractères.

    Mon problème est que mes résultats ne correspondent entre eux, exemple :

    si le mot aléatoire est chien
    Python comptabilise de manière aléatoire 12 caractères alors qu'il devrait en comptabiliser 5 logiquement ?

    Quelqu'un pourrait-il m'aider svp ?

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    select_word() est une fonction, donc à chaque fois que tu l'appelles tu choisis un nouveau mot, le but c'est donc de ne l’appeler qu'une seule fois et stocker son résultat dans une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mot_choisi = select_word(mots)
    print(mot_choisi)
    print(len(mot_choisi))
    ensuite de la même façon que tu choisis un mot aléatoirement dans une liste de mots, tu pourrais choisir une lettre aléatoirement dans une liste contenant les lettres du mot choisi.
    mots clés : split(), join()

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 799
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Stéphane_MAN Voir le message
    séparer chaque lettre par "." et j'ai interdiction de mettre un point en début et fin de chaine.
    Pas de souci: tu stockes les lettres essayées dans une variable (ex essai) et tu affiches chaque lettre du mot si la lettre a été essayée (donc trouvée) sinon un "_". Et tout ça dans un ".".join()
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> mot="barbapapa"
    >>> essai="ab"		# Sous-entendu que le joueur a essayé "a" et "b" dans les tours précédents
    >>> print(".".join(x if x in essai else "_" for x in mot))
    b.a._.b.a._.a._.a

    Ceci dit, afficher des "." entre les lettres je n'en vois pas l'intérêt. Ca rend le truc moche et super illisible
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> print("".join(x if x in xxx else "_" for x in mot))
    ba_ba_a_a
    Quand même plus facile à lire non?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 109
    Par défaut
    Merci beaucoup pour votre aide, cela a bien fonctionné :-)

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 109
    Par défaut Pendu : créer une fonction ajoutant au fur et à mesure les bonnes lettres
    J'avance sur mon projet du pendu et j'arrive au bout, pour l'instant je peux ajouter une lettre et compléter mon pendu mais je ne sais comment tester une deuxième lettre puis une troisième,etc...

    Ci-dessous mon code qui fonctionne :

    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
    import random
     
    if __name__ == "__main__":
        mots = ["couteau", "pain", "pince", "clou", "bonbon", "sac", "panier", "cahier"]
     
     
    def select_word (mots):
          return random.choice(mots)
     
    chosen_word = select_word(mots)
    print("Le mot sélectionné est: ",chosen_word)
     
    letter_1 = "a"
    def reveal_letter (letter_1,chosen_word):
          return (".".join(x if x in letter_1 else "_" for x in chosen_word))
     
    hidden_word = reveal_letter (letter_1,chosen_word)
    print(hidden_word)
    Ci-dessous la question à la quelle, je dois répondre

    Proposez une fonction play(liste_mots) qui permet de jouer. Cette fonction doit :
    • Permettre de jouer jusqu’à ce que le joueur ait trouvé toutes les lettres ou jusqu’à ce qu’il ait
    fait 6 erreurs ;
    • Après chaque proposition de lettre, imprimer en console l’état d’avancement du jeu, à savoir
    le dessin du « pendu » ainsi que
    le mot en cours sous la forme « _._.o._._ » ;
    • Si le player a perdu, la fonction s’arrête, indique au player qu’il a perdu et lui donne le mot
    qu’il fallait deviner ;
    • Si le player a gagné, la fonction s’arrête et félicite le player et rappelle le mot

    Je pensais à utiliser une boucle for ou while afin de jouer jusqu'à 6 reprises, ensuite j'aurais aimé ajouter un système boléen afin d'indiquer au joueur si le mot est bon ou pas, pour le dessin du pendu j'ai pu récupérer ce code sur internet, qu'en pensez-vous ?

    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
    p0 = ["""
         o
     
     
        """,
          """
            o
            |
       
           """,
          """
           _o
            |
       
           """,
          """
           _o_
            |
       
           """,
          """
           _o_
            |
           /
           """,
          """
           _o_
            |
           / \\
           """]

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 799
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Stéphane_MAN Voir le message
    mais je ne sais comment tester une deuxième lettre puis une troisième,etc...
    Ben c'est à ça que servent les boucles. Jouer au pendu c'est
    • proposer une lettre
    • si la lettre est dans le mot alors on affiche le mot avec la lettre sinon on décrémete le nb de coups autorisés
    • si le mot est complet on a gagné
    • si le nb de coups autorisés passe à 0 on a perdu
    • si ni l'un ni l'autre on remonte au début (boucle)


    Citation Envoyé par Stéphane_MAN Voir le message
    Ci-dessous mon code qui fonctionne :
    Déjà évite de mélanger fonctions et instructions. D'abord tu écris les fonctions, puis ensuite les instructions. Sinon c'est illisible. Et puis essaye de rendre tes fonctions indépendantes (donc qui n'utilisent pas de variable globale)

    Citation Envoyé par Stéphane_MAN Voir le message
    pour le dessin du pendu j'ai pu récupérer ce code sur internet, qu'en pensez-vous ?
    C'est du détail. Et pas seulement ici. Dans tous les gros projets la partie "saisie/affichage" est mise à part afin de pouvoir la changer facilement (programmation MVC). Donc commence par écrire un algo qui fonctionne, une fois qu'il sera écrit tu pourras remplacer la partie "plus que 3 essais, plus que 2 essais, etc" par ton dessin.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 676
    Par défaut
    Citation Envoyé par Stéphane_MAN Voir le message
    Je pensais à utiliser une boucle for ou while afin de jouer jusqu'à 6 reprises, ensuite j'aurais aimé ajouter un système boléen afin d'indiquer au joueur si le mot est bon ou pas, pour le dessin du pendu j'ai pu récupérer ce code sur internet, qu'en pensez-vous ?
    Programmer est une pratique où on s'entraîne à faire la gymnastique suivante: on essaie une idée qui semble correcte, si ça ne marche pas, on réfléchit au pourquoi et on corrige.

    Python va peut être râler (ce qui permet de se familiariser avec les messages d'erreur) mais il est doué d'une grande patience: vous pouvez essayer plein de trucs sans le fatiguer.

    Après, si vous avez des soucis, vous pouvez toujours demander de l'aide en montrant ce que vous avez essayé et en expliquant ce que vous ne comprenez pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Batch] Remplacer espaces par underscores dans noms de fichiers
    Par Ysae68 dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 28/08/2017, 16h56
  2. [Toutes versions] Remplacer nombres par variables à partir d'une macro enregistrée
    Par FrancisZheng dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/01/2016, 08h32
  3. [WD15] Remplacer caractère par lui même mais en gras
    Par Jeje9 dans le forum WinDev
    Réponses: 2
    Dernier message: 05/07/2012, 15h52
  4. [AC-2010] Remplacer caractères par d'autres dans une chaîne
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/05/2011, 11h03
  5. remplacer caractère par un autre
    Par watchabongo dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 23/01/2008, 10h21

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