Partage
  • Partager sur Facebook
  • Partager sur Twitter

palindrome

Sujet résolu
    27 décembre 2015 à 19:08:41

    Bonjour, je début la formation avec le language python et je dois faire un programme permettant de determiner si un mot est un palindrome ou non,  c'est à dire s'il peut être lu dans les deux sens. 

    voila mon début de programme 

    def palindrome(chaine):
        debut=chaine[0]
        fin=chaine[len(chaine)-1]
        for i in range (fin):
            print(chaine[i])
    
            if chaine[i]== chaine[fin-i]:
               print ("true")
            else:
                print ("false")
    
    
    
    if palindrome(raw_input()):
        print "Palindrome."
    else:
        print "Pas palindrome."



    merci de votre aide,

    Sophie B 

    -
    Edité par SB9 27 décembre 2015 à 19:34:02

    • Partager sur Facebook
    • Partager sur Twitter
      27 décembre 2015 à 20:06:25

      Bonjour

      • à quoi sert debut (ligne 2) ?
      • for i in range(fin) (ligne 4) n'a pas de sens (teste de façon interactive) et la ligne 7 encore moins (une chaine moins un entier)
      • afficher (print) les chaines "true" ou "false" n'est pas retourner un booléen (attendu à la ligne 14)

      -
      Edité par plxyz 27 décembre 2015 à 20:06:57

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        27 décembre 2015 à 21:48:07

        des chaînes se comparent plus facilement en python,

        def palindrome(chaine):
            
            # Construire la chaine inverse
            inv_chaine = ''
            # à compléter
                inv_chaine += chaine[i]
            
            if chaine == inv_chaine: # comparaison de chaine et chaine inverse
                return True
            
            return False
        
        print(palindrome('...')) # test de la fonction



        • Partager sur Facebook
        • Partager sur Twitter
          27 décembre 2015 à 22:25:45

          Quitte à coller à Python, autant y aller franco pour construire la chaine inverse :

          >>> def palindrome(chaine):
          ...     return chaine == chaine[::-1]
          ...
          >>>
          >>> palindrome('laval')
          True
          >>> palindrome('abc')
          False


          On peut même introduire la demie-taille de la chaine int(len(chaine)/2) pour ne pas faire de comparaisons inutiles.

          ps: le code du PO est ambigu. Python 2 ou Python 3 ? Pour ma demie-taille, cela a son importance.

          -
          Edité par plxyz 27 décembre 2015 à 22:26:11

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            28 décembre 2015 à 9:37:32

            plxyz a écrit:

            Quitte à coller à Python, autant y aller franco pour construire la chaine inverse :

            Encore une fois python ici n'est pas l'intérêt, je pense que c'est l'algorithme, et dans ce cas, le sclicing n'exprime pas comment résoudre le problème du palindrome clairement...

            • Partager sur Facebook
            • Partager sur Twitter
              28 décembre 2015 à 19:07:44

              merci pour vos réponses. Il se trouve que d'après l'exercice demandé, je doit utiliser une boucle dans ce programme, donc je ne peux pas utiliser inv_Chaine meme si cette solution parait beaucoup plus simple.
              plyx: pour le i in range (fin) faut il donc que je mette " i in range chaine[len(chaine)-1]" ?
              je suis allée voir ce qu'est un booléen, mais je ne vois pas comment cela s'intègre dans un programme
              Merci de votre aide,
              Sophie B 

              -
              Edité par SB9 28 décembre 2015 à 19:12:06

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                29 décembre 2015 à 0:47:52

                SB9 a écrit:

                merci pour vos réponses. Il se trouve que d'après l'exercice demandé, je doit utiliser une boucle dans ce programme, donc je ne peux pas utiliser inv_Chaine meme si cette solution parait beaucoup plus simple.

                Ça tombe bien, ce qui est à compléter dans le code doit être avec une boucle ;)

                -
                Edité par Anonyme 29 décembre 2015 à 0:48:23

                • Partager sur Facebook
                • Partager sur Twitter
                  29 décembre 2015 à 22:56:19

                  ok super. J'ai essayé de construire la chaine inverse en reprenant ce que j'avais fait au début, mais je pense que ça ne doit pas marcher. 

                  def palindrome(chaine):
                  
                      # Construire la chaine inverse
                      inv_chaine = ''
                      for i in range chaine[len(chaine)-1]
                          if chaine[i]== chaine[fin-i] 

                  et après je ne sais pas trop comment conclure... 

                  Merci, 

                  SB

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    30 décembre 2015 à 9:32:57

                    SB9 a écrit:

                    for i in range chaine[len(chaine)-1] if chaine[i]== chaine[fin-i]

                    Pourtant au début ton utilisation de range était correcte, tu n'as sans doute même pas testé ton code.

                    Il faut dire à range que tu pars de la fin, mais que tu vas jusqu'au début de la chaine par incrémentation de -1

                    Quelques explication sur range ICI...

                    def palindrome(chaine):
                         
                        # Construire la chaine inverse
                        inv_chaine = ''
                        for i in range(len(chaine)-1, -1, -1):
                            inv_chaine += chaine[i]
                         
                        if chaine == inv_chaine: # comparaison de chaine et chaine inverse
                            return True
                         
                        return False
                     
                    print(palindrome('...')) # test de la fonction





                    -
                    Edité par Anonyme 30 décembre 2015 à 9:35:52

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 décembre 2015 à 17:15:26

                      Bonsoir, 

                      merci pour votre réponse,

                      dans le programme,  vous mettez qu'il faut aller au début de la chaine par incrémentation de -1. Je me demandais pourquoi vous en aviez mis 3. J'ai également cherché ce que voulais dire += et je n'ai pas trouvé.. 

                      chaine= raw_input()
                      
                      def palindrome(chaine):
                      
                          # Construire la chaine inverse
                          inv_chaine =''
                          for i in range(len(chaine)-1, -1, -1):
                              inv_chaine += chaine[i]
                      
                          if chaine == inv_chaine: # comparaison de chaine et chaine inverse
                              return True
                      
                          return False
                      
                      print(palindrome('...')) # test de la fonction

                      Merci,

                      SB

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 décembre 2015 à 17:25:28

                        a +=5 est equivalent a              a=a+5

                        Ensuite a ta question : Je me demandais pourquoi vous en aviez mis 3.J'ai pas compris ta question ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                        http://sinclair.recreatedzxspectrum.com/index.php
                          30 décembre 2015 à 17:27:10

                          range([start], stop[, step])

                          • start: Starting number of the sequence.
                          • stop: Generate numbers up to, but not including this number.
                          • step: Difference between each number in the sequence.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          http://sinclair.recreatedzxspectrum.com/index.php
                            30 décembre 2015 à 17:45:43

                            Ahh d accord merci!! 

                            mais du coup je ne comprend pas ce que fait la ligne inv_chaine +=chaine[i]

                            merci de vos réponses, 

                            SB

                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 décembre 2015 à 18:48:58

                              inv_chaine <----- inv_chaine + chaine[i]
                              • Partager sur Facebook
                              • Partager sur Twitter
                              http://sinclair.recreatedzxspectrum.com/index.php
                                30 décembre 2015 à 20:43:43

                                en fait je ne comprends pas ce que fait concrètement cette ligne. 

                                celle d'avant fait: pour i allant de la derniere lettre a la première, 

                                merci, 

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  30 décembre 2015 à 21:02:43

                                  On crée simplement la chaîne inverse en parcourant la chaîne de son indice final à celui de départ.

                                  chaine = "bonjour"
                                  for i in range(len(chaine)-1, -1, -1):
                                      print(chaine[i])

                                  Fais les tests toi même, tu comprendras mieux...

                                  Concaténation en python

                                  -
                                  Edité par Anonyme 30 décembre 2015 à 21:05:14

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    31 décembre 2015 à 11:58:57

                                    merci pour l'exemple, 

                                    quand j'essaye d’exécuter le programme ci-dessous, python me marque "invalid syntax (<module 3>, ligne 20)"

                                    chaine= raw_input()
                                    
                                    def palindrome(chaine):
                                    
                                        # Construire la chaine inverse
                                        inv_chaine =''
                                        for i in range(len(chaine)-1, -1, -1):
                                            inv_chaine += chaine[i]
                                    
                                        if chaine == inv_chaine: # comparaison de chaine et chaine inverse
                                            return True
                                    
                                        return False
                                    
                                    print(palindrome('...') # test de la fonction
                                    



                                    merci pour votre patience, 

                                    SB

                                    -
                                    Edité par SB9 31 décembre 2015 à 12:06:36

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      31 décembre 2015 à 12:12:57

                                      lorsque j'exécute ce programme, je n'ai plus d'erreur mais il affiche toujours True 

                                      chaine=raw_input()
                                      
                                      def palindrome(chaine):
                                      
                                          # Construire la chaine inverse
                                          inv_chaine =''
                                          for i in range(len(chaine)-1, -1, -1):
                                              inv_chaine += chaine[i]
                                              
                                      
                                          if chaine == inv_chaine: # comparaison de chaine et chaine inverse
                                              return True
                                      
                                          return False
                                      
                                      a=palindrome('')
                                      print(a)

                                      faut il plutôt mettre le chaine=raw_input() au début ou avant le "a=palindrome('') ? 

                                      -
                                      Edité par SB9 31 décembre 2015 à 12:13:35

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        31 décembre 2015 à 12:31:55

                                        SB9 a écrit:

                                        lorsque j'exécute ce programme, je n'ai plus d'erreur mais il affiche toujours True 


                                        oui c'est normal regarde l'appel de ta fonction :

                                        a=palindrome('')

                                        dans ta fonction palindrome tu lui donnes comme données ''

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        http://sinclair.recreatedzxspectrum.com/index.php
                                          31 décembre 2015 à 12:34:44

                                          SB9 a écrit:

                                          faut il plutôt mettre le chaine=raw_input() au début ou avant le "a=palindrome('') ? 

                                          question de code clair...... En principe tu definis tout ce que tu as besoin en debut de ton preogramme tes variables, tes fonctions, tes bibliotheques que tu as besoin.....

                                          puis apres tu mets toutes tes instructions de ton programme apres.... on s'y retrouve mieux apres



                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          http://sinclair.recreatedzxspectrum.com/index.php
                                            31 décembre 2015 à 12:35:55

                                            pour en revenir a ton probleme, ta fonction  palindrome devrait avoir chaine comme argument ....
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            http://sinclair.recreatedzxspectrum.com/index.php
                                              31 décembre 2015 à 12:36:29

                                              ah oui d'accord ^^ 

                                              j'ai essayé avec ce programme et normalement ça marche ! 

                                              def palindrome(chaine):
                                              
                                                  # Construire la chaine inverse
                                                  inv_chaine =''
                                                  for i in range(len(chaine)-1, -1, -1):
                                                      inv_chaine += chaine[i]
                                                      print(chaine)
                                              
                                                  if chaine == inv_chaine: # comparaison de chaine et chaine inverse
                                                      return True
                                              
                                                  return False
                                              
                                              chaine=raw_input()
                                              a=palindrome(chaine)
                                              print(a)

                                              merci !!

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                31 décembre 2015 à 12:38:09

                                                Bon aprentissage !

                                                mets ton sujet en resolu si tu n'as plus de question

                                                @+

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                http://sinclair.recreatedzxspectrum.com/index.php

                                                palindrome

                                                × 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