Partage
  • Partager sur Facebook
  • Partager sur Twitter

nombre de voyelles d'un mot

et voilà ça marche pas !

    14 août 2018 à 15:10:51

    Merci de la re-lecture critique de celle ou celui qui aura le temps 

    Régine

    function compterNbVoyelles(mot) {
        var nbVoyelles = 0;
        for (i = 0; i < mot.length; i++) {
            var lettre = mot[i].toLowerCase();
            if ((lettre === "a") || (lettre === "e") || (lettre === "i") || (lettre ==="o") || (lettre === "u") || (lettre === "y")) {
                nbVoyelles ++;
            }
        }
        return nbVoyelles;
    }
    
    console.log("le nombre de voyelles est : " + compterNbVoyelles(squamate));
    • Partager sur Facebook
    • Partager sur Twitter
    Régine Djalo
      14 août 2018 à 15:23:28

      Ca m'a l'air correct. En revanche, c'est relativement long à lire. Exemple d'une autre manière de faire, mais loin d'être la seule:

      function compterNbVoyelles(mot) {
          let nbVoyelles = 0;
          let voyelles = ['a', 'e', 'i', 'o', 'u', 'y'];
          for (let lettre of mot) {
              if (voyelles.includes(lettre.toLowerCase())) {
                  nbVoyelles ++;
              }
          }
          return nbVoyelles;
      }

      On aurait pu l'écrire d'encore plein d'autres manières, mais au moins là on ne vérifie pas pour chaque voyelle. On a une liste des voyelles, et on demande pour chaque lettre "est-ce que cette lettre en minuscule est dans la liste des voyelles?". C'est généralement plus lisible.

      On essaie aussi d'utiliser l'anglais au maximum, pour rester cohérent avec les mot-clefs et les noms de fonctions du langage qui sont en anglais. Mais après pour son code personnel c'est selon l'envie. :)



      -
      Edité par Genroa 14 août 2018 à 15:27:32

      • Partager sur Facebook
      • Partager sur Twitter
      /!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
        14 août 2018 à 15:25:37

        Hello

        j'en suis au début ... j'ai pas encore appris les let ... mais sur le mien ce qui cloche visiblement c'est le console.log que je lui demande ? 

        enfin selon firefox ! 

        merci encore 

        • Partager sur Facebook
        • Partager sur Twitter
        Régine Djalo
          14 août 2018 à 15:28:50

          Dans ce contexte, let et var servent à la même chose : définir une variable locale. (c'est juste qu'on n'utilise pratiquement plus var, qui est obsolète et dangereux dans 99% des cas). Le problème ne vient pas de là. La fonction est correcte. Que contient la variable squamate?

          De plus, quel est le message d'erreur que retourne Firefox? Il aide toujours beaucoup à trouver l'erreur. :)

          -
          Edité par Genroa 14 août 2018 à 15:44:43

          • Partager sur Facebook
          • Partager sur Twitter
          /!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
            14 août 2018 à 16:26:52

            Bonjour,

            Le code fonctionne chez moi sous Mozilla pour Archlinux 61.0.1 (64-bit). Comme dit plus haut, l'erreur nous aidera à trouver l'origine du problème.

            Sinon, si le navigateur client supporte le standard ECMAScript jusqu'à l'ES7, on peut drastiquement réduire la taille du code.

            const vowelsCount = s => [...s].filter(l => ['a', 'e', 'i', 'o', 'u'].includes(l)).length
            
            vowelsCount('documentation') // 6
            vowelsCount('language') // 4

            Je donne le code à titre informatif (et pour éveiller la curiosité).

            • Partager sur Facebook
            • Partager sur Twitter
              14 août 2018 à 19:37:01

              Je n'ai pas présenté cette version (ES6 pas ES7 ici il me semble), car elle alloue un tableau à chaque appel de fonction. Pas très optimisé.
              • Partager sur Facebook
              • Partager sur Twitter
              /!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
                14 août 2018 à 21:19:06

                Genroa a écrit:

                Dans ce contexte, let et var servent à la même chose : définir une variable locale. (c'est juste qu'on n'utilise pratiquement plus var, qui est obsolète et dangereux dans 99% des cas). Le problème ne vient pas de là. La fonction est correcte. Que contient la variable squamate?

                De plus, quel est le message d'erreur que retourne Firefox? Il aide toujours beaucoup à trouver l'erreur. :)

                -
                Edité par Genroa il y a environ 5 heures


                "Dangereux", un peu abusif non ?
                • Partager sur Facebook
                • Partager sur Twitter
                Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
                  15 août 2018 à 11:35:39

                  Bonjour,

                  Une (très) petite optimisation de la solution de @Genroa :

                  function compterNbVoyelles(mot) {
                      mot = mot.toLowerCase();
                      const voyelles = ['a', 'e', 'i', 'o', 'u', 'y'];
                      let nbVoyelles = 0;
                  
                      for (let lettre of mot) {
                          if (voyelles.includes(lettre)) {
                              nbVoyelles ++;
                          }
                      }
                      return nbVoyelles;
                  }

                  Comme dit plus haut, si les const/let t'embrouillent, ici tu peux utiliser des var sans problème :)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 août 2018 à 15:34:09

                    Bonsoir 

                    désolée de n'avoir pas répondu Genroa, je soutenais mon projet 1 et avais quelques petites choses à corriger ! 

                    quand j'écris la fin du code à partir de console.log, j'ai le souhait de demander à la machine de me calculer le nombre de voyelles contenues dans le mot : squamate 

                    et c'est ça que la machine me refuse.

                    Sur firefox le message est que "squamate" est non défini ... 

                    comment pourrais je écrire le code pour qu'il soit valable pas seulement pour un mot mais pour tous les mots que je lui soumettrai ? 

                    function compterNbVoyelles(mot) {
                        var nbVoyelles = 0;
                        for (i = 0; i < mot.length; i++) {
                            var lettre = mot[i].toLowerCase();
                            if ((lettre === "a") || (lettre === "e") || (lettre === "i") || (lettre ==="o") || (lettre === "u") || (lettre === "y")) {
                                nbVoyelles ++;
                            }
                        }
                        return nbVoyelles;
                    }
                     
                    console.log("le nombre de voyelles est : " + compterNbVoyelles(squamate));



                    • Partager sur Facebook
                    • Partager sur Twitter
                    Régine Djalo
                      15 août 2018 à 16:25:34

                      Si tu ne mets pas de guillemets, le mot est interprété comme une variable ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 août 2018 à 17:00:54

                        squamate est une variable nommée squamate. "squamate" est une chaine de caractères, contenant les lettres s, q, u, a, etc. Ce sont deux choses différentes. :)

                        -
                        Edité par Genroa 15 août 2018 à 17:01:09

                        • Partager sur Facebook
                        • Partager sur Twitter
                        /!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
                          15 août 2018 à 17:36:42

                          j'avoue que là j'atteins mes limites dans la compréhension de ce langage  ! 

                          la variable, en tous cas, celle que je voudrais calculer est le nombre de voyelle dans un "mot"

                          ce "mot" est une chaine ... squamate qui est un mot  est donc aussi une chaine ... non ? 

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Régine Djalo
                            15 août 2018 à 20:37:42

                            Tu peux voir les variables comme des tickets de pressing. Lorsque tu fais ça:

                            var maValeur = 6;

                            maValeur est une variable, et 6 est une valeur. Donc 6 est stocké quelque part en mémoire, et tu peux y accéder via maValeur qui référence cette valeur. On simplifie souvent en disant qu'on "stocke" 6 dans maValeur.

                            Une chaine de caractères est une valeur, définie grâce aux guillemets:

                            var monNom = "Bruno";

                            Lorsqu'on appelle une fonction, on peut donner une variable référençant une valeur, ou directement une valeur:

                            var maChaine = "squamate";
                            var nombreVoyelles = compterNombreVoyelles(maChaine);
                            // Ou:
                            var nombreVoyelles = compterNombreVoyelles("squamate");

                            Mais ce sont deux choses bien différentes. Sans les guillemets, la machine s'attend à ce que squamate soit une variable et pas une chaine. Comme aucune variable nommée squamate n'a été définie avant d'être utilisée, il s'arrête et lance l'erreur. :)



                            -
                            Edité par Genroa 15 août 2018 à 20:42:23

                            • Partager sur Facebook
                            • Partager sur Twitter
                            /!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
                              16 août 2018 à 14:47:19

                              Merci beaucoup de tout cela Genroa ... c'est bien plus clair comme cela ... je retente mon code et te fais signe 

                              encore merci et bonne journée

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Régine Djalo

                              nombre de voyelles d'un 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