IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Condition de sortie de boucle.


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Condition de sortie de boucle.
    Je reviens encore avec mon jeu de hasard, j'ai du refaire tout, j'étais hors sujet.... mais petit à petit, je progresse.
    Au démarrage de ma page, je sollicite l'utilisateur pour un nombre de coups maximums et j'incrémente un compteur à chaque proposition. Le compteur augmente bien mais la sortie de boucle ne se réalise pas quand le compteur dépasse le nombre de tentatives maximum. Pour le reste, tout semble fonctionner même si l'alerte vous avez perdu s'affiche après l'alerte vous avez gagné mais si déjà je pouvais arrêter la boucle au bon moment ... un problème à la fois.

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    	<meta name="TITLE" content="J'apprends le JavaScript ):"/>
    	<title>Je débute en javaScript ;)</title>
    	<!--link href="styles.css" rel="stylesheet" type="text/css"/-->
    	<script type="text/javascript" src="fichier_externe2.js"></script>
     
    </head>
    <body>
    	<div id="wrapper">
    		<header>
    			<h1>Le JavaScript en s'amusant ... </h1>
    				<form name="saisie" onsubmit="return Jouer()" method="post">
      					<input type="text"  name="user_Number" placeholder="Votre entrée ..." />
    					<input type="submit" value="OK" />
     
    				</form>
    		</header>
    		<main>
     
     
    		</main>
    	</div>
    </body>
    </html>

    fichier java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    var nb_Coup = prompt("Merci de vouloir indiquer le nombre de tentatives maximales :", "Nombres de tentatives");
    var compteur = 0;
    var numberToFind = Math.floor(Math.random() * 101);
     
     
    function Jouer() {
        console.log(numberToFind);
        console.log(nb_Coup + " tentatives max");
     
        var user_Number = document.forms["saisie"]["user_Number"].value;
     
        do {
            compteur++;
            console.log(compteur);
            if (user_Number !== "") {
                if (isNaN(user_Number)) {
                    alert("Ce n'est pas un un nombre !");
                    return false;
                }
            } else {
                alert("Ce champ doit être renseigné");
                return false;
            }
     
            if (user_Number < numberToFind) {
                alert("le nombre est trop petit");
                return false;
            } else if (user_Number > numberToFind) {
                alert("Votre nombre est trop grand");
                return false;
            } else {
                alert("Bravo ! Vous avez gagné :)");
            }
     
        }
        while (nb_Coup <= compteur);
        // alert("Vous avez perdu !");
     
     
    }
    Merci de votre aide

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Ca ne fonctionne pas parce que conceptuellement parlant ça ne peut pas fonctionner.

    En effet tu fais une boucle pour qui traite l'ensemble des essais pour une tentative alors qu'il ne faut faire qu'une seule comparaison pour chaque tentative. Bref ta boucle ne sert à rien.

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <!DOCTYPE html>
    <html lang="fr">
    <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
     <meta name="TITLE" content="J'apprends le JavaScript ):"/>
     <title>Je débute en javaScript ;)</title>
     <!--link href="styles.css" rel="stylesheet" type="text/css"/--> <script>
      var nb_Coup = prompt("Merci de vouloir indiquer le nombre de tentatives maximales :", "Nombres de tentatives");
      var compteur = 0;
      var numberToFind = Math.floor(Math.random() * 101);
       
      function Jouer() {
       console.log(numberToFind);
       console.log(nb_Coup + " tentatives max");
       
       var user_Number = document.forms["saisie"]["user_Number"].value;
       
       compteur++;
       console.log(compteur);
       if (user_Number !== "") {
        if (isNaN(user_Number)) {
         alert("Ce n'est pas un un nombre !");
         return false;
        }
       } else {
        alert("Ce champ doit être renseigné");
        return false;
       }
       
       if (compteur >= nb_Coup)
       {
        alert("perdu !!! le nombre à trouver était "+numberToFind);
        return true;
       }
       
       document.getElementById('coups').innerHTML = "Reste : "+(nb_Coup-compteur);
       
       if (user_Number < numberToFind) {
        alert("le nombre est trop petit");
        return false;
       } else if (user_Number > numberToFind) {
        alert("Votre nombre est trop grand");
        return false;
       } else {
        alert("Bravo ! Vous avez gagné :)");
        return true;
       }
       
      }
     </script>
     
    </head>
    <body>
     <div id="wrapper">
      <header>
       <h1>Le JavaScript en s'amusant ... </h1>
        <form name="saisie" onsubmit="return Jouer()" method="post">
           <input type="text"  name="user_Number" placeholder="Votre entrée ..." />
         <input type="submit" value="OK" />
        </form>
        <div id="coups"></div>
      </header>
      <main>
     
     
      </main>
     </div>
     <script>
     document.getElementById('coups').innerHTML = "Reste : "+(nb_Coup-compteur);
     </script>
    </body>
    </html>

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bref ta boucle ne sert à rien.
    jpense que sa boucle sert bien. il s'est juste planté il incrémente compteur, mais compare qq <= compteur qui sera tjs vrai tant que compteur augmente...

    1) la comparaison à faire étant (en fait) compteur <= nb_coup

    @ccacc02
    ps: c'est bien d'indenter ton code, je suis pas intervenu sur ton autre discussion parce que ca faisait saigner les yeux

    2) tes tests de sortie de boucle sont pas bon. Tu veux sortir de la boucle SI tu as trouvé le résultat...sinon tu restes dans ta boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        if (user_Number < numberToFind) {
            alert("le nombre est trop petit");
            //return false;
        } else if (user_Number > numberToFind) {
            alert("Votre nombre est trop grand");
            //return false;
        } else {
            alert("Bravo ! Vous avez gagné :)");
            return true //<--------
        }

  4. #4
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par galerien69 Voir le message
    jpense que sa boucle sert bien. il s'est juste planté il incrémente compteur, mais compare qq <= compteur qui sera tjs vrai tant que compteur augmente...
    La boucle ne sert à rien puisqu'elle compare n fois la même valeur. De facto une seule fois suffit !

    De plus le code que j'ai posté fonctionne (du moins je l'espère) sans la moindre boucle. C'est un indice. Non ?

  5. #5
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    Si, la boucle ne sert à rien.

    le nombre de coup est incrémenté à chaque fois que l'utilisateur "propose" sa réponse.

  6. #6
    Invité
    Invité(e)
    Par défaut
    La boucle ne sert à rien puisqu'elle compare n fois la même valeur. De facto une seule fois suffit !
    le jeu que ccacc02 c'est le truc de base que t'apprends au début:
    tu donnes 7 chances (ou plus) pour trouver un nombre, soit tu le trouves et c'est bon, soit tu le trouves pas et t'as perdu.
    ici, la boucle, c'est le nombre de chances que tu as.

    alors oui tu peux faire une récursive si çà te plait, (ou passer par le dom), mais je persiste à dire que le but de l'exercice c'est de faire une boucle


    De plus le code que j'ai posté fonctionne (du moins je l'espère) sans la moindre boucle. C'est un indice. Non ?
    concernant ton code, c'est l'approche que j'aime pas trop (çà n'engage que moi). Quand quelqu'un poste une question, je trouve pas top de lui dire: ce que tas fait c'est usuelle: fais autrement. (éventuellement si çà peut pas marcher c'est différent). Je trouve bien plus pertinent de lui donner la réponse précise à la question qu'il pose:
    "mais la sortie de boucle ne se réalise pas quand le compteur dépasse le nombre"
    et en l'occurrence c'est parce qu'il s'est planté dans l'ordre des opérandes

    la après tu peux discuter de l'intérêt de la boucle etc, mais pour moi la première réponse à donner c'est celle qui correspond à la question posée.

    qu'ils y aient des erreurs ou pas dans ton code en fait c'est pas très important, mais je me doute que tu l'as testé (ce qu'on fait tous bien sûr )

    ps: je dis pas que ta code sert à rien, c'est bien de proposer une approche différente
    Dernière modification par ProgElecT ; 30/09/2018 à 18h37.

  7. #7
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Quand je vois quelqu'un qui écrit "je m'a tromper" je ne me contente pas de lui dire qu'il faut écrire "je m'a trompé" sous prétexte qu'il étudie le participe passé.
    Mais ça n'engage que moi.

  8. #8
    Invité
    Invité(e)
    Par défaut
    bj,

    apparemment quelqu'un édite mes posts pour corriger l'ortograf.

    malheureusement il crèe d'autant plus de fautes. je crèe une autre réponse, il faudrait pas que le correcteur zélé reedite ensuite.

    0) posts (c'est bien le mot anglais désiré à l'écriture, sinon je crois c'est message)
    1) j'écris jamais çà. Et çà ne s'écrit quasi jamais. çà concerne un lieu
    2) usuelle=>useless (c'est évidemment bien useless qu'il faut lire que je trouve plus proche sémantiquement que inutile... pour moi useless a une connotation un peu plus réductrice)
    3) la après (ironiquement là prend un accent). je doute avoir écrit cette particule ...
    4) qu'ils y aitent pe c'est une faute de mon cru

    d'une manière générale, j'apprécierais être prévenu qd mes posts sont édités...d'autant plus qd mes propos sont déformés (usuelle=>useless!!!). Qd on vient me rajouter des fautes...bon c'est pas top mais je peux supporter (merci qd même pour l'intention?)

    Mais ça n'engage que moi.
    @badaze sauf qu'il a pas tord de bout en bout et la piste qu'il prend est viable.

    ps: vraiment malheureux, j'écris quasi tt le temps des brouillons..il a fallu d'une fois

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 058
    Points : 44 588
    Points
    44 588
    Par défaut
    Bonjour,
    Tout d'abord :
    apparemment quelqu'un édite mes posts pour corriger l'ortograf.
    Je ne doute pas un instant que tu ais pris connaissance des règles en vigueur sur le forum !
    A relire donc : IV-C. Exprimez-vous clairement en bon français

    Normalement tu dois voir en bas du message édité l'auteur de l'édition et la raison de celle-ci si elle a été renseignée.

    malheureusement il crèe d'autant plus de fautes. je crèe une autre réponse, il faudrait pas que le correcteur zélé reedite ensuite.
    Nul n'est effectivement parfait en ce bas monde.

    1) j'écris jamais çà. Et çà ne s'écrit quasi jamais. çà concerne un lieu
    Je pense pourtant que tu devrais revoir cette partie de l’orthographe (concerne surtout le ça).

    3) la après (ironiquement là prend un accent). je doute avoir écrit cette particule ...
    C'est surement plus lisible que « als apres ».

    Perso je me refuse à éditer les messages car bien trop chronophage et la plupart du temps totalement inutile pour le « posteur », il ne changera pas son style, même si beaucoup font l'effort d'écrire correctement.
    Je le répète, nul n'est effectivement parfait en ce bas monde, et surtout pas moi

    Quoiqu'il arrive je trouve que l'utilisation du langage SMS sur un forum est quelque part un manque de respect pour les lecteurs.


    Concernant le sujet :
    je pense que tu as raison concernant le point sur utilisation des boucles, c'est le B.A.BA et il faut que CCACC02 mette le doigt sur ce qui cloche dans son code avant d'envisager d'autres solutions.

    L'utilisation de pseudo-code est également une bonne alternative à l'écriture finale.


    @badaze :
    je ne me contente pas de lui dire qu'il faut écrire "je m'a trompé"
    peut être voulais tu écrire « je me suis trompé »

    Concernant ton code il me semble que détourner les éléments et les événements associés, ici le <form>, n'est pas la meilleur des choses même si bien sûr c'est faisable, la logique de fonctionnement ne sautant pas forcément au yeux.

    Autre chose, teste en mettant la bonne réponse lors du dernier essai.

  10. #10
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Merci à tous ... je ne pensais pas que ma réponse susciterait un tel débat
    Merci @badaze pour ta réponse, même si elle ne répond pas à ma question. N'ayant pas vu certaines fonctions que tu proposes, je ne peux l'utiliser et doit faire suite à mon cours qui comprend les boucles : do ... while, while et for.

    Merci @galerien69 pour tes encouragements et ta réponse, cela me permet de me dire que je progresse et que mes efforts semblent être récompensés.

    Pour le reste, ma question n'avait pas pour but de mettre les membres du forums en porte à faux et de susciter un tel débat.

    J'ai donc bien compris que ma condition de sortie de boucle était dans le mauvais sens. Ceci dit, après avoir fait la modification, j'en suis au même point, je ne sors pas de la boucle, le compteur continue de s'incrémenter et je peux faire autant de tentatives que je le souhaite. en effet, si j'enlève les return false comme conseiller plus haut, je ne peux pas entrer de second voir troisième nombre... la boucle se bloque.
    Je continue de chercher...

    PS: Toutes mes excuses à ce forum pour la gêne occasionnée

  11. #11
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Dans une boucle do ... while on entre dedans toujours au moins une fois.

  12. #12
    Invité
    Invité(e)
    Par défaut
    j'en suis au même point, je ne sors pas de la boucle, le compteur continue de s'incrémenter
    que vaut nb_coup?
    ca peut être subtile parce que prompt('..') te retourne un string.
    quand tu compare int<string, tu as une coercion qui est faite et la spec tente de convertir ton string en nombre
    dans le cas ou c'est pas "convertissable" ton string devient NaN et quand tu compares un entier (compteur) avec NaN la comparaison retourne toujours faux.

    pour commencer tu devrais imposer
    et si tu vois que ton algo marche alors tu réécriras plus tard
    var nb_coup = prompt('...')

    et pblmt mettre en place le même type de check que tu as fait pour user_Number

    PS: Toutes mes excuses à ce forum pour la gêne occasionnée
    t'as pas à t'excuser, c'est moi qui écrit avec mes gros doigts

  13. #13
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    Citation Envoyé par CCACC02 Voir le message
    J'ai donc bien compris que ma condition de sortie de boucle était dans le mauvais sens. Ceci dit, après avoir fait la modification, j'en suis au même point, je ne sors pas de la boucle, le compteur continue de s'incrémenter et je peux faire autant de tentatives que je le souhaite. en effet, si j'enlève les return false comme conseiller plus haut, je ne peux pas entrer de second voir troisième nombre... la boucle se bloque.
    Je continue de chercher...
    Alors primo, il faut que tu comprenne que la partie JavaScript ne contrôle en rien le déroulé des séquences.
    C'est le navigateur qui lui donne la main temporairement quand on valide le formulaire, et ton code javascript (via son return à false) ne fait qu'annuler son envoi vers un serveur

    Ton idée de boucle est complètement en dehors des principes html/js.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <!DOCTYPE html>
    <html lang="fr">
    <head>
      <meta charset="UTF-8" />
      <title>Dialogue ...</title>
    </head>
    <body>
      <h2>Trouver un nombre entre 0 et 100</h2>
      <input type="text"  id="user_Number" placeholder="Votre entrée ..." />
      <button id="id_bouton" >OKi</button>
      <div id="Zone_message"></div>
      <script>
        var
          zeBoutton = document.getElementById('id_bouton'),
          zeInput  = document.getElementById('user_Number'),
          nb_Coup = prompt("Merci de vouloir indiquer le nombre de tentatives maximales :", "Nombres de tentatives"),
          compteur = 0,
          numberToFind = Math.floor(Math.random() * 101)
        ;
        zeInput.value = ""; // remise à vide, avant de commencer.
     
        zeBoutton.onclick = function() {
          let
            val_OK = false,
            message = ` Tentative n°${++compteur} / ${nb_Coup} => ${zeInput.value} <= `
          ;
     
          if (zeInput.value == "")                message += "<br><br>Ce champ doit être renseigné";
          else if ( isNaN(zeInput.value))         message += "<br><br>Ce n'est pas un un nombre !";
          else if ( zeInput.value<numberToFind )  message += "<br><br>le nombre est trop petit";
          else if ( zeInput.value>numberToFind )  message += "<br><br>le nombre est trop grand";
          else {
            val_OK = true;
            message += "<br><br>Bravo ! Vous avez gagné :)";
          }
          if (val_OK)
            {
              zeInput.disabled = true;
              zeBoutton.disabled = true;
            }
          else if ( compteur >= nb_Coup)  // programmation défensive
            {  
              zeInput.disabled = true;
              zeBoutton.disabled = true;
              message +=  "<br> Nombre de tentatives épuisées";
            }
          else zeInput.value = "";
          Messager.Envoi(message);
        }
        // objet ultra simplifié
        var Messager = {
          zone    :document.getElementById('Zone_message'),
          Envoi(msgTxt) { this.zone.innerHTML = msgTxt; }
        };
      </script>
    </body>
    </html>

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    tant qu'à (bien) faire... : <input type="number" /> !

  15. #15
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Tout à fait d'accord
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    tant qu'à (bien) faire... : <input type="number" /> !
    Oui, c'est la première chose que j'ai faite... mais le prof était pas d'accord car il faut pouvoir rentrer du texte pour un message d'alerte : ceci n'est pas un nombre

    Mais ça y est, mes problèmes sont résolus jai opté pour une boucle while avec la condition compteur < (nb_Coup-1) car comme on part de 0, il y a un coup en plus de possible ... pour 3 par exemple , 0 / 1 / 2 / 3 ... ça fait quatre coups. Si je fais commencer le compteur à +1, celui ci arrive à 4 pour 3 coups. Donc j'ai opté pour cette solution. Et la cela fonctionne !

    Mais je vous l'accorde, certaines solutions plus avancées fonctionnent.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( compteur < (nb_Coup-1) )
    Merci à tous

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CCACC02 Voir le message
    ...N'ayant pas vu certaines fonctions que tu proposes, je ne peux l'utiliser et doit faire suite à mon cours qui comprend les boucles : do ... while, while et for....
    @psychadelic
    Bravo, tu as écrit un joli code...

    Mais en quoi ça répond à la problématique et AU NIVEAU (technique) de CCACC02 ??
    Tu es hors sujet.

    Il faut faire preuve de pédagogie, et se mettre au niveau de celui qui pose la question.

    Ce jeu est un grand classique : il existe 1000 façons de rédiger le code JS.
    Du niveau "débutant" au niveau "expert".
    Dernière modification par Invité ; 01/10/2018 à 16h11.

  17. #17
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    Mais en quoi ça répond à la problématique ...
    J'ai pourtant mis une explication :
    Alors primo, il faut que tu comprenne que la partie JavaScript ne contrôle en rien le déroulé des séquences.
    C'est le navigateur qui lui donne la main temporairement quand on valide le formulaire, et ton code javascript (via son return à false) ne fait qu'annuler son envoi vers un serveur

    Ton idée de boucle est complètement en dehors des principes html/js.
    le code présenté est justement la pour lui montrer qu'il n'y pas de boucle (do / while) à inscrire dans son code.

    Citation Envoyé par CCACC02 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( compteur < (nb_Coup-1) )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( ++compteur < nb_Coup )
    fonctionne pareillement
    et fait directement l'incrémentation du compteur

  18. #18
    Invité
    Invité(e)
    Par défaut
    @CCACC02

    Montre-nous ton code "qui marche".

    Ça intéressera et profitera à d'autre.

  19. #19
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Pas de soucis
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    var nb_Coup = prompt("Merci de vouloir indiquer le nombre de tentatives maximales :","Nombres de tentatives");
    var compteur = 0;
    var numberToFind = Math.floor(Math.random()*101);
     
     
    function Jouer(){
     
      var user_Number=document.forms["saisie"]["user_Number"].value;
     
      while ( ++compteur <= nb_Coup ) {
        if (user_Number!==""){
          if (isNaN(user_Number)){
            alert("Ce n'est pas un un nombre !");
            return false;
          }
        } else {
          alert("Ce champ doit être renseigné");
          return false;
        }
     
        if ( user_Number < numberToFind ){
          alert("le nombre est trop petit");
          return false;
        }
        else if ( user_Number > numberToFind){
          alert("Votre nombre est trop grand");
          return false;
        }						
        else {
          alert("Bravo ! Vous avez gagné :)");
          return true;
        }	
     
      }
     
      alert("Vous avez utilisé vos " + nb_Coup + " tentatives. Vous avez perdu ! Le nombre à trouver était " + numberToFind +" .");
     
    }
    Voila, c'est conforme au travail que je devais fournir (je pense ). Merci à tous

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je te propose des améliorations.

    En effet, on n'a pas besoin de balise <form> ici, puisqu'on n'a rien à "envoyer" via le formulaire.

    1- Remplace :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form name="saisie" onsubmit="return Jouer()" method="post">
      <input type="text"  name="user_Number" placeholder="Votre entrée ..." />
      <input type="submit" value="OK" />
    </form>
    par :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      <input type="number" min="1" max="100" id="user_Number" placeholder="Nombre entre 1 et 100..." style="width:180px;"/>
      <input type="button" value="OK" onclick="Jouer();"/>
    Tu remarqueras que j'ai remplacé :
    • name="user_Number" par id="user_Number".
    • <input type="submit"...> par <input type="button"...> (on n'a rien à "soumettre")
    • onsubmit="Jouer(); (du <form>) par onclick="Jouer(); (sur le bouton "OK").

    Et je persiste à dire qu'ici, un <input type="number"...> est tout indiqué (n'en déplaise à ton prof. !).

    2- on peut aussi utiliser un <button> :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      <input type="number" min="1" max="100" id="user_Number" placeholder="Nombre entre 1 et 100..." style="width:180px;"/>
      <button type="button" onclick="Jouer();"/>OK</button>

    3- Dans ton code JS, il suffit de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      var user_Number=document.forms["saisie"]["user_Number"].value;
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      var user_Number=document.querySelector("#user_Number").value;
    Ce qui donne :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    var nb_Coup = prompt("Merci de vouloir indiquer le nombre de tentatives maximales :","Nombres de tentatives");
    var compteur = 0;
    var numberToFind = Math.floor(Math.random()*101);
     
    function Jouer(){
      var user_Number=document.querySelector("#user_Number").value;
     
      while ( ++compteur <= nb_Coup ) {
        if (user_Number!==""){
          if (isNaN(user_Number)){
            alert("Ce n'est pas un un nombre !");
          }
        } else {
          alert("Ce champ doit être renseigné");
        }
     
        if ( user_Number < numberToFind ){
          alert("le nombre est trop petit");
        }
        else if ( user_Number > numberToFind){
          alert("Votre nombre est trop grand");
        }
        else {
          alert("Bravo ! Vous avez gagné :)");
        }
      }
      alert("Vous avez utilisé vos " + nb_Coup + " tentatives. Vous avez perdu ! Le nombre à trouer était " + numberToFind +" .");
    }

    4- Ensuite, je répète : tu n'as pas de test pour vérifier qu'on entre bien une valeur NUMERIQUE pour nb_Coup !!
    Si on met n'importe quoi (autre chose qu'un NOMBRE, ENTIER, entre 1 et 100), le reste n'a plus de sens (compteur <= nb_Coup).

    5- De plus, on peut définir des variables pour numberToFind_Max, nb_Coup_Min, nb_Coup_Max, pour rendre le code plus "paramétrable".

    Ce qui donne au final : (démo : https://codepen.io/jreaux62/pen/vVOPoR )

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      <input type="number" min="1" max="100" id="user_Number" placeholder="Nombre entre 1 et 100..." style="width:180px;"/>
      <button type="button" onclick="Jouer();"/>OK</button>
      <br /><br /><button type="button" onclick="Rejouer();"/>Rejouer</button>
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    'use strict';
    // initialisation
    var compteur = 0;
    var numberToFind_Max = 100;
    var numberToFind = Math.floor(Math.random()*(numberToFind_Max+1));
     
    var nb_Coup_Min = 1;
    var nb_Coup_Max = 20;
    var nb_Coup = get_nb_Coup();
    // nombre de coups
    function get_nb_Coup(){
      nb_Coup = prompt("Merci d'indiquer le nombre de tentatives maximales :","(nombre entre "+nb_Coup_Min+" et "+nb_Coup_Max+")");
      nb_Coup = Number(nb_Coup); // Numerique
      console.log(nb_Coup);
     
      if( isNaN(nb_Coup) || nb_Coup < 1 || nb_Coup > 20 )
      {
        alert("Ce n'est pas un nombre entre entre "+nb_Coup_Min+" et "+nb_Coup_Max+" !");
        nb_Coup = get_nb_Coup();
      } else {
        alert("Vous avez choisi "+nb_Coup+" tentatives maximum. \nCommencez vos paris !");
      }
      return nb_Coup;
    }
     
    function Rejouer(){
      compteur = 0;
      numberToFind = Math.floor(Math.random()*101);
      nb_Coup = get_nb_Coup();
    }
    function Jouer(){
      var user_Number=document.querySelector("#user_Number").value;
      console.log(nb_Coup);
      compteur++;
      if ( compteur <= nb_Coup ) {
        if (user_Number!==""){
          if (isNaN(user_Number)){
            alert("Ce n'est pas un un nombre !");
          }
        } else {
          alert("Ce champ doit être renseigné");
        }
     
        if ( user_Number < numberToFind ){
          alert("le nombre est trop petit");
        }
        else if ( user_Number > numberToFind){
          alert("Votre nombre est trop grand");
        }
        else {
          alert("Bravo ! Vous avez gagné :)");
        }
      } else {
      alert("Vous avez utilisé vos " + nb_Coup + " tentatives. Vous avez perdu ! Le nombre à trouver était " + numberToFind +" .");
      }
    }

    SAUF QUE... il n'y a PLUS de boucle while !! (car elle génère une boucle infinie !!)
    ARGHH ! On sort de ton exercice... Désolé...

    N.B. Ce n'est pas Le nombre à trouer était..., mais Le nombre à trouver était...
    Dernière modification par Invité ; 01/10/2018 à 19h53.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ma fonction ne veut pas retourner un élément
    Par razbitume dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/03/2009, 17h25
  2. Fonction SetTimer : écart de temps pas respecté ?
    Par sivaller dans le forum Débuter
    Réponses: 2
    Dernier message: 20/11/2008, 09h50
  3. Une fonction qui ne veut pas de mes variables
    Par zebulondu54 dans le forum Langage
    Réponses: 5
    Dernier message: 09/06/2008, 05h41
  4. Réponses: 1
    Dernier message: 17/10/2007, 10h04
  5. resultat de la fonction ajdate qui ne respecte pas les critères
    Par alassanediakite dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 02/09/2007, 00h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo