Partage
  • Partager sur Facebook
  • Partager sur Twitter

Générer un texte aléatoire

    17 mai 2021 à 9:14:04

    Bonjour, j'aurai très fortement besoin d'aide sur mon exercice. Je ne n'arrive à rien et trop compliqué pour mon niveau en programmation, c'est même impossible pour moi. J'aurai donc vivement besoin d'aide s'il vous plait. merci

    Voici mon exercice.

    Créer un générateur de texte de longueur choisie par l’utilisateur. Créer un générateur de phrase en coupant le

    texte précédent de manière aléatoire en un nombre de phrases aléatoires. Chaque phrase contient entre 8 et 30 mots.

    Chaque phrase commence par une majuscule et termine par un point. Si la longueur de phrase est supérieure à 25 mots,

    la phrase devra avoir une virgule aléatoire entre les mots 8 et 18 et le second mot de la proposition juxtaposée devra être

    conjugué aléatoirement. Chaque mot comporte entre 1 et 10 lettres. Comme les lettres ne se rencontrent pas toutes avec

    la même fréquence (le ‘e’ est très fréquent par exemple), vous utiliserez l’alphabet suivant :

    alphabet = ('a','a','a','a','a','a','a', 'b', 'c','c','c', 'd', 'd','d',

    'e','e','e','e','e','e','e','e','e','e','e','e', 'f', 'g', 'h',

    'i', 'i','i','i','i','i','i','j', 'k', 'l','l','l','l','l',

    'm', 'm','m','n', 'n','n','n','n','n',

    'o','o','o','o','o', 'p','p',

    'q', 'r','r','r','r','r','r', 's','s','s','s','s','s','s',

    't', 't','t','t','t','t','u', 'u','u','u','v', 'w', 'x', 'y', 'z')

    Il faudra rajouter au deuxième mot de chaque phrase une terminaison aléatoire contenue dans ce n-uplet :

    terminaison = ("e", "es", "ons", "ez", "ent", "is", "it", "issons", "issez", "issent", "

    ds", "d", " ts", "t", "tons", "tez", "tent", "s", "t", "ons", "ez", "ent", "eins",

    "eint", "eignons", "eignez", "eignent", "ains", "aint", "aignons", "aignez", "aignent",

    "oins", "oint", "oignons", "oignez", "oignent")

    Exemple de sortie pour un texte de 1000 lettres :

    Jalnh urrions egte srahlodn s katxesd n rtsrmud uceetc.

    O lseignent lesint elonisr rtsxqpin flbo wddtuavme e bksuidue oe td xtnx zneieresp oucx

    hodncse oaaiuusrr mlejn odamsc eikexsnz sri.

    Hruqxev snzessent uiotdo efein botdrpa n hiktogc nduobania ef mngsm csgstd iebi sleiut

    uramsn atn ueozldo ztetad eei lnl esaicil eq wiiian raktura.

    Esu qt e issttr rrt lnaejer aieepqiuo dvp eill dtennucep xuult i iofeacana otwye a al

    lleks eyesu l i cmeif neqs ieegudiol nd qsierfei saob.

    Cr zudkixeoins lptoarv ivetrldik ryssedn e ltl bauiprmnu iigaeta ressr stpn swric rd mrh

    egu epxanerar ldodpe ci l pmtkuwums eiths nuqinulg le eeruceaoa pndeahjc eodktecep

    rtiioye crkdtdme.

    Otmmso claeokrissent os mslda bsltusea naotuzeis sesee xfetnp taiau eejsrtsl gdei saau

    eg npiaoa teroa ceus akpe e oxdju odlt eru akors itrciwdt isl s.

    Ensapltor wkbrsleint ealolsat oeenal loakrvem coannafks vs ismlauei osidsi riniplaau xd

    tbdyayxtn aesntln j ve.

    Owheiecm eeilitons k aslsdst aoesemun e rteu n edeswaea floacl irreso hev e ritlatg rga

    zztto p imluiht r ro.

    Il faudra compter le total des pronoms présents dans ce n-uplet :

    pronoms= ("je", "me", "m’", "moi ", " tu", "te", "t’", "toi", "nous", "vous ", " il",

    "elle", "ils", "elles ", " se", "en", "y,le", "la", "l’", "les ", " lui", "soi ", "

    leur", "eux", "lui", "leur", "celui", "celui-ci", "celui-là ", " celle", "celle-ci",

    "celle-là", "ceux", "ceux-ci", "ceux-là ", " celles", "celles-ci", "celles-là", "ce",

    "ceci", "cela", "ça", "le mien", "le tien", "le sien ", " la mienne", "la tienne", "la

    sienne", "les miens", "les tiens", "les siens ", " les miennes", "les tiennes", "les

    siennes", "le nôtre", "le vôtre", "le leur ", "la nôtre", "la vôtre", "la leur", "les

    nôtres", "les vôtres", "les leurs", "qui", "que", "quoi", "dont", "où", "lequel", "auquel",

    "duquel ", " laquelle", "à laquelle", "de laquelle", "lesquels", "auxquels", "desquels

    ", " lesquelles", "auxquelles", "desquelles", "on", "tout", "un", "une", "l'un",

    "l'une ", " les uns", "les unes", "un autre", "une autre ", " d'autres", "l'autre", "les

    autres", "aucun", "aucune", "aucuns", "aucunes", "certains", "certaine", "certains",

    "certaines", "tel", "telle", "tels", "telles ", " tout", "toute", "tous", "toutes", "le

    même", "la même", "les mêmes ", " nul", "nulle", "nuls", "nulles", "quelqu'un", "quelqu'une

    ", " quelques uns", "quelques unes", "personne (aucun)", "autrui", "quiconque",

    "d’aucuns")

    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2021 à 10:22:43

      Bonjour,

      Si c'est un exercice, c'est que tu as eu des cours. Si tu as des cours, on a besoin de connaître le cadre d'utilisations technique a abordé avec toi.

      Si je te parle d'un module comme textwrap par exemple, je ne suis pas certains que tu es le droit de l'utiliser, si ?

      Je te conseille aussi de travailler par étapes, et si tu connais les fonctions en python, on peut dire qu'une étape c'est une fonction... Une fonction est une action, il faut donc la nommer par un verbe en anglais ou en français (de préférence en anglais) selon dont tu es le plus à l'aise.

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        17 mai 2021 à 17:20:36

        > Créer un générateur de texte de longueur choisie par l’utilisateur.
        Déjà ce n'est pas clair. Le texte doit-il avoir du sens?
        Chose certaine, tu auras besoin de fonctions qui génèrent ou obtiennent des objets de façon aléatoire. :)
        Il serait souhaitable que tu saches bien gérer les listes et sans doute les dictionnaires.
        Et comme l'a dit fred1599, il faudrait connaître les fonctions.
        • Partager sur Facebook
        • Partager sur Twitter

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

          17 mai 2021 à 17:47:22

          ça doit être une sorte le lorem ipsum
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2021 à 17:46:03

            PierrotLeFou a écrit:

            > Créer un générateur de texte de longueur choisie par l’utilisateur.
            Déjà ce n'est pas clair. Le texte doit-il avoir du sens?
            Chose certaine, tu auras besoin de fonctions qui génèrent ou obtiennent des objets de façon aléatoire. :)
            Il serait souhaitable que tu saches bien gérer les listes et sans doute les dictionnaires.
            Et comme l'a dit fred1599, il faudrait connaître les fonctions.


            bonjour, non le texte ne doit pas avoir de sens. Le problème c'est que j'ai un niveau assez médiocre en programmation. Je ne sais pas faire de fonction qui génère quelque chose. Je ne sais presque rien faire en programmation.

            -
            Edité par Maxime214 18 mai 2021 à 17:51:36

            • Partager sur Facebook
            • Partager sur Twitter
              18 mai 2021 à 18:18:31

              Hmmm ça risque d'être compliqué ...
              Qu'est-ce que tu connais déjà du Python?
              Ça te prend en partant quelque chose pour obtenir des caractères au hasard. donc le module random
              Minimalement, il faudrait savoir gérer un peu les listes et les boucles for ou whiele
              • Partager sur Facebook
              • Partager sur Twitter

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

                18 mai 2021 à 22:45:26

                J'aime bien utiliser les fonctions pour montrer les étapes de résolution et éviter les tâches répétitives, mais dans ce problème, il n'est pas nécessaire de faire des fonctions. Par contre il faudra bien s'organiser...
                • Partager sur Facebook
                • Partager sur Twitter

                Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                  18 mai 2021 à 23:46:55

                  fred1599 a écrit:

                  J'aime bien utiliser les fonctions pour montrer les étapes de résolution et éviter les tâches répétitives, mais dans ce problème, il n'est pas nécessaire de faire des fonctions. Par contre il faudra bien s'organiser...


                  C'est toujours plus propre de faire des fonctions. Tout mettre dans le main c'est vraiment sale.

                  Ici, deux/trois fonctions à mon avis s'imposent : generer_phrase(long_min, long_max), generer_mot(long_min, long_max) et conjuguer_mot. Cela permet de bien dissocier la génération proprement dite de la conjugaison et permet d'y revenir si besoin après coup.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 mai 2021 à 1:54:11

                    @Nephthys:
                    On est tous d'accord avec le fait de créer des fonctions. Alors, on renvoie le PO à ses cours, ou on essaie d'avancer?
                    @Maxime214:
                    N'essaies pas de tout faire d'un seul coup. Fais une étape à la fois.
                    Et quand elle fonctionne, passe à l'étape suivante.
                    • Partager sur Facebook
                    • Partager sur Twitter

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

                      19 mai 2021 à 9:22:52

                      PierrotLeFou a écrit:

                      @Nephthys:
                      On est tous d'accord avec le fait de créer des fonctions. Alors, on renvoie le PO à ses cours, ou on essaie d'avancer?

                      fred1599 a écrit:

                      mais dans ce problème, il n'est pas nécessaire de faire des fonctions. Par contre il faudra bien s'organiser...


                      Bien visiblement non.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 mai 2021 à 11:38:34

                        Nephthys a écrit:

                        C'est toujours plus propre de faire des fonctions. Tout mettre dans le main c'est vraiment sale.

                        Qui a dit le contraire ? Regarde ma 1ère réponse...

                        Le fait que se soit sale, n'annonce pas au PO que ce n'est pas possible. Et si on lit sa réponse, il y a de fortes chances que cette partie ne soit pas vue en cours.

                        Alors, sans fonction, c'est possible ? Je dis juste, oui c'est possible, ce qui implique la non nécessité pour cet exercice d'avoir à utiliser des fonctions.

                        Mais le 1er à avoir conseillé les fonctions, c'est celui qui t'écris actuellement, et je connais très bien l'intérêt de la fonction, on fait avec ce qu'on a...

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                        La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                          19 mai 2021 à 11:51:45

                          Pour avancer, Je ferais les choses dans cet ordre:

                          Générer un texte d'une certaine longueur et choisissant au hasard des lettres dans la liste alphabet avec une fonction generer_texte(nb_lettres) et à la fin un return texte (texte contiendra la suite de lettres générée)

                          Ensuite à partir de là, générer aléatoirement des espaces de façon avoir des mots de longueur 1 à 10.

                          Ensuite, mettre un point aléatoirement de façon avoir entre 8 et 30 mots.

                          Ensuite placer une virgules entre le mot 8 et 18 (au hasard) si la phrase fait plus de 25 mots 

                          Ensuite, mettre en majuscule la première lettre de chaque phrase.

                          Enfin (pour la génération), ajouter la conjugaison aléatoire sur le 2nd mot après un point ou une virgule.

                          Pour finir, compter les pronoms.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 mai 2021 à 15:03:22

                            Ce n'est pas si compliqqué après tout. Je n'ai pas inclus la vérification des pronoms.
                            (faire un copier-coller pour retrouver l'indentation)
                            -
                            from random import *
                            nbWords = 1000   # Nombre de mots
                            # Alphabet récupéré du message et converti.
                            alphabet = 'aaaaaaabcccdddeeeeeeeeeeeefghiiiiiiijklllllmmmnnnnnnoooooppqrrrrrrsssssssttttttuuuuvwxyz'
                            # Liste des terminaisons (n-tuple)
                            terminaison = ("e", "es", "ons", "ez", "ent", "is", "it", "issons", "issez", "issent", "ds",
                                "d", " ts", "t", "tons", "tez", "tent", "s", "t", "ons", "ez", "ent", "eins",
                                "eint", "eignons", "eignez", "eignent", "ains", "aint", "aignons", "aignez", "aignent",
                                "oins", "oint", "oignons", "oignez", "oignent")

                            # On génère une liste de mots
                            words = []
                            for _ in range(nbWords):
                                # choices retourne une liste de 1 à 10 caractères (avec randint). join les colle pour faire une chaîne
                                word = ''.join(choices(alphabet, k=randint(1, 10)))
                                words.append(word)   # j'ajoute à ma liste de mots
                            # Générer une liste de liste, chaque élément est une phrase
                            liste = []
                            next = 0
                            while next < nbWords:
                                last = min(nbWords, next + randint(8, 30))
                                if last-next > 1: liste.append(words[next:last])
                                next = last
                            # On modifie chaque phrase
                            texte = []
                            for phrase in liste:
                                phrase[0] = phrase[0][0].upper() + phrase[0][1:]
                                phrase[-1] += '.'
                                phrase[1] += choice(terminaison)
                                if len(phrase) > 25:
                                    phrase[randint(8, 18) - 1] += ','
                                phrase = ' '.join(phrase)   # faire une chaîne de cette liste
                                texte.append(phrase)

                            print(*texte, sep='\n')

                            • Partager sur Facebook
                            • Partager sur Twitter

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

                              19 mai 2021 à 18:20:02

                              PierrotLeFou a écrit:

                              Ce n'est pas si compliqqué après tout. Je n'ai pas inclus la vérification des pronoms.
                              (faire un copier-coller pour retrouver l'indentation)
                              -
                              from random import *
                              nbWords = 1000   # Nombre de mots
                              # Alphabet récupéré du message et converti.
                              alphabet = 'aaaaaaabcccdddeeeeeeeeeeeefghiiiiiiijklllllmmmnnnnnnoooooppqrrrrrrsssssssttttttuuuuvwxyz'
                              # Liste des terminaisons (n-tuple)
                              terminaison = ("e", "es", "ons", "ez", "ent", "is", "it", "issons", "issez", "issent", "ds",
                                  "d", " ts", "t", "tons", "tez", "tent", "s", "t", "ons", "ez", "ent", "eins",
                                  "eint", "eignons", "eignez", "eignent", "ains", "aint", "aignons", "aignez", "aignent",
                                  "oins", "oint", "oignons", "oignez", "oignent")

                              # On génère une liste de mots
                              words = []
                              for _ in range(nbWords):
                                  # choices retourne une liste de 1 à 10 caractères (avec randint). join les colle pour faire une chaîne
                                  word = ''.join(choices(alphabet, k=randint(1, 10)))
                                  words.append(word)   # j'ajoute à ma liste de mots
                              # Générer une liste de liste, chaque élément est une phrase
                              liste = []
                              next = 0
                              while next < nbWords:
                                  last = min(nbWords, next + randint(8, 30))
                                  if last-next > 1: liste.append(words[next:last])
                                  next = last
                              # On modifie chaque phrase
                              texte = []
                              for phrase in liste:
                                  phrase[0] = phrase[0][0].upper() + phrase[0][1:]
                                  phrase[-1] += '.'
                                  phrase[1] += choice(terminaison)
                                  if len(phrase) > 25:
                                      phrase[randint(8, 18) - 1] += ','
                                  phrase = ' '.join(phrase)   # faire une chaîne de cette liste
                                  texte.append(phrase)

                              print(*texte, sep='\n')


                              Merci à tous pour vos conseilles vraiment. M.Pierrotlefou vous êtes vraiment un fou, un crack, el fenomeno, un homme de goût. je vous remercie vous venez de sauvez mon bac merci milles fois. C'est vous le MVP aujourd'hui, si vous êtes croyant que dieu vous bénisse. Je n'aurai jamais pu le faire moi-même c'est une certitude. Même si il n'y a pas les pronoms c'est vraiment beaucoup merci. Encore merci

                              -
                              Edité par Maxime214 19 mai 2021 à 18:23:27

                              • Partager sur Facebook
                              • Partager sur Twitter
                                19 mai 2021 à 18:53:31

                                Je le fais vite sans test:
                                pronoms = ... ta liste de pronoms
                                pronoms = {k: 0 for k in pronoms}   # Transformer une liste endictionnaire
                                for word in words:
                                    if word in pronoms.keys():
                                        pronoms[word] += 1
                                Tu peux afficher le dictionnaire complet ou seulement les items où la valeur est non nulle.
                                J'ai l'impression qu'il y en aura très peu ...
                                • Partager sur Facebook
                                • Partager sur Twitter

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

                                  19 mai 2021 à 19:08:12

                                  ça va dépendre du hasard surtout (on a je pense plus de chance de trouver les petits pronoms)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 mai 2021 à 19:16:42

                                    Je n'aurai jamais pu le faire moi-même c'est une certitude.

                                    Alors on vous donnes des exercices impossibles à faire ? C'est nouveau dans le monde de l'enseignement, avant on s'en sortait avec les cours donnés par le professeur.

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                      19 mai 2021 à 23:16:27

                                      fred1599 a écrit:

                                      Je n'aurai jamais pu le faire moi-même c'est une certitude.

                                      Alors on vous donnes des exercices impossibles à faire ? C'est nouveau dans le monde de l'enseignement, avant on s'en sortait avec les cours donnés par le professeur.

                                      Nous n'avons pas tous le même niveau en programmation dans ma classe. Et cela s'explique dû fait que nous n'avons pas eu le même prof l'année dernière. Je suis tombé sur un prof qui ne faisait rien, par rapport aux autres classes. Et cette différence on l'a voit en classe tout ceux qui n'étaient pas dans ma classe l'an dernier, ont tous un meilleur niveau que ceux qui étaient dans ma classe. Entre l'année dernière et cette année, il y a eu un gouffre énorme dans le programme scolaire en informatique dans mon apprentissage par rapport aux élèves d'autres classe. C'est pour ça que je dis que c'est impossible pour moi, et je connais très bien mes capacités en programmation.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 mai 2021 à 0:26:54

                                        Ok, avec tout ce qui se passe actuellement, c'est encore moins simple...

                                        Si tu as besoin de comprendre ce qu'à fait @PierrotLeFou, je te conseille ce livre en pdf et gratuit : Swinnen

                                        Il est plutôt pas mal côté explications, et des exercices peuvent te permettre la maîtrise tranquillement des bases du langage.

                                        Après je te dis pas que ça sera pas dans la douleur certaines fois, mais le plus dur, c'est commencer, une fois parti, tu trouveras ça plus sympa.

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                        La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                          20 mai 2021 à 0:53:22

                                          @fred1599:
                                          > Je n'aurai jamais pu le faire moi-même c'est une certitude.
                                          Tu as oublié le ... :)
                                          • Partager sur Facebook
                                          • Partager sur Twitter

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

                                          Générer un texte aléatoire

                                          × 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