Partage
  • Partager sur Facebook
  • Partager sur Twitter

Creer une liste a partir d'un string

Sujet résolu
    17 décembre 2014 à 20:19:32

    Bonjour, j'apprend le langage python au lycée, on nous a donner une exercice dans lequel il s'agit de convertir des nombres shadocks en base 10. Les shadocks connaissent les nombres 0,1,2 et 3 qu'ils lisent respectivement  GA, BU, ZO et MEU

    J'essaye d'abord de convertir le nombre entré en liste mais je n'arrive pas a recuperer 2 lettres par 2 lettres pour former la liste :

    pour ZOZOMEU par exemple je voudrais avoir [ZO,ZO,ME], or je n'arrive qu'a obtenir [Z,O,Z,O,M,E,U]

    Merci de votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
    Sylvia
      17 décembre 2014 à 23:39:17

      Salut

      J'espère que c'est ce que tu voulais, si c'est pas le cas, tu as une partie de la solution :)

      #!usr/bin/env python
      #-*- coding:utf-8 -*-
      #
      
      
      def test():
      	texte = list('ABCDEFGHI')
      	liste = []
      	longueur = len(texte)
      
      	n = 0
      
      	while n < longueur:
      		liste.append(''.join(texte[n:n+2]))
      		n += 2	
      
      	return liste
      
      
      
      if __name__ == '__main__':
      
      	print test()
      ['AB', 'CD', 'EF', 'GH', 'I']
      [Finished in 0.1s]

      -
      Edité par InhumanRampage 17 décembre 2014 à 23:39:50

      • Partager sur Facebook
      • Partager sur Twitter
        18 décembre 2014 à 0:36:18

        Je pense que tu vas te retrouver confronté à un autre problème puisque «MEU» fait justement 3 caractères et non 2. Mais pour ta demande présente, le code suivant devrait convenir:

        [''.join(e) for e in zip(*[iter('ZOZOMEU')] * 2)]



        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          18 décembre 2014 à 11:14:57

          C'est clair que le MEU est un problème, il en faut bien, sinon l'exercice serait bien trop simple...

          Voici ma solution

          SHADOCKS = [
                      'GA',
                      'BU',
                      'ZO',
                      'MEU'
                      ]
          
          TEST = 'MEUZOMEU'
          
          def getIndex(myString, keyShadock):
              length = len(keyShadock)
              index = myString.find(keyShadock)
              n = 1
              
              result = []
              
              while index != -1:
                  if n >= 2:
                      index += index + length
                  result.append(index)
                  myString = myString[index+length:]
                  index = myString.find(keyShadock)
                  n += 1
              
              return result
          
          def shaToDec(myString):
              res = [None for i in range(len(myString) * 3)]
              for sha in SHADOCKS:
                  index = getIndex(myString, sha)
                  if index:
                      for i in index:
                          res[i] = str(SHADOCKS.index(sha))
              res = [n for n in res if n != None]
              return ''.join(res)
          
          print(shaToDec(TEST))

          Je l'ai fais en 5 minutes, il y a sans doute des choses améliorables, mais il fonctionne.

          • Partager sur Facebook
          • Partager sur Twitter
            18 décembre 2014 à 11:28:31

            S= 'ZOZOMEU'
            index = 0
            
            L=[]
            
            while(True):   
            
                if S.startswith('ZO', index):
            
                    L.append('ZO')
            
                    index+=2      
            
                elif S.startswith('MEU', index):
            
                    L.append('MEU')
            
                    index+=3
            
                else:
            
                    break   

            -
            Edité par ast2 18 décembre 2014 à 11:41:57

            • Partager sur Facebook
            • Partager sur Twitter
              18 décembre 2014 à 19:00:29

              C'est super merci beaucoup pour toutes ces reponses ! J'aurais juste une derniere question :

              if __name__ == '__main__':
              ceci sert a executer la fonction c'est bien ça ? Pourquoi ne peut-on  donc pas tout simplement mettre test() ?
              • Partager sur Facebook
              • Partager sur Twitter
              Sylvia
              Anonyme
                18 décembre 2014 à 19:59:05

                ceci sert a executer la fonction c'est bien ça ? Pourquoi ne peut-on donc pas tout simplement mettre test() ?

                Le __name__ est une propriété du module python que tu appelles. Lorsque tu exécutes directement un script Python, son __name__ vaut "main", d'où cette condition qui nous dit quoi faire lorsqu'on exécute le script.

                Mais suppose que tu veux importer dans un autre script une fonction de ce module. Il ne faudrait pas que test soit appelé lors de l'import, ce que permet d'éviter l'utilisation de cette condition.

                • Partager sur Facebook
                • Partager sur Twitter
                  18 décembre 2014 à 20:22:48

                  D'accord, merci beaucoup pour tous ces renseignements !
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Sylvia

                  Creer une liste a partir d'un string

                  × 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