php Boucle PHP, paramètre d'arrêt while()

Nicolas

Membre
Salut,

Ce n'est pas grand chose mais comme je continue mon apprentissage de PHP j'ai une question à propos d'une boucle while() traitée dans le tuto PHP de Grafikart.
La voici, elle est assez simple et ultra-connue
PHP
<?php
$chiffre = null;

while ($chiffre !== 10) {
    $chiffre = (int)readline('Entrez une valeur: ');
}

echo 'Bravo vous avez trouvé le bon chiffre';

On détermine une valeur, ici 10, et on demande à l'utilisateur de rentrer des chiffres jusqu'à ce qu'il tombe sur le bon.
En l'état actuel du code la boucle s'arrête lorsque le bon chiffre est trouvé.

On peut ne laisser qu'une seule chance à l'utilisateur en intégrant un break; en dessous de $chiffre = (int)readline('Entrez une valeur: '); mais à ce moment là la boucle s'arrête bien mais le message Bravo vous avez trouvé le bon chiffre s'affiche... même si la valeur renseignée n'est pas la bonne.
  • Comment afficher un message différent lorsque la valeur rentrée est fausse dans ce cas là ?
  • Si maintenant je voulais laisser 3 chances à l'utilisateur, quel code je dois rajouter ?
Thanks !
 
Solution
@Nicolas , je crois qu'on tient le bon bout... par forcément la plus académique, mais c'est une bonne base..

PHP
<?php
$chiffre = null;
$tentative = 1; // déclaré à 1, à 3 il n'y aura plus de tentative possible

while ($chiffre !== 10 && $tentative <= 3 ) {
    $chiffre = (int)readline("\nEntrez une valeur: ");
    $tentative++;// on incrémente le nombre de tentative

if ($chiffre == 10) {
        echo "Bravo vous avez trouvé le bon chiffre";
    }
    else {
    echo"\nAie aie, la réponse n'est pas correcte";
    }
} // fin du while ici

if ($tentative >= 3 && $chiffre != 10){ // si le nombre de tentative est = ou sup à 3 et que la réponse n'est pas 10
    echo"\nDésolé plus de tentative possible";
    }...

Nicolas

Membre
Comment afficher un message différent lorsque la valeur rentrée est fausse dans ce cas là ?
J'ai trouvé pour celui-ci
PHP
<?php
$chiffre = null;

while ($chiffre !== 10) {
    $chiffre = (int)readline('Entrez une valeur: ');
    break;
}

if ($chiffre === 10) {
    echo 'Bravo vous avez trouvé le bon chiffre';
} else {
    echo 'La réponse n\'est pas correcte';
}

Mais le code pour déterminer combien de chance à l'utilisateur pour trouver la bonne valeur :unsure:
 

yule

Membre
Je vais chercher aussi
Franchement, j'ai pas trouvé... mais c'est pas loin...

Essaye de changer le chiffre de $tentative , un fois tu mets 2, un fois 3 et une fois 4 pour 3 réponses différentes (par contre avec le terminal php, tu as droit qu' à une réponse non ? :unsure:, je balbutie encore avec Visual code)

PHP
<?php
$chiffre = null;
$tentative = 1;

while ($chiffre !== 10 && $tentative <= 3 ) {
    $chiffre = (int)readline('Entrez une valeur: ');
    break;
}

if ($chiffre === 10) {
    echo 'Bravo vous avez trouvé le bon chiffre';
} else {
        $tentative++;
}
if ($tentative >= 3 or $chiffre != 10){
    echo"\nDésolé plus de tentative possible";
}
else{
    echo"\nEssaye encore, la réponse n\'est pas correcte";
}
?>

@Nicolas , merci , je voulais continuer à suivre le tuto php, mais tu ma grillée le cerveau avec ton histoire... :eek::ROFLMAO::ROFLMAO:
 
Dernière édition:

Nicolas

Membre
(par contre avec le terminal php, tu as droit qu' à une réponse non ? :unsure:, je balbutie encore avec Visual code)
Non tu as droit à autant de réponse que le code le permet.
Effectivement avec ton code on a droit à une seule tentative donc il y a un souci avec le code quelque part. Personnellement je ne suis pas capable de l'identifier comme ça à vue de nez mais je vais chercher aussi.
 

Nicolas

Membre
Bon, de ce que j'ai pu voir
  1. Il faut enlever le break sinon la boucle s'arrête au premier essai de toutes façons
  2. if ($tentative >= 3 or $chiffre != 10){ or n'existe pas en php il me semble, c'est || à la place
  3. echo"\nEssaye encore, la réponse n\'est pas correcte"; si tu quotes echo avec " " il ne faut pas échapper les ' avec \' sinon ça affiche \'
Bon c'est de la syntaxe, mais autant le relever.
Un autre souci c'est que si on donne la bonne réponse on a bien le message Bravo vous avez trouvé le bon chiffre mais également, en dessous, Essaye encore, la réponse n'est pas correcte
 

Nicolas

Membre
En fait c'est un problème d'incrémentation de $tentative car si on déclare $tentative = 4; alors le script s'arrête tout de suite sans qu'on puisse entrer une seule valeur.

Mais je te laisse suivre le tuto, ne te prends pas la tête !!
Moi aussi je m'y remets :)
 

yule

Membre
car si on déclare $tentative = 4; alors le script s'arrête tout de suite sans qu'on puisse entrer une seule valeur.
en fait c'est le but, car si $tentative est plus élevé que 3 => le quota est atteint et plus de tentative possible avec une valeur à 4, donc plus de possibilité de répondre (avec 1 ou 2 ou 3 , le script tourne.. pas juste mais il tourne), au dessus de 3 , il doit le bloquer

Très juste pour les ' à ma décharge, je ne code pas autrement qu'avec des " dans mes scripts... mais j'ai vu dans le cours des tableaux que ca code avec des '... aie aie

or et || c'est idem tout comme and et &&

Effectivement, a tout reprendre après le tuto.. c'est le 8 je crois ....
 

Nicolas

Membre
en fait c'est le but, car si $tentative est plus élevé que 3 => le quota est atteint et plus de tentative possible avec une valeur à 4, donc plus de possibilité de répondre (avec 1 ou 2 ou 3 , le script tourne.. pas juste mais il tourne), au dessus de 3 , il doit le bloquer
Oui je me suis mal exprimé, je voulais dire que ton code est juste en ce sens que si $tentative > 3 le script s'arrête bien. J'ai pu tester ça en déclarant directement $tentative = 4 mais le problème c'est que $tentative ne s'incrémente pas effectivement.

or et || c'est idem tout comme and et &&
Ah ben tu vois, Grafikart raconte des bêtises parce que dans sa vidéo 7 à 16:06 il dit "malheureusement ET et OU n'existent pas en PHP"
et donc il remplace par && et || mais peut-être aurait-il du préciser qu'il y avait une autre syntaxe, or et and.
Merci pour l'info donc.
 

yule

Membre
@Nicolas , je crois qu'on tient le bon bout... par forcément la plus académique, mais c'est une bonne base..

PHP
<?php
$chiffre = null;
$tentative = 1; // déclaré à 1, à 3 il n'y aura plus de tentative possible

while ($chiffre !== 10 && $tentative <= 3 ) {
    $chiffre = (int)readline("\nEntrez une valeur: ");
    $tentative++;// on incrémente le nombre de tentative

if ($chiffre == 10) {
        echo "Bravo vous avez trouvé le bon chiffre";
    }
    else {
    echo"\nAie aie, la réponse n'est pas correcte";
    }
} // fin du while ici

if ($tentative >= 3 && $chiffre != 10){ // si le nombre de tentative est = ou sup à 3 et que la réponse n'est pas 10
    echo"\nDésolé plus de tentative possible";
    }
    else{} // inutile
?>
 

Nicolas

Membre
Oui ça fonctionne !!
PHP
<?php
    echo 'Bravo yule vous avez trouvé le bon code';
?>
😅

Il y avait des petits sauts de ligne aux mauvais endroits donc j'ai fait ceci, en enlevant aussi ce que tu as commenté comme inutile :unsure:
PHP
<?php
$chiffre = null;
$tentative = 1;

while ($chiffre !== 10 && $tentative <= 3 ) {
    $chiffre = (int)readline("Entrez une valeur: ");
    $tentative++;

if ($chiffre == 10) {
        echo "Bravo vous avez trouvé le bon chiffre";
    }
    else {
    echo "Aie aie, la réponse n'est pas correcte\n";
    }
}
if ($tentative >= 3 && $chiffre != 10){
    echo "Désolé plus de tentative possible";
    }
?>

Tu gères quand même pas mal, je vais oublier ce code pour ce soir et essayer de le réécrire demain matin.
En tout cas merci (y)
 

yule

Membre
PHP
<?php
echo 'Bravo yule vous avez trouvé le bon code';
?>
😅
HAhahaha, joli !

Tu gères quand même pas mal

non , je bricole beaucoup et surtout dans l'intérêt de mon site (faut que je vire mes œillères) . En suivant une partie du tuto php, le but est de moins bricoler et être plus logique. Donc tout ça, c'est des bons exercices, même si j'en ai pas besoin pour mon site ! Toutefois avec ce tuto, j'ai remarqué que j'en suis encore au array() et non au [] argh... faudra que je corrige au fur et à mesure. (y)
 

L'occitan

Membre
Je ne comprends pas la déclaration de la variable $tentative = 1;
Si elle est déjà à 1 et qu'après la première tentative elle est incrémentée, elle passe à 2, puis 3...
Donc à la 2e valeur rentrée $tentative = 3 et puisque
PHP
if ($tentative >= 3 && $chiffre != 10){
    echo "Désolé plus de tentative possible";
}
Comment cela se fait-il qu'on puisse rentrer une 3e fois une valeur ?
 

Anthony

Membre
Tu as raison L'occitan, il aurait fallu écrire ceci plutôt

PHP
<?php
$chiffre = null;
$tentative = null; // on part de zéro

while ($chiffre !== 10 && $tentative < 3 ) { // < 3 au lieu de <= 3
    $chiffre = (int)readline("Entrez une valeur: ");
    $tentative++;
    var_dump($tentative); // on vérifie l'incrémentation de $tentative
if ($chiffre == 10) {
        echo "Bravo vous avez trouvé le bon chiffre";
    }
    else {
    echo "Aie aie, la réponse n'est pas correcte\n";
    }
}
if ($tentative >= 3 && $chiffre != 10){
    echo "Désolé plus de tentative possible";
    }
?>
 

Anthony

Membre
j'étais parti sur 3 tentatives (1, 2 , 3) et pas (0, 1 ,2)
Ici le code donne bien 3 tentatives, 1, 2 et 3.
0+1, 1+1, 2+1
mais effectivement, la manière de @Anthony est bien mieux et plus logique !
Un petit peu plus logique mais ce n'est pas manière, tu as tout fait.
Celui qui écrit un roman est l'auteur du roman, celui qui corrige une faute d'orthographe à la page 93 ne devient pas l'auteur du roman. :)
 

Ces discussions pourraient vous intéresser...

Yo ! J'ai une div sans bordure remplie de cellules horizontales auxquelles j'applique une bordure sur le bord bas pour les séparer entre elles. Le problème c'est que la dernière je ne veux pas de bordure basse puisqu'il n'y a plus de cellule sous elle. Je n'ai pas la main sur le HTML...
Recevez-vous ce type d'erreur avec vos fichiers PHP ? ErrorException: Method ReflectionParameter::getClass() is deprecated Des infos à ce sujet ? :unsure: Merci.
Bonjour à toutes et à tous, Dans la lignée des exercices PHP X, je vous propose aujourd'hui un exercice JavaScript ! Il est très simple et ne nécessite qu'une seule fonction. C'est une ligne de code que l'on doit trouver, elle doit être capable de fusionner 2 tableaux. Voici des...
Haut