Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le plus long mot

    23 février 2016 à 21:31:54

    some_string="Maître Corbeau, sur un arbre perché, tenait en son bec un fromage."                               
    my_list=some_string.split()
    print(my_list)
    print(len(my_list))
    for word in my_list:
        print (word, '=', len(word))
    
    ['Maître', 'Corbeau,', 'sur', 'un', 'arbre', 'perché,', 'tenait', 'en', 'son', 'bec', 'un', 'fromage.']
    12
    Maître = 6
    Corbeau, = 8
    sur = 3
    un = 2
    arbre = 5
    perché, = 7
    tenait = 6
    en = 2
    son = 3
    bec = 3
    un = 2
    fromage. = 8



    • Partager sur Facebook
    • Partager sur Twitter
      23 février 2016 à 21:38:16

      Mon message n'a pas été envoyé, seul le code est parti tout seul! Voici mon message:

      Bonjour, étant donné un texte, je dois trouver le mot le plus long, et s'il y en a plusieurs, ma fonction doit retourner le dernier. J'ai fait un exemple concret où les deux mots les plus longs sont "corbeau" et "fromage" qui ont 8 lettres. Mais comment indiquer ceci dans le cas général, en utilisant "len(word" ? Et ensuite comment indiquer le dernier, à partir de son index sans doute? Merci pour vos suggestions. 

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        23 février 2016 à 22:35:59

        import string
        
        some_string="Maître Corbeau, sur un arbre perché, tenait en son bec un fromage."
        
        # vire la pontuation
        some_string = ''.join   (( 
                                char for char in some_string 
                                if char not in string.punctuation
                                ))
        
        maxi = 0
        wordMax = ''
        for word in some_string.split():
            if len(word) >= maxi:
                wordMax = word
                maxi = len(word)
        
        print(wordMax)
        • Partager sur Facebook
        • Partager sur Twitter
          23 février 2016 à 23:42:24

          Merci, oldProgrammer, pour cette réponse si rapide et impeccable.
          • Partager sur Facebook
          • Partager sur Twitter
            24 février 2016 à 11:19:33

            string="Maître Corbeau, sur un arbre perché, tenait en son bec un fromage."
            
            tmp = ""
            for x in string:
                if x.isalpha() or x==" ":
                    tmp+=x      #on ne garde que les lettres et espaces
            
            #on inverse la liste et on cherche le max en fonction de la longueur
            print(max(tmp.split(' ')[::-1], key=len))

            Une façon un peu plus pythonesque :)

            • Partager sur Facebook
            • Partager sur Twitter
              24 février 2016 à 14:19:48

              lewisbm a écrit:

              Une façon un peu plus pythonesque :)

              Bof, ta construction de chaîne ne l'est pas vraiment.

              Je proposerais celle-ci, pas tout à fait équivalente, mais qui éviterait de couper un mot composé :

              import string
              
              some_string = "Maître Corbeau, sur un arbre perché, tenait en son bec un fromage."                              
              my_list = [word.strip(string.punctuation) for word in some_string.split()]
              

              Ou encore, pour en revenir au comportement initial :

              import string
              
              some_string = "Maître Corbeau, sur un arbre perché, tenait en son bec un fromage."                              
              some_string = some_string.translate(str.maketrans({p: '' for p in string.punctuation}))
              my_list = some_string.split()
              

              PS: il y a une paire de parenthèses facultatives dans ton exemple, oldProgrammer.

              • Partager sur Facebook
              • Partager sur Twitter
                24 février 2016 à 16:50:03

                Anpiet a écrit:

                Merci, oldProgrammer, pour cette réponse si rapide et impeccable.

                Ah bon ? Parce que tu as compris le code qu'il t'a fourni ?? Tu sais déjà ce que sont les générateurs ? Franchement, je me demande ce que tu cherches. Juste à trouver les réponses aux questions qui te sont posées ou à comprendre comment proposer par toi-même avec les notions que tu as vues une solution.

                • Partager sur Facebook
                • Partager sur Twitter
                  24 février 2016 à 17:19:10

                  Et pour me joindre à mes camarades, voici ma fonction. :)

                  import string
                  
                  def longest_word(sentence):
                      """
                      Returns the last longest word found in the sentence.
                      Punctuation is ignored.
                      """
                      words = [word.strip(string.punctuation) for word in sentence.split()]
                  
                      longest_word_length = max(len(word) for word in words)
                      last_longest_word = [word for word in words if len(word)==longest_word_length][-1]
                      return last_longest_word
                  
                  if __name__ == '__main__':
                      some_string = "Maître Corbeau, sur un arbre perché, tenait en son bec un fromage."
                      print(longest_word(some_string))
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    24 février 2016 à 18:21:41

                    Une façon un peu plus pythonesque

                    Humm... ok, allez ! dis moi ce qui n'est pas pythonesque dans mon code.

                    Par contre le fait d'ajouter plusieurs fonction sur une seule ligne et qui puis est sur la ligne permettant l'affichage du résultat, je trouve ça juste limite.

                    print(max(tmp.split(' ')[::-1], key=len))

                    Voit le 5ème et 7ème commandement du zen de python, tu comprendras ce qui est pythonique ou en tout cas aura un aperçu de la philosophie du langage.

                    PS: il y a une paire de parenthèses facultatives dans ton exemple, oldProgrammer.

                    Oui pour le langage, mais pour la compréhension, on voit la création d'un générateur et l'utilisation d'une fonction... C'est bien de le visualiser, malgré qu'on sait qu'un générateur est un itérateur, l'itérateur n'est pas forcément un générateur.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 février 2016 à 18:46:25

                      oldProgrammer a écrit:

                      Humm... ok, allez ! dis moi ce qui n'est pas pythonesque dans mon code.

                      • Utiliser une boucle for pour répondre à un problème solvable par max (sans aller jusqu'au code affreux de lewisbm : max(reversed(my_list), key=len)) ;
                      • camelCase dans le nom de certaines variables (pas recommandé en Python, et pas cohérent avec le reste de ton code) ;
                      • indentation douteuse derrière join.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        24 février 2016 à 19:39:11

                        Utiliser une boucle for pour répondre à un problème solvable par max (sans aller jusqu'au code affreux de lewisbm : max(reversed(my_list), key=len)) ;

                        C'est pas comme si je ne connaissais pas max, peut-être ai-je voulu présenter le côté algorithmique pour un débutant, non? (regarde son topic d'origine)

                        camelCase dans le nom de certaines variables (pas recommandé en Python, et pas cohérent avec le reste de ton code) ;

                        Je pensais que c'était des mixedCase que j'utilisais ? Et même si ce n'est pas recommandé, beaucoup pense pas le même avis... Ça se discute et l'underscore personnellement je trouve ça très moche !

                        indentation douteuse derrière join.

                        Oui, possible, si on cherche la petite bête, pourtant j'ai essayé de faire en sorte que mes parenthèses soient symétriquement placées, faut croire que tout le monde n'apprécie pas ;)

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 février 2016 à 19:48:34

                          oldProgrammer a écrit:

                          C'est pas comme si je ne connaissais pas max, peut-être ai-je voulu présenter le côté algorithmique pour un débutant, non? (regarde son topic d'origine)

                          Si, j'ai bien lu, et je trouve ça bien de poster un code où l'algorithme est clair. Maintenant, tu demandes en quoi ton code n'est pas pythonique, je te réponds.

                          oldProgrammer a écrit:

                          Je pensais que c'était des mixedCase que j'utilisais ? Et même si ce n'est pas recommandé, beaucoup pense pas le même avis... Ça se discute et l'underscore personnellement je trouve ça très moche !

                          mixedCase n'est qu'un synonyme parmi d'autres. On parle de code pythonique, il s'agit donc d'appliquer les recommandations du langage.

                          oldProgrammer a écrit:

                          Oui, possible, si on cherche la petite bête, pourtant j'ai essayé de faire en sorte que mes parenthèses soient symétriquement placées, faut croire que tout le monde n'apprécie pas ;)

                          Ce qui ne nécessitait pas d'espaces entre join et la première parenthèse ouvrante ;)

                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 février 2016 à 23:36:05

                            Bonjour mes chers correspondants, et merci à tous pour vos contributions qui me sont précieuses car chacune d'elles m'apporte quelque chose et sans doute doute apporte quelque chose aux personnes qui lisent ce post. Je les étudie toutes, et je les essaie toutes pour voir ce que cela donne sur l'IDLE. Merci d'avoir pris un peu de votre temps pour me répondre.

                            Mon script définitif est ci-dessous. (Je n'avais pas vu le problème de la ponctuation, heureusement que vous me l'avez fait remarquer.)

                            import string
                            def find_longest_word(some_string):
                                some_string = ''.join   ((
                                                    char for char in some_string
                                                    if char not in string.punctuation
                                                    ))
                                                          
                                my_list=some_string.split()
                             
                                maxi = 0
                                wordMax = ''
                                for word in my_list:
                                    if len(word) >= maxi:
                                        wordMax = word
                                        maxi = len(word)
                                return(wordMax)



                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 février 2016 à 23:44:27

                              En bref, le code d'oldP :lol:
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Précepte: Le mieux est l'ennemi du bien
                                25 février 2016 à 0:43:35

                                Oui, c'est bien le code de oldProgrammer qui répondait exactement à la question que j'avais posée: comment faire ressortir parmi les mots dont je connaissais la longueur, le dernier parmi les plus longs?

                                Quant à la partie de son programme qui traite de la ponctuation, quel mal y a-t-il à prendre ce morceau et l'insérer dans mon script? Quand je serai parvenue à votre niveau d'expérience à tous, je comprendrai peut-être ce qu'il y a derrière les générateurs. Pour l'instant, je vois que ça marche et c'est ce qui m'importe. Je pourrais comparer cela à une machine à laver ou tout autre appareil: si je pousse un bouton pour la faire marcher et qu'elle fonctionne  correctement, est-il fondamental de connaître ce qui se passe derrière? Je serai peut-être un jour un bon dépanneur électroménager mais il faut un temps pour tout.

                                Bien cordialement,

                                Anpiet

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  25 février 2016 à 9:05:28

                                  Anpiet a écrit:

                                  Je pourrais comparer cela à une machine à laver ou tout autre appareil: si je pousse un bouton pour la faire marcher et qu'elle fonctionne correctement, est-il fondamental de connaître ce qui se passe derrière?

                                  Mais pour reprendre ton analogie, tu es actuellement en train de suivre un cours pour comprendre ce qui se passe derrière. La moindre des choses est donc de t'y intéresser, et de ne pas te contenter d'appuyer sur un bouton au pif parce que quelqu'un te l'a conseillé.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    25 février 2016 à 10:31:43

                                    Quant à la partie de son programme qui traite de la ponctuation, quel mal y a-t-il à prendre ce morceau et l'insérer dans mon script? Quand je serai parvenue à votre niveau d'expérience à tous, je comprendrai peut-être ce qu'il y a derrière les générateurs. Pour l'instant, je vois que ça marche et c'est ce qui m'importe. Je pourrais comparer cela à une machine à laver ou tout autre appareil: si je pousse un bouton pour la faire marcher et qu'elle fonctionne correctement, est-il fondamental de connaître ce qui se passe derrière? Je serai peut-être un jour un bon dépanneur électroménager mais il faut un temps pour tout.

                                    La meilleure méthode reste de tester ligne par ligne avec l'interpréteur...

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      25 février 2016 à 14:56:58

                                      entwanne, je crois que j'ai déjà dit dans un autre post que tout le monde est en train de courir pour suivre le rythme du cours, je ne suis pas la seule, certains disent travailler 40 heures par semaine si ce n'est davantage, il est dans mon intention de reprendre le cours depuis le début lorsque celui-ci sera terminé pour le revoir plus à fond, pour l'instant je cours avec les autres pour ne pas me faire larguer.

                                      oldProgrammer, je travaille en général avec pythontutor pour décomposer les opérations les unes après les autres. Ta partie de programme, je l'ai acceptée pour l'instant telle quelle, elle s'éclaircira d'elle-même le moment venu, je ne me fais pas de souci sur ce point. 

                                      Cordialement,

                                      Anpiet

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        25 février 2016 à 21:57:45

                                        Travailler 40h pour avaler du code sans forcément comprendre, c'est un peu avalé sa soupe avec de gros morceaux . On est rasasie c'est sur, mais à t on trouve le goût des aliments qui l'a compose ?
                                        La philosophie de la "vie" en général dit qu'il vaut mieux avoir une tête bien faite que bien pleine . Autrement dit il vaut mieux Comprendre ce que l'on fait que d'apprendre bêtement . 
                                        Dans ce cas présent je vais être vieux jeux  mais il vaut mieux passe du temps sur un exercice que de chercher une solution toute faite ou on a rien compris . Une solution peut être trouve d'ailleurs en posant le problème avec une feuille et un crayon à papier pour élaborer un algorithme avant de pondre un code . C'est pas comme cela qu on apprend la programmation  aujourd'hui dans ton école Anpiet ?
                                        @+
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        http://sinclair.recreatedzxspectrum.com/index.php
                                          25 février 2016 à 23:00:43

                                          Dark-linux, on ne va pas parler vitam aeternam de ce malheureux bout de code

                                          # vire la pontuation
                                          some_string = ''.join   ((
                                                                  char for char in some_string
                                                                  if char not in string.punctuation
                                                                  ))
                                           

                                          que m'a filé oldProgrammer et que je me suis enregistré précieusement pour le retrouver le jour où j'en aurai besoin. Les développeurs qui ont conçu Python ont eu l'idée, pour nous faciliter la vie, de créer des trucs que je trouve magiques tels - par exemple - ce que j'ai cherché partout sans le trouver et que j'ai finalement obtenu en réponse à un de mes posts:

                                          >>> list('corbeau')
                                          ['c', 'o', 'r', 'b', 'e', 'a', 'u']

                                          Pourquoi ces développeurs n'ont-ils pas eu l'idée de créer une méthode qu'ils auraient appelée "split.punctuation" et qu'il suffirait d'utiliser pour enlever tous les signes de ponctuation? 

                                          Bonne nuit, Dark-linux.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            26 février 2016 à 8:09:48

                                            Tu as raison Anpiet suis vieux jeux ... :) juste pour t'aider je persiste il vaux mieux galérer sur un petit bout de code une fois et passer à la suite après , et non pas le contraire .
                                            @+
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            http://sinclair.recreatedzxspectrum.com/index.php
                                              26 février 2016 à 8:41:42

                                              Pour t'aider j'ai un petit neveu dans une école d'ingénieur ou on lui demande de produire du code . Il s'est senti larguer car ses copains produisent de la quantité de ligne qui fonctionne plus ou moins bien...Avec internet facile , un bout de code par ci un bout de code par la, au final on assemble ......En creusant je lui ai demandé si ses copains comprenaient ce qu'ils faisaient ? La réponse est évidente : pas tout , mais le code est fait juste acceptable pour avoir la moyenne...
                                              Je lu ai conseille de perdre du temps sur des petits bouts de code ou de résolution de petits problèmes. Au début il était à la traine ,....aujourd'hui il va un peu plus vite et comprend ce qu'il fait
                                              @+
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              http://sinclair.recreatedzxspectrum.com/index.php

                                              Le plus long mot

                                              × 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