Partage
  • Partager sur Facebook
  • Partager sur Twitter

Disparition de lettre dans une chaine

Sujet résolu
    25 mars 2015 à 8:55:35

    voici un programme qui doit inverser selon une règle bien précise les mots d'un texte

    je rentre cela: "je suis un astronaute anglais"

    il doit ressortir cela : "je sius un atuanortse aialgns"

    mais il sort la même chose cependant des lettres disparaissent, et je ne sait absolument pas pourquoi ! :(

    #========================= Variables =========================
    # [Texte_A_Convertir]       texte de base (input)
    # [Tetxe_A_Convertir_Liste] stokage dans une liste
    # [Mot_Provisoire]          stokage du mot a convertir
    # [Initiale]                initiale du mot provisoire
    # [Finale]                  lettre finale du mot provisoire
    # [Interieur_Mot]           stokage de l'interieur du mot
    # [Texte_Converti]          rendu final
    # [c]                       controle boucle for
    #=============================================================
    Texte_A_Convertir=input("Entrez un texte")
    Mot_Provisoire=""
    Initiale=""
    Finale=""
    Texte_Converti=""
    Texte_A_Convertir_Liste=Texte_A_Convertir.split() #transforme le texte en liste de mots
    for c in range(len(Texte_A_Convertir_Liste)):
        Mot_Provisoire=Texte_A_Convertir_Liste[c] #traitement d'un mot a part
        Initiale=Mot_Provisoire[0] #séparation de l'initiale...
        Finale=Mot_Provisoire[(len(Mot_Provisoire))-1] #...et de la finale
        Mot_Provisoire=Mot_Provisoire.replace(Mot_Provisoire[(len(Mot_Provisoire))-1],'') #enlever initiale...
        Mot_Provisoire=Mot_Provisoire.replace(Mot_Provisoire[0],'') #...et lettre finale
        Interieur_Mot=Mot_Provisoire #stokage du mot etêté
        Interieur_Mot="".join(reversed(Interieur_Mot)) #inversement du mot
        Mot_Converti=Initiale+Interieur_Mot+Finale+" " #assemblage des composants et rajout d'un espace apres
        Texte_Converti=Texte_Converti+Mot_Converti #assemblage du texte
    print(Texte_Converti) #affichage du résultat


    merci aux bonnes âmes qui auront une solution :)

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      25 mars 2015 à 9:43:51

      Il me semble que ton algorithme est un peu complexe, mais correct, enfin presque, je pense que c'est une erreur d'indice...

      J'aurais créer en essayant d'avoir le même mode de pensée que toi, une fonction juste pour un mot

      def reverse(s):
          
          length = len(s)
          
          if length > 2:
              initiale = s[0]
              finale = s[length-1]
              word = ''.join(reversed(list(s[1:length-1])))
              res = initiale + word + finale
              
          else:
              res = s
              
          return res
      
      print(reverse('un'))
      print(reverse('astronaute'))
      print(reverse('anglais'))
      un
      atuanortse
      aialgns
      



      • Partager sur Facebook
      • Partager sur Twitter
        25 mars 2015 à 10:16:17

        Python te permet justement d'accéder aux éléments d'une liste grâce aux slices. Alors quand on veut sélectionner tous les éléments sauf le premier et le dernier, on ne doit pas s'embêter à d'abord trouver la longueur de la liste. On écrit simplement

        mot = 'astronaute'
        print(mot[1:-1])
        
        Le slice est défini par les indices [ <début inclus> : <fin non inclus>] Si on veut maintenant ajouter la première et la dernière lettre
        print(mot[0] + mot[1:-1] + mot[-1])
        
        Et on peut avoir un pas dans le slice
        print(mot[::2]) #  [ <début inclus> : <fin non inclus> : <pas>]
        
        Si le pas est négatif, on va commencer à <début>, reculer de <pas> et s'arrêter à <fin>. Donc le début doit être un élément vers la fin de la liste, et la fin un élément vers le début ... oui ça prête à confusion! Mais comme on va en sens inverse, cette fois début est non inclus et fin est inclus. Ainsi pour inverser les lettres entre la deuxième lettre et l'avant dernière lettre on va débuter par l'indice -1 qui étant non inclus commencera non pas à la dernière lettre mais à l'avant dernière, et on fini à l'indice 1 inclus; l'indice 0 étant la première lettre.
        print(mot[-1:0:-1])
        
        Et en ajoutant la première et dernière lettre
        print(mot[0] + mot[-1:0:-1] + mot[-1])
        
        </pre>

        Une autre chose à dire concernant les boucles for, en Python tu ne devrais jamais devoir écrire

        Texte_A_Convertir_Liste = "une liste de mots".split()
        for c in range(len(Texte_A_Convertir_Liste)): # Beûûrk! Guido nous a donné Python pour éviter ça. 
        
        print(Texte_A_Convertir_Liste[c])
        
        </pre> Tu dois itérer directement sur la liste, et tu manipules les éléments fournis par la boucle
        texte_a_convertir_liste = "une liste de mots".split()
        for mot in texte_a_convertir_liste:
        
        print(mot)
        
        </pre> Et si pour une raison ou une autre, tu as besoin de connaître l'indice de l'éléments, tu écris
        texte_a_convertir_liste = "une liste de mots".split()
        for indice, mot in enumerate(texte_a_convertir_liste):
        
        print("Le mot {1} a comme indice {0}".format(indice, mot))
        
        </pre>

        -
        Edité par Dan737 25 mars 2015 à 10:24:41

        • Partager sur Facebook
        • Partager sur Twitter

        Disparition de lettre dans une chaine

        × 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