Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice : répétition dans une chaine de caractère

C'est un petit programme mais il donne un peu de fil a retordre.

    23 novembre 2021 à 14:50:22

    Ecrire une fonction plusLongueRépétition(message) qui renvoie le plus grand nombre de caractères consécutifs identiques dans le message.

    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2021 à 14:54:19

      Bonjour,

      Manque de Politesse

      Votre message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir », etc.). Les règles du site exigent que chaque nouveau message comporte un minimum de politesse. Après tout, les gens qui répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ?

      Manque de précisions

      Vous êtes ici sur un forum d'entraide communautaire et non pas sur un forum de demande de service, le but n'est donc pas de fournir une réponse toute faite ou de directement fournir la solution à quiconque viendrait sans la moindre trace. Afin d'obtenir de l'aide et une solution à votre problème, il est fortement recommandé de présenter clairement l'état actuel du problème en nous fournissant :

      • Un descriptif clair et précis du problème
      • La tentative actuelle de résolution que vous avez effectué => Le code que vous avez écrit, inséré sur le forum à l'aide du bouton code du forum </>.
      • Le résultat attendu et le résultat actuel
      • Toutes pistes de recherches pouvant aider à la résolution

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2021 à 15:06:26

        un début de quelque chose ? une idée de comment faire ? (par exemple, si on demande de faire l'exercice à la main, comment tu ferais?)
        • Partager sur Facebook
        • Partager sur Twitter
          23 novembre 2021 à 15:13:20

          Et comment le ferais-tu à la main? As-tu déjà du code?
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            23 novembre 2021 à 15:16:04

            Bonjour.
            Y-a-t-il des consignes par rapport aux lettres accentuées ?
            • Partager sur Facebook
            • Partager sur Twitter

            PB68

              23 novembre 2021 à 15:25:57

              pour l'instant j'ai un début :

              def plusLongueSuite(message):

              compteur = 0
              for i in range (len(message)) :
                  if message[i] == message[i+1] :
                      compteur +=1
                      
              return compteur
              

              assert(plusLongueSuite('lycanthropiques') == 1) assert(plusLongueSuite('arrosoir') == 2) assert(plusLongueSuite('AAaaaaAaaaA') == 4)

              j'ai une idée du "chemin a parcourir" en littérale :

                  _ je dois vérifier toutes les valeur de la chaine pour savoir si elles sont soit égale a 1 ou à 0
                  _ si une des valeur n'est pas égale a 1 ou 0 le programme doit renvoyer directement False
                  _pour pouvoir vérifier toutes les valeurs de la chaine je dois les classer une par une dans une autre liste mais je vois pas 
                    comment par la suite les réassembler pour qu'elles forment la chaine de caractère initiale 
              

              dans le programme les lettres accentuées ne sont pas autorisée seulement l'alphabet de base l'est

              petite update :

              pour l'instant les deux premiers assert passe mais le dernier pose problème avec la situation de majuscule et minuscule

              voici mon programme pour l'instant :

              j'ai un peu progresser il me reste juste le dernier assert qui me pose problème avec la situation de majuscule et minuscule

              voici mon programme pour l'instant :

              def plusLongueSuite(message):

              compteur = 1
              mot_i = []
              mot_i+=message[::1]
              print(mot_i)
              for i in range (len(message)-1) :
                  if message[i] == message[i+1] :
                      compteur +=1
                  print(compteur)
                      
              return compteur
              

              -
              Edité par WanXiku 23 novembre 2021 à 15:46:35

              • Partager sur Facebook
              • Partager sur Twitter
                23 novembre 2021 à 17:35:59

                Bonjour.

                Pour les majuscules, regarde du côté de la méthode "lower()". 

                • Partager sur Facebook
                • Partager sur Twitter

                PB68

                  23 novembre 2021 à 18:41:26

                  WanXiku a écrit:

                  j'ai un peu progresser il me reste juste le dernier assert qui me pose problème avec la situation de majuscule et minuscule

                  Pour mémoriser la longueur du plus grand segment de lettres identiques, il va falloir pouvoir comparer la longueur trouvée jusqu'à présent avec celle qu'on va trouver pour le segment suivant. Ce qui suppose une variable où stocker le dernier plus grand à comparer avec une autre variable - le segment courant.

                  Et si on ne trouve pas comment vous avez traduit cette logique dans votre code, il ne marchera pas (et il ne marche pas: vous avez des résultats juste au hasard).

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 novembre 2021 à 11:43:40

                    euh, un truc que je ne comprends pas: d'un côté tu indiques de comparer les valeurs de la chaine à 1 ou 0 et si c'est différent de 1 ou 0, le programme renvoie False et ensuite tu parles d'alphabet et de lettre.

                    Il y a un truc qui m'échappe, ou tu confonds 2 fonctions

                    Edit: ok mélange avec l'autre sujet https://openclassrooms.com/forum/sujet/test-de-binarite-dune-chaine 

                    -
                    Edité par umfred 24 novembre 2021 à 11:45:12

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 novembre 2021 à 18:03:49


                      L'énoncé initial disait:
                      > Ecrire une fonction plusLongueRépétition(message) qui renvoie le plus grand nombre de caractères consécutifs identiques dans le message.
                      Je ne vois pas ce que les 0 et 1 viennent faire ici, ni les assert
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Le Tout est souvent plus grand que la somme de ses parties.

                        24 novembre 2021 à 18:33:51

                        Si il faut distinguer minuscule et majuscule, il n'y a rien à faire de particulier.

                        Enfin, si, dans ton code, il faut réinitialiser ton compteur à chaque fois que 2 lettres successives sont différentes, et conserver la valeur max

                        -
                        Edité par umfred 24 novembre 2021 à 18:35:19

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 novembre 2021 à 19:12:15

                          Et vérifier en sortant de la boucle si la fréquence courante est supérieure à la fréquence maximale.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Le Tout est souvent plus grand que la somme de ses parties.

                          Exercice : répétition dans une chaine de caractère

                          × 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