Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un débutant qui a besoin d'un petit coup de pouce

    6 juillet 2013 à 14:50:02

    Bonjour, 

    Je commence tout juste la programmation en python et je suis rendu au chapitre suivant : la boucle for.

    J'ai décide avec le peu de connaissance que j'avais jusque la de créer un mini programme pour m’entraîner et déjà bien maîtriser les bases. 

    Mais je n'arrive malheureusement pas a faire fonctionner mon programme, si vous pouviez m'aider se serait sympas voici le projet :

    Suite au explication sur les boucles je décide de créer un programme qui donne les voyelles, consones a l'utilisateurs pour un mot rentré au préalable. 

    Sans plus attendre le code :

    #mini programme d'entraînement
    
    print("Programme d'apprentissage des voyelles et des consones")
    print("Choix 1 : Liste des voyelles")
    print("Choix 2 : Liste des consones")
    print("Choix 3 : Consone et voyelle dans un mot")
    
    #demande a l'utilisateur de faire un choix
        
    while choix != 1 or choix != 2 or choix != 3: #crée une boucle tant que la condition n'est pas rempli
        print("Merci de faire un choix (1 ou 2)")
        choix = input("Votre choix : ") #l'utilisateur entre son choix
    
    if choix == 1:
        print("La liste des voyelles Française est la suivante")
        voyelle = ("AEIOUYaeiouy")
    for lettre in voyelle:
        print(lettre) #pour afficher les voyelles les unes en dessous des autres
    
    elif choix == 2:
        print("La liste des consones Française est la suivante")
        consone = ("BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz")
    for lettre in consone:
        print(lettre) #même chose pour les consones
    
    elif choix == 3:
        mot = input("Ecrire un mot : ")#l'utilisateur rentre un mot
    for lettre in mot:                 #le mot est ensuite décortiqué
        if lettre in "AEIOUYaeiouy":   #et il affiche les consones et voyelles
            print("voyelle")
        elif lettre in "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz":
            print("consone")
        else:
            print("inconnu")
            
    print("rappel du mot : ", mot)
    
    else:
        exit()  #je ne suis pas sur que cette commande serve bien a quitter le programme
                #si quelqu'un peux me le confirmer
    
    
    
    
    


    Merci de vos aides futur.

    Cordialement.

    • Partager sur Facebook
    • Partager sur Twitter
    "Mess with the best die like the rest" - Hackers (1995).
      6 juillet 2013 à 15:11:10

      Salut,

      * La commande while vérifiera la valeur de la variable choix. Si cette dernière n'existe pas une erreur sera relever. Du coup il faut l'initialiser avant le début du while

      choix = 0


      * Tes block de codes sont mal indentés. Il faut que les for soit à l'intérieur des différent if / elif. C'est l'indentation qui délimite les block de code en python, il faut donc qu'il ai un niveau d'indentation supplémentaire.

      elif choix == 3:
          mot = input("Ecrire un mot : ")mot
          for lettre in mot:                 
              if lettre in "AEIOUYaeiouy":   
                  print("voyelle")
               elif lettre in "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz":
                  print("consone")
               else:
                  print("inconnu")

      * exit ne sert à rien dans ce context. Le programme se terminera de lui même une fois arriver à la fin du fichier. Par contre tu pourrais faire exit(1) en cas d'un mauvais choix au début par exemple. Ça te permettra d'interrompre le programme prématurément. exit prends aussi comme paramètres un chiffre qui sera le code de retour du programme.

      -
      Edité par Jaes 6 juillet 2013 à 15:11:26

      • Partager sur Facebook
      • Partager sur Twitter
        6 juillet 2013 à 15:39:10

        J'ai apporté quelques modifications suite a ce que tu ma dit : 

        #mini programme d'entraînement
        
        print("Programme d'apprentissage des voyelles et des consones")
        print("Choix 1 : Liste des voyelles")
        print("Choix 2 : Liste des consones")
        print("Choix 3 : Consone et voyelle dans un mot")
        
        #demande a l'utilisateur de faire un choix
        
        choix = 0
            
        while choix != 1 or choix != 2 or choix != 3: #crée une boucle tant que la condition n'est pas rempli
            print("Merci de faire un choix (1 ou 2)")
            choix = input("Votre choix : ") #l'utilisateur entre son choix
        
        if choix == 1:
                print("La liste des voyelles Française est la suivante")
            voyelle = ("AEIOUYaeiouy")
            for lettre in voyelle:
                print(lettre) #pour afficher les voyelles les unes en dessous des autres
        
        elif choix == 2:
                print("La liste des consones Française est la suivante")
            consone = ("BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz")
            for lettre in consone:
                print(lettre) #même chose pour les consones
        
        elif choix == 3:
            mot = input("Ecrire un mot : ", mot) #l'utilisateur rentre un mot
            for lettre in mot:                 #le mot est ensuite décortiqué
            if lettre in "AEIOUYaeiouy":       #et il affiche les consones et voyelles
                    print("voyelle")
            elif lettre in "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz":
                    print("consone")
            else:
                    print("inconnu")
                
        print("rappel du mot : ", mot)
        
        else:
            exit(1) 
        
        
        

        J'ai surement du louper quelque chose ...

        "* Tes block de codes sont mal indentés. Il faut que les for soit à l'intérieur des différent if / elif. C'est l'indentation qui délimite les block de code en python, il faut donc qu'il ai un niveau d'indentation supplémentaire."

        Je pense aussi que mon problème viens de l'indentation mais j'ai du mal a comprendre.

        Quand j'écrit ma fonction for je dois la terminer avant de passer au autres choix?

        -
        Edité par Ghøst 6 juillet 2013 à 15:41:20

        • Partager sur Facebook
        • Partager sur Twitter
        "Mess with the best die like the rest" - Hackers (1995).
          6 juillet 2013 à 15:53:02

          C'est mieux au niveau de l'indentation sauf pour le dernier for. Son contenu n'est pas au bon niveau d'indentation.

          Pour sortir d'un block de code python il suffit de revenir d'un block en arrière. Si tu écris n'importe quoi à un niveau d'indentation inférieur, python considèrera que les blocks de code précédent sont finis (c'est implicite).

          if <condition>:
              # début du block de code
              <code>
              for <itération>:
                  # début d'un nouveau block de code
                  <code>
              <code> # cette ligne met implicitement fin au for précédent puis qu'elle est à un niveau d'indentation inférieur au for
          
          if <condition>:
              # début du block de code
              <code>
              for <itération>:
                  # début d'un nouveau block de code
                  <code>
          <code> # cette ligne met implicitement fin au for ET au if  précédent puis qu'elle est à un niveau d'indentation inférieur ou égale aux deux instructions



          Le comportement de input n'est pas statisfaisant non plus je te conseil d'utiliser

          choix = int(raw_input()) 

          à la place.

          • Partager sur Facebook
          • Partager sur Twitter
            6 juillet 2013 à 16:00:39

            choix = 0
                
            while choix != 1 or choix != 2 or choix != 3: #crée une boucle tant que la condition n'est pas rempli
                print("Merci de faire un choix (1 ou 2)")
                choix = choix = int(raw_input())
            if choix == 1:
                    print("La liste des voyelles Française est la suivante")
                    voyelle = ("AEIOUYaeiouy")
                for lettre in voyelle:
                    print(lettre)

            C'est mieu comme sa?

            Merci pour ton aide je sais que sa doit être vraiment nul comme problème mais j'ai besoin d'une aide extérieur sur mon problème.

            • Partager sur Facebook
            • Partager sur Twitter
            "Mess with the best die like the rest" - Hackers (1995).
              6 juillet 2013 à 16:20:02

              Bah après c'est toi qui voit si ça marche quand tu l'exécutes hein ^^. Il n'y a pas de meilleurs façon de vérifier si c'est mieux.

              Ça pour le coup, c'est mieux dans ce sens là :

              if choix == 1:
                  print("La liste des voyelles Française est la suivante")
                  voyelle = ("AEIOUYaeiouy")
                  for lettre in voyelle:
                       print(lettre)

              Ton for doit rester dans le block if du dessus. En le remettant à un niveau d'indentation 0 (sans indentation quoi) tu le fais sortir du if et il sera exécuté que le if ait été vérifié ou non. Par ailleurs, ça casse l'enchaînement des blocs if / elif ce qui devrait te renvoyer une SyntaxError.

              Un autre truc que je viens de voir c'est que la condition de ton while ne marchera jamais (comprendre : la condition sera toujours vraie et tu ne sortiras jamais de ton while). Un truc qui devrait mieux marcher :

              while choix != 1 and choix != 2 and choix != 3:

              Et la même chose mais en plus lisible :

              while choix not in (1, 2, 3):

              -
              Edité par Jaes 6 juillet 2013 à 16:21:27

              • Partager sur Facebook
              • Partager sur Twitter

              Un débutant qui a besoin d'un petit coup de pouce

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown