Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice Python

    28 octobre 2010 à 13:21:49

    Bonjour à tous,
    j'ai un petit exercice que allez surement trouvé facile,que nous devons réaliser en étude supérieur ( nous venons d'apprendre ce language ). Cependant je coince et donc si quelqu'un pouvait m'aider.
    l'énoncé :
    Programme qui lit une chaine de caractères texte et un mot m et qui affiche le nombre de fois où m apparait dans texte.
    Aide Vous devez gérer deux indices i et j qui vont parcourir respectivement les caractères du texte et les caractères du mot à chercher. Vous devrez utiliser deux boucles while imbriquées, une pour parcourir le texte, et une pour parcourir le mot.

    texte=input("le texte choisi ? ")
    mot=input("le mot à chercher ?")
    
    long=len(texte)
    lon=len(mot)
    compte = 0
    i = 0
    j=0
    
    while i <=len(texte)-1:
        if texte[i]==texte[j] :
            while j<=len(mot) :
                if texte[j]==mot :
                    compte=compte+1
                j=j+1
             
        i=i+1
    
    print("le mot",mot,"apparait",compte,"fois")
    


    Si vous pouvez m'indiquer des pistes car j'ai fait plsuieurs essais et je n'arrive vraiment pas.
    merci

    Bonne journéee
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 octobre 2010 à 15:03:20

      Si c'est un exercice universitaire, pourrais-tu donner en particulier ce que tu as déjà vu comme cours et applications (mais vite fait hein).

      L'objectif de cet exercice c'est l'utilisation de while?

      Car pour faire ce genre d'exercice, j'utiliserais tout sauf les boucles while.

      Est-ce que l'on considère les erreurs dans le texte ( 2 espaces ou plus entre 2 mots ) ? Les ponctuations ? La différence entre minuscule et majuscule ?
      • Partager sur Facebook
      • Partager sur Twitter
        28 octobre 2010 à 21:15:09

        Bonsoir;
        oui c'est un exercice universitaire et on est dans la partie "enonce itératif" donc utilisation du while.
        Nous avons déja vu les variables et les énoncés conditionels ( if else elif ).

        Je n'ai pas compris votre question sur les erreurs ? j'ai donné l'énoncé tel qu'il était écrit...

        Je vous remercie
        • Partager sur Facebook
        • Partager sur Twitter
          28 octobre 2010 à 22:50:15

          L'énoncé est ambigü puisque quand on parle de "mot" on doit définir un délimiteur, par exemple un espace. Donc apparemment, on ne te demande pas de chercher un mot dans un texte, mais une chaîne dans une autre chaîne.

          De plus, l'énoncé est doublement stupide car il te demande de faire du C. La solution en python est :

          def compter( texte, mot ):
          	l = len( mot )
          	return sum( mot == texte[x:x+l] for x in range( len(texte)-l+1 ))
          
          print compter( "anticonstitutionnellement", "con" )
          print compter( "tululululu", "lu" )
          


          Maintenant, puisque ton prof veut que fasses du C, tu vas donc le faire avec 2 while imbriqués (ça me donne déjà mal à la tête) : n'oublie pas de lui dire ce que j'en pense. En effet utiliser une boucle while pour itérer sur des indices de chaînes, c'est non seulement chiant, mais une "certaine probabilité" d'avoir une erreur "off by one" (genre il manque un caractère parce que t'as mis un < au lieu d'un <=...) donc, lol.

          D'ailleurs tu t'es planté massivement, et tu as toute ma compassion XDDDDD

          Par exemple, pour écrire le code ci-dessus, ben je l'ai tapé et puis il a marché du premier coup, ça prend dans les 20 secondes.

          Pour le while, il faudrait que je fasse ça :

          - tu prends un papier
          - tu dessines 2 bandes l'une en dessous de l'autre, avec des petites cases dedans qui sont tes lettres
          - tu mets une flèche pour i et une pour j
          - tu déroules l'algo

          mais je vais pas le faire (toi, oui).

          - le j=0 n'est pas à la bonne place
          - change de condition dans le second while

          comme en maths, tu peux faire un changement d'indice ... ta condition est :
          texte[i] == mot[j]

          ce qui est chiant, change la en
          texte[i+j] == mot[j]

          comme ça, tu peux tester tous les caractères du mot si le premier correspond, en itérant seulement j.


          Désolé, j'ai été méchant avec le C, car en C on utiliserait en fait un double for().
          Faire ça sans utiliser de for devrait être assimilé à la torture, c'est presque aussi ignoble que l'asm x86...

          • Partager sur Facebook
          • Partager sur Twitter
            28 octobre 2010 à 23:03:28

            merci pour ta reponse je vais regarder sa mais le code que tu as posté ,a pars le print le reste c'est du chinoix pour moi.
            Mais quel est le rapport avec le C ? Car on apprend pas le C mais juste le python.
            Et on vient de commencer le python donc c'est censé etre un exercice facile --'
            Fin bon je vais essayer de faire comme tu m'a dit mais j'ai peur de ne pas avoir tout capté...

            merci
            • Partager sur Facebook
            • Partager sur Twitter
              28 octobre 2010 à 23:27:06

              Fais un dessin tu verras, sur un post-it tu mets le texte (avec une lettre par case), sur un autre post-it tu mets le mot à chercher (avec une lettre par case aussi), au départ tu alignes les post-it, ensuite tu en décales un d'une lettre ... et voilà la première boucle...
              • Partager sur Facebook
              • Partager sur Twitter
                29 octobre 2010 à 0:00:51

                Ils ont vraiment des exos à la noix, du genre ça embrouille plus que ça donne envie de coder.
                sinon:
                txt.count(mot)
                

                ça le fait aussi.
                • Partager sur Facebook
                • Partager sur Twitter

                Python c'est bon, mangez-en. 

                Anonyme
                  29 octobre 2010 à 0:24:56

                  Citation

                  Mais quel est le rapport avec le C ? Car on apprend pas le C mais juste le python



                  Car ton professeur pense en C pour coder en python, et du coup un code élégant en python (concision), la chose la plus importante se démarquant du C devient affreusement ressemblante à la taille d'un code C et retire toute son élégance.

                  De plus pour faire un exercice avec une ou deux boucles while d'autres exercices sont plus aptes à être utilisés.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 octobre 2010 à 16:43:53

                    merci lordcasque noir je vais essayer ton conseil.

                    Sinon josmiley,grave sa marche super avec sa mais je pense pas que si je met sa le prof va apprécier^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 octobre 2010 à 17:32:35

                      Citation : lifetor

                      Sinon josmiley,grave sa marche super avec sa mais je pense pas que si je met sa le prof va apprécier^^



                      non, mais ça te sert à tester ton code pour voir si il donne la même réponse...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 octobre 2010 à 17:59:13

                        Si le prof voulait que tu écrives l'algo toi-même, je doute qu'il apprécie...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 novembre 2010 à 22:02:41

                          j'ai fini fait cela :

                          texte = input("Entrez un texte :")
                          lettre = input("Le mot à chercher est : ")
                          longueur=len(texte)
                          count=0
                          i=int(0)
                          j=int(0)
                          
                          while i<=(longueur-1):
                              k = i
                               while j<len(lettre) and texte[k]==lettre[j]:
                              while i<longueur and j<len(lettre) and texte[i]==lettre[j]:
                                  i = i+1
                                   k = k+1        j = j+1
                                  if j==len(lettre)-1:
                                      count=count+1
                              j = 0
                              i = i+1
                          
                          print("Le mot",lettre,"apparait",count,"fois.")
                          


                          Mais je crois qu'il y a un bug quelque part...

                          merci
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            2 novembre 2010 à 22:15:07

                            Citation

                            Mais je crois qu'il y a un bug quelque part...



                            Non pas un mais plusieurs. Règle déjà tes problèmes d'indentation ou recopie-colle correctement ton code.

                            :)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 novembre 2010 à 22:15:50

                              Personnellement, j'ai que quelques erreurs d'indentation (dues au copier/coller ?).

                              Tu as bien Python 3.* ? Si tu as la 2.* il faut en plus que tu remplaces tes "input" par des "raw_input" ainsi que le 'à' par 'a' dans ton deuxième input.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                3 novembre 2010 à 15:14:24

                                Moi pour ton exo, je penserai plus à un split() et une boucle qui compare et incrémente..
                                Un truc de ce genre (je code ici, donc non testé):
                                mot = raw_input("Le mot: ")
                                t = open("f.txt","r")
                                r = t.read()
                                s = r.split(' ')
                                i = 0
                                size = len(s)
                                nombre_apparition = 0
                                while(i<size):
                                    if s[i] == mot:
                                        nombre_apparition += 1
                                    i+=1
                                
                                print("%s apparait %d fois dans le fichier\n"%(mot,nombre_apparition))
                                t.close()
                                


                                Voilà, après cela ne reste qu'un opinion :-°
                                EDIT: j'ai corrigé quelques petites erreurs dans mon script.
                                EDIT 2: Mon script ne m'affiche pas le nombre exact.. Ça m'énerve.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  3 novembre 2010 à 15:26:02

                                  Citation

                                  t = open("f.txt","r")



                                  Pourquoi ? L'énoncé ne spécifie pas que le texte se trouve dans un fichier texte.

                                  Citation

                                  Moi pour ton exo, je penserai plus à un split() et une boucle qui compare et incrémente..



                                  Il y a je pense 2 erreurs dans cette phrase.

                                  - split() n'est je pense, une méthode qu'il doit utiliser.
                                  - le nombre de boucle

                                  Citation

                                  Vous devrez utiliser deux boucles while imbriquées, une pour parcourir le texte, et une pour parcourir le mot



                                  c'est stupide ! Mais ça paraît clair...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    3 novembre 2010 à 15:27:18

                                    Oki, au temps pour moi.. Je me retire ^^
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      3 novembre 2010 à 15:30:27

                                      Citation

                                      Oki, au temps pour moi.. Je me retire



                                      Le but n'est pas que tu te retires, mais que tu modifies ton code en conséquence :)

                                      Bon amusement
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        3 novembre 2010 à 15:36:52

                                        Oui, mais ça se retire du python " parcourir un mot " c'est recoder strcmp() quoi...
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          3 novembre 2010 à 16:17:45

                                          voila ma solution (avec deux boucles :p ):
                                          ch=input("entrer une chaine de caractére: ")
                                          mot=input("entrer le mot a rechercher dans la chaine: ")
                                          n=len(ch)
                                          i=0
                                          u=0
                                          s=str()
                                          while i<n:
                                                  while i<n:
                                                          if s==" "+mot:
                                                                  u+=1
                                                          if ch[i]==" ":
                                                                  s=str()
                                                          s+=ch[i]
                                                          i+=1
                                          print("le mot",mot,"apparait",u,"fois")
                                          

                                          mais la solution que j'ai donner c'est pour rechercher des mots (séparer par des espaces).
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            3 novembre 2010 à 17:39:32

                                            entrer une chaine de caractére: bonjour vous allez bien
                                            entrer le mot a rechercher dans la chaine: bien
                                            le mot bien apparait 0 fois


                                            ???
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              3 novembre 2010 à 22:35:12

                                              tu as reperer l'erreur dans mon code ou bien tu as juste tester :p
                                              voila qui est régler ;) :
                                              ch=input("entrer une chaine de caractére: ")
                                              ch+=" "
                                              mot=input("entrer le mot a rechercher dans la chaine: ")
                                              n=len(ch)
                                              i=0
                                              u=0
                                              s=str()
                                              while i<n:
                                                      while i<n:
                                                              if s==" "+mot:
                                                                      u+=1
                                                              if ch[i]==" ":
                                                                      s=str()
                                                              s+=ch[i]
                                                              i+=1
                                              print("le mot",mot,"apparait",u,"fois")
                                              


                                              résultat:

                                              entrer une chaine de caractére: bonjour vous allez bien
                                              entrer le mot a rechercher dans la chaine: bien
                                              le mot bien apparait 1 fois
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                4 novembre 2010 à 15:40:11

                                                [HS]

                                                Bien que l'utilisation de la fonction count donne la solution la plus simple, je trouve la solution de Lord Casque Noir très élégante. Je ne pense jamais à utiliser le fait que l'on peut "sommer" (en quelques sortes) des booleeins.

                                                Voilà, HS, mais cette solution est vraiment sympa, et très pythonesque :)

                                                [/HS]
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  4 novembre 2010 à 17:52:28

                                                  Je me suis cassé la tête avec ce programme et deux boucles while, n'importe quoi, mais c'est un challenge d'une certaine façon.

                                                  Il prend en compte les espacements

                                                  chaine = input("Entre une chaine de caracteres :")
                                                  mot = input("Entre le mot a chercher :")
                                                  compteur = 0
                                                  ch = ""
                                                  
                                                  i = 0
                                                  while i < len(chaine) :
                                                      if chaine[i] == mot[0] :
                                                          j = 0
                                                          while j < len(mot) :
                                                              ch += chaine[i+j]
                                                              j += 1
                                                              if ch == mot :
                                                                  compteur += 1
                                                                  ch = ""
                                                          ch = ""
                                                      i += 1
                                                  
                                                  print(compteur)
                                                  


                                                  On est d'accord que c'est affreusement moche. Je serais le prof j'aimerais pas lire cela :p
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    4 novembre 2010 à 17:54:42

                                                    Je serais le prof, j'attendrais une solution avec str.count(...), et je donnerais pas cet exo sans blesser mon amour-propre, perso. :-°
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Zeste de Savoir, le site qui en a dans le citron !
                                                    Anonyme
                                                      4 novembre 2010 à 17:56:47

                                                      Citation

                                                      Je serais le prof, j'attendrais une solution avec str.count(...), et je donnerais pas cet exo sans blesser mon amour-propre, perso. :-°



                                                      Je pense qu'on est tous d'accord, je ne comprend pas cette façon pédagogique de voir les choses.

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        4 novembre 2010 à 20:18:44

                                                        bon j'ai toruvé,enfin comme cela il marche...donc peut etre des mauvaises notations mais bon...
                                                        Sinon j'utilise python 3 ( 3.1.6 )en effet

                                                        voici le code
                                                        texte = input("Entrez un texte :")
                                                        lettre = input("Le mot à chercher est : ")
                                                        longueur=len(texte)
                                                        count=0
                                                        i=int(0)
                                                        j=int(0)
                                                        ## k=int(0)
                                                        
                                                        while i<=(longueur-1):
                                                            k = i
                                                            ##while j<len(lettre) and texte[k]==lettre[j]:
                                                            while i<longueur and j<len(lettre) and texte[i]==lettre[j]:
                                                                i = i+1
                                                                ##k = k+1
                                                                j = j+1
                                                                if j==len(lettre)-1:
                                                                    count=count+1
                                                            j = 0
                                                            i = i+1
                                                        
                                                        print("Le mot",lettre,"apparait",count,"fois.")
                                                        
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          4 novembre 2010 à 20:27:46

                                                          Entrez un texte :coucou
                                                          Le mot à chercher est : cou
                                                          Le mot cou apparait 1 fois.


                                                          ???

                                                          Votre professeur vous apprend les normes comme la PEP 8 par exemple ?
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            7 novembre 2010 à 11:56:39

                                                            heu non en tout cas sa me dit rien du tout...
                                                            c'est quoi ?
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Anonyme
                                                              7 novembre 2010 à 12:57:47

                                                              Se sont un peu les règles de bonne conduite pour coder en python

                                                              google + pep 8
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Exercice Python

                                                              × 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