Partage
  • Partager sur Facebook
  • Partager sur Twitter

petit exercice-création de fonction

    15 mai 2013 à 8:37:28

    Salut à tous,

       J'essaye de créer une fonction qui tombe le nombre de string "fizz" dans une liste. Voici mon code:

    def fizz_count(x):
        count=0
        for i in range(len(x)):
            if x[i]=="fizz":
                count=+1
                i=+1
            else:
                i=+1 
        return count         


    Et j'ai un problème, puisqu'il me compte qu'une fois le mot dans des listes où il apparait plusieurs fois. Un truc cloche donc dans mon code, savez-vous lequel?

    Merci pour vos futures réponses

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 mai 2013 à 9:19:48

      Quel est le format de x? D'ailleurs x, c'est pas un nom de variable très représentatif de ce que tu souhaites faire (en fait pas du tout...).

      Donne un exemple de valeur que pourrait prendre x.

      • Partager sur Facebook
      • Partager sur Twitter
        15 mai 2013 à 9:35:38

        x c'est une liste qui contient une liste de string!

        x=["fizz","allo","fizz","today"]



        • Partager sur Facebook
        • Partager sur Twitter
          15 mai 2013 à 9:36:12

          qui contient des strings en fait
          • Partager sur Facebook
          • Partager sur Twitter
            15 mai 2013 à 9:39:27

            Bonjour,

            C'est à titre informatif, mais si tu incrémente i en cours d'exécution, tu vas avoir des surprises :-)

            Le principe du range(...) est de renvoyer un itérable contenant des valeurs entre 2 bornes que tu choisis (par exemple [0, 1, 2]). La boucle for i in range(0, 5): attribue successivement à i les valeurs contenues dans cet itérable. En gros, c'est un foreach.

            Bien cordialement,

            Fab

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              15 mai 2013 à 9:39:46

              ok, et pourquoi i+=1 ?
              • Partager sur Facebook
              • Partager sur Twitter
                15 mai 2013 à 9:53:41

                Petit ajout :

                Vu que tu itères sur une liste de strings, tu peux faire

                #J'ai transformé ton "x" en "liste_mot", c'est plus explicite, je t'invite à toujours utiliser des noms explicites pour tes variables
                for mot in liste_mot:
                    if mot == 'fizzz':
                        print 'trouve'

                 EDIT : en prime, je viens de réaliser que tu fais i=+1, ce qui signifie : i vaut maintenant + 1, soit 1... Tu risques pas d'en sortir ^^



                -
                Edité par Ntcha 15 mai 2013 à 10:00:09

                • Partager sur Facebook
                • Partager sur Twitter
                  15 mai 2013 à 10:13:11

                  En gros, j'ai voulu raisonner comme ça:

                  1-créer une variable initialement égale à 0 qui servira à compter le nombre de fois où est apparu le mot

                  2-créer une boucle for pour i qui va de 0 à len(x) (c'est pour ça que j'utilise range qui permet l'itération)

                  3-créer une boucle if/else pour dire que si on tombe sur le mot qui nous intérésse, on rajoute une unité à la variable count. Ainsi à la fin de l'itération, celle-ci contient le nombre de fois où est apparu le mot.

                  J'ai plusieurs questions:

                  Si j'incrémente je n'ai pas besoin d'itération c'est ça?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 mai 2013 à 10:14:20

                    Et la deuxième: où se trouve le pépin dans mon code? C'est quand j'incrémente mon i?
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      15 mai 2013 à 10:24:02

                      oui car i est incrémenté automatiquement avec la boucle for, il aurait fallu faire cela.

                      count = 0
                      for i in range(len(x)):
                          if x[i] == "fizzz":
                              count += 1

                      Mieux encore

                      x.count("fizzz") # indique le nombre de fizzz dans x




                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 mai 2013 à 10:28:52

                        archaostol a écrit:

                        Si j'incrémente je n'ai pas besoin d'itération c'est ça?

                        Non, c'est plutôt que si tu itères avec range, tu n'as pas besoin d'incrémenter, fais le test, tu verras.

                        archaostol a écrit:

                        Et la deuxième: où se trouve le pépin dans mon code? C'est quand j'incrémente mon i?


                        Disons que ton code a plusieurs pépins, je vais te donner le code de la façon dont je l'aurai fait moi-même. J'espère que tu entreprendras la démarche de l'analyser, et pas de simplement le copier-coller :-)

                        def word_count(words_list, word_searched):
                            occurences = 0
                            for word in words_list:
                                if word == word_searched:
                                    occurences += 1
                            return occurences 

                        Explications :

                        1) je passe en paramètre une liste de mots, ainsi que le mot à chercher dans la liste. De ce fait, le jour où tu veux chercher un autre mot, tu ne dois pas réécrire une nouvelle fonction, mais simplement la réutiliser avec un autre paramètre. Cela s'appelle l'extensibilité

                        2) Je définis un compteur avec un nom explicite : occurences, comme son nom l'indique, il sert à compter le nombre d'occurence du mot cherché dans la liste de mots

                        3) je boucle sur les éléments de la liste de mots et pour chaque mot, je vérifie si il est identique au mot cherché. Si oui, alors j'incrémente occurences, si non, je ne fais rien.

                        4) je retourne occurences

                        EDIT : effectivement le count c'est le top :-) maintenant si c'est pour apprendre, rien ne vaut de réimplémenter les fonctions basiques pour comprendre leur fonctionnement

                        -
                        Edité par Ntcha 15 mai 2013 à 10:30:26

                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 mai 2013 à 10:35:45

                          Super, j'ai bien compris ton code!

                          En fait, pour le mien, je n'ai pas trop de choix. C'est un exercice de codecademy (site d'apprentissage).

                          Dernière question: connaissez-vous d'autres sites qui proposent des exercices par thème? (ex: boucle, foncton, POO, ...)

                          En tout cas, merci pour vos rapides réponses!

                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 mai 2013 à 11:18:17

                            En dehors du problème du i, le pépin dans ton code c'est que tu écris =+ et pas +=. x=+1 ça veut dire x = (+1), donc x = 1.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            OCaml, un langage expressif et performant qui vous ferait du bien.

                            petit exercice-création de fonction

                            × 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