exercice Boucle et condition en PHP

Wazz9

Membre
Hello à tous,

Suite à la discussion : PHP - Boucle PHP, paramètre d'arrêt while()

Je vous propose de compliquer un tout petit peu l'exercice,
On repart avec le même code bien entendu
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";
    }
?>

Lorsqu'une valeur est rentré, non seulement PHP doit nous dire si la réponse ou bonne ou pas et si elle ne l'est pas PHP doit nous dire également si nous sommes en dessous ou au dessus de la bonne valeur. Le code doit être modifié pour autoriser 5 tentatives. La valeur cherchée ne doit pas dépasser 20.

Je vous propose de ne pas poster votre réponse avant 24 heures, soit disons pas avant mardi soir 20h00.
Les questions sont autorisées pour nous aider entre nous, on peut poster quelques bouts de codes mais le moins possible, essayez de décrire votre problème en pseudo-code plutôt qu'en véritable PHP.

Le jeu est ouvert à tous,
Espérons juste que l'un d'entre nous ait la réponse d'ici mardi soir !! :D

PS: si vous trouvez le bon code vous pouvez le signaler dans la discussion avant mardi soir.
 

Nicolas

Membre actif
C'est vrai qu'il y a juste des petites conditions à rajouter, je peux dire que j'ai la solution mais c'était plutôt très facile.
Ce que nous a sorti @yule sur l'exercice précédent était autrement plus compliqué (enfin pour mon niveau).

Rien de grave cependant, je ne connais pas le niveau en PHP de Wazz donc ça peut être un bon exercice pour lui et pour tous ceux ou celles qui pourraient s'y frotter.
Bon c'est clair que sur cet exercice yule a trouvé la solution en plongeant des bouts de viande dans du fromage fondu avec la main droite et en se rasant de la main gauche !

Rendez-vous mardi 20h00 pour le rendu des copies.
@Jack: trouve nous un peu plus compliqué encore... on progresse par étape. On peut repartir d'une feuille blanche ou de ce code.
 

yule

Membre
Bon c'est clair que sur cet exercice yule a trouvé la solution en plongeant des bouts de viande dans du fromage fondu avec la main droite et en se rasant de la main gauche !
(y)(y) Très bon résumé, bon j'ai encore du faire la vaisselle

@Wazz9 , très bonne idée ! Et c'est l'occasion d'en faire un code propre.

Alors à 20h00....
 

yule

Membre
Re,

Pour rester dans cette continuité, je suggère quelques améliorations dans la logique du jeu et avec les précisions de @Wazz9 et l'envie initiale de @Nicolas

Utiliser le script en introduction ci-dessus:

1) indiquer si la réponse est au dessus ou au dessous du chiffre à trouver
2) le chiffre à trouver doit être entre 1 et 20 (si 0 ou plus de 20 => mettre un avertissement !)
3) le chiffre à trouver doit être un nombre aléatoire entre 1 et 20, il doit changer à chaque nouvelle partie (une partie = 5 tentatives)
4) Indiquer le nombre de tentative qui reste.. (maxi 5 tentatives)
5) si le chiffre est trouvé, indiquer le nombre de tentative qu'il aura fallu pour trouver la bonne réponse.
6) Selon l'indication du nombre des tentatives, indiquer tentative avec un "s" ou pas ..... 1 tentative, 2 tentatives.
7) pour tester nos essais, ajouter une ligne de triche en commentaire (avec //), une ligne qui peut afficher la réponse (pour nous permettre de tester toutes les variables)

Voili voilou et je vous assure que L'algorithmique (merci à @Jack ) va se savourer une fois réussi ! Enjoy !!!
A+
Yule
 

WWWest

Membre
Cool ces petits exercices ! Est-ce qu'on ne pourrait pas rajouter 24 heures pour ceux qui prennent le train en route ?
D'ici ce soir ça fait un peu court... Surtout avec les nouvelles conditions listées par yule. Pas évident !
 

Nicolas

Membre actif
D'ici demain soir ça risque de faire un peu long aussi.
Je propose qu'on reste à ce soir 20h00 puis on relance un exercice dans la foulée, qu'en penses-tu ?

Merci yule pour les complications.




Ah au fait: c'est bon j'ai le code ! :D
 

yule

Membre
Cool ces petits exercices ! Est-ce qu'on ne pourrait pas rajouter 24 heures pour ceux qui prennent le train en route ?
D'ici ce soir ça fait un peu court... Surtout avec les nouvelles conditions listées par yule. Pas évident !
Effectivement comme l'a dit @Nicolas , ca fait un peu long. De toute façon vient avec ce que tu as, l'idée est de partager et apprendre. Moi j'avoue que je n'ai pas encore le code... Je dois m'y mettre . Eh bon, auront nous toute la soluce ce soir ? This the question...

Ah mon avis , on aura tous des bouts de code plus juste ou plus pratique... Reste qu'il faudra en faire un en finalité, avec certainement toutes les meilleures parties de chacun.
A+
 

yule

Membre
Re !

Franchement, j'aurais dû faire le code avant de proposer des complications !!:unsure::p

Finalement, je suis arrivé a ce que je souhaitais non pas s'en mal, donc j'ai aussi le code. Après si c'est tout juste je pense pas mais l'essentiel est de partager nos connaissances ou le fruit de nos efforts, sacré algorithmique !

A touteli
 

Wazz9

Membre
Perso je suis à la ramasse, j'ai rien fait !
C'était pas une journée pour coder, trop de trucs à faire. Mais j'ai hâte de lire vos solutions (y)
 

yule

Membre
Dommage d'être si peu à s'essayer dans ce challenge. OU alors, ne pas zieuter les codes qui suivent et proposer à la suite. ON aura tout le loisir de corriger entre nous.

Voilà donc ma version (70 lignes.. un bon cru le 70 !!:giggle:)

PHP
<?php
$chiffre = null;                // on le déclare à rien
$tentative = null;              // départ du nombre de tentative à rien, merci Anthony !
$chiffrecache = rand(1, 20);    // un chiffre entre 1 et 20 au hasard
$chiffremin = 1;                // le chiffre mini à utiliser
$chiffremax = 20;               // le chiffre maxi à utiliser
$tentativemax = 4;              // le nombre de tentative avant la fin du jeu 0,1,2,3,4 =(5)

//<------ Pour tricher ou pour tester en live... ---->
//echo "la bonne réponse est $chiffrecache pour tester le jeu\n"; // pour tester, enlever les // avant l'echo de cette ligne

//<------ The boucle while ---->
while ($chiffre != "$chiffrecache" && $tentative <= "$tentativemax" ) {
    $chiffre = (int)readline("Entre une valeur entre 1 et 20 : ");

    $solde = ($tentativemax-$tentative); // calculer le solde restant au passage de la boucle
    $combien = "$tentative";             // pour éviter de se mélanger les pinceaux avec le pluriel..
    $tentative++;                        // on incrémente

    //<------ Définir le pluriel pour le solde des tentatives et le nb des essais // pas réussi à tout combiner en un---->

    If ($tentative == 4){
        $pluriel1 = "";
    }
    else {
        $pluriel1 = "s";
    }

    If ($combien == 0 ){
        $pluriel2 = "";
    }
    else {
        $pluriel2 = "s";
    }

    //<------ On ne dit pas au dernier essai qu'il te reste 0 tentative.. et on facilite l'affichage de la "suite"---->

    if ($tentative > 4){
        $suite ="";
    }
    else{
        $suite="Il te reste encore $solde tentative$pluriel1";
    }

    //<------ On peut enfin commencer !!!---->

    if ($chiffre == "$chiffrecache") {
        echo "Bravo ! Tu as trouvé la bonne réponse en $tentative essai$pluriel2";
    }
        elseif($chiffre > "$chiffrecache" && $chiffre >= "$chiffremin" && $chiffre <= "$chiffremax"){
            echo"Mauvaise réponse, ton chiffre est au-dessus de la bonne valeur. $suite\n";
    }
        elseif($chiffre < "$chiffrecache" && $chiffre >= "$chiffremin" && $chiffre <= "$chiffremax"){
          echo"Mauvais réponse, ton chiffre est en-dessous de la bonne valeur. $suite\n";
    }

    //<------ Avertissement si le chiffre est égal à 0 ou supérieur à 20 ---->

    else {
    echo "Aie caramba ! Ton chiffre doit être entre 1 et 20, avec $chiffre c'est pas vraiment le cas.. ! $suite\n";
    }

} // fin du while

//<------ Fin des devinettes si plus de 5 tentatives fausses ---->

if ($tentative >= "$tentativemax" && $chiffre != "$chiffrecache"){
    echo "Désolé après 5 tentatives infructueuses, le jeu est terminé..\nAh oui, le chiffre à trouver était $chiffrecache !";
    }
?>

Bonne bonne
Yule
 

Nicolas

Membre actif
Voici le mien !

PHP
<?php
$chiffre = rand(1, 20);
$tentative = null;
$proposition = null;

// echo $chiffre;

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

if ($proposition == $chiffre) {
     echo "Bravo vous avez trouvé le bon chiffre";
    }
elseif ($proposition < $chiffre) {
    echo "Vous êtes en dessous de la valeur\n";
    if ((5 - $tentative) > 1) {
        echo "Il vous reste "  . (5 - $tentative) . " tentatives pour trouver la solution\n";
        } else {
           echo "Il ne vous reste plus qu'"  . (5 - $tentative) . " tentative pour trouver la solution\n";
        }
    }
elseif ($proposition > $chiffre) {
    echo "Vous êtes au dessus de la valeur\n";
    if ((5 - $tentative) > 1) {
        echo "Il vous reste "  . (5 - $tentative) . " tentatives pour trouver la solution\n";
        } else {
            echo "Il ne vous reste plus qu'"  . (5 - $tentative) . " tentative pour trouver la solution\n";
        }
    }
}
if ($tentative >= 5 && $proposition != $chiffre){
    echo "Désolé plus de tentative possible";
    }
?>
 

Nicolas

Membre actif
5) si le chiffre est trouvé, indiquer le nombre de tentative qu'il aura fallu pour trouver la bonne réponse.
Oulala... Et ça non plus je l'ai pas géré... ça me rappelle l'école, je lisais trop vite les énoncé, je finissais en premier et à la récré je m'apercevais que j'avais fait la moitié du devoir !

Bon ben yule, tu as gagné ce premier jeu !

congratulations applause GIF
 

Wazz9

Membre
Bravo les gars.
Vraiment j'ai pas eu le temps aujourd'hui mais je serais dedans pour le prochain exercice.
D'ailleurs PHP ou JS ou même un jeu HTML/CSS ?
 

yule

Membre
Cool, rien qu'avec nos deux exemples, on pourrait encore simplifier nos codes. (y)

Je trouve marrant nos manières différentes de résoudre les obligations (Ok, pas celles oubliés ou mal compris) je te rassure des fois , même souvent, y a que moi que me comprend !, C'est les années :whistle: Ca fait des exemples et surtout ca montre qu'en codant différemment, le résultat peut-être le même malgré tout.

Après y a pas de vainqueur, enfin si, notre connaissance qui s'étoffe ! (Je dois suivre encore la vidéo 7) mais c'est le genre de challenge qui fait avancer et c'est très intéressant , a poursuivre mais pas tous les jours...

Bonne bonne
Yule

Edit : en retestant, je remarque sur ton code que tu offres 6 possibilités avec un -1
 
Dernière édition:

Nicolas

Membre actif
Je trouve marrant nos manières différentes de résoudre les obligations
C'est intéressant oui, on peut avoir des approches différentes et PHP nous permet de les coder, c'est à dire que ce langage n'est pas "fermé", il y a les outils pour réaliser le code suivant l'inspiration du codeur.

En me relisant je vois du code complexifié pour rien
PHP
if ((5 - $tentative) > 1) {
    echo "Il vous reste "  . (5 - $tentative) . " tentatives pour trouver la solution\n";
    } else {
       echo "Il ne vous reste plus qu'"  . (5 - $tentative) . " tentative pour trouver la solution\n";
    }

// pourquoi faire compliqué quand il ne reste qu'une solution avec
echo "Il ne vous reste plus qu'"  . (5 - $tentative) . " tentative pour trouver la solution\n";
// alors que
echo "Il ne vous reste plus qu'une tentative pour trouver la solution\n";

Je suis un peu déçu de ne pas avoir bien vu toutes les complications, cela ne nous permet pas de comparer entièrement nos codes. Mais c'était le tout premier exercice donc ce n'est pas bien grave.
Maintenant que j'y pense, il y en avait une à rajouter qui aurait été pas mal, c'est d'indiquer si un chiffre avait déjà été proposé ou pas. Cela nous aurait obligé à stocker les valeurs rentrés par l'utilisateur.

a poursuivre mais pas tous les jours...
On peut en faire 2 par semaine en laissant 3 jours pour réaliser le code.
On peut y participer ou pas d'ailleurs, il n'y a rien d'obligatoire évidemment.
 

mikadox

Membre
D'ailleurs PHP ou JS ou même un jeu HTML/CSS ?
JS ce serait sympa.
En tout cas l'esprit est sympa aussi, faire des petits jeux ludiques rien de tel pour apprendre sans se prendre trop la tête.
Ok il n'y aura pas vraiment de vainqueur mais la petite compétition peut être un bon moteur pour s'améliorer.

Par contre @Wazz9 appeler tous tes copains pour aller jouer au foot et finalement ne pas venir c'est pas bien ! 😁
 

yule

Membre
JS ce serait sympa.
Euh pas pour moi:eek:o_O:) Mais si bonne idée ! Et si on touche pas le "puck" dans un domaine, on ne participe pas directement mais les échanges entre membres avec ou eu de connaissances dans un langage, seront forcément utile à lire et ou a tester, utile aussi si bien référencé et pourquoi pas tenter des visiteurs pour y participer plus activement..
 

Ces discussions pourraient vous intéresser...

Hello, Quand j'essaie de connecter mon fichier PHP à la base de données sur mon serveur local cela ne fonctionne pas. (site WordPress) ERROR ESTABLISHING A DATABASE CONNECTION Pourtant mes éléments sont bons, j'ai vérifié et revérifié. Je vous colle le code du fichier PHP...
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.
Haut