Programmation perl, exercice du pendu
Résolu/Fermé
pomme.c84
Messages postés
6
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
8 septembre 2010
-
15 nov. 2008 à 13:44
gilles c. - 14 déc. 2008 à 23:17
gilles c. - 14 déc. 2008 à 23:17
A voir également:
- Programmation perl, exercice du pendu
- Jeu du pendu - Télécharger - Vie quotidienne
- Application de programmation - Guide
- Programmation - Guide
- Denon perl pro test - Accueil - Audio
- Top44rbn programmation - Forum Programmation
1 réponse
Bonsoir,
Désolé, il se peut que j'arrive un peu tard pour vos exercices, voici quand même ma réponse.
Je vous propose le code suivant pour un hangman simplifié incluant la fonction de remplacement des '-' dans la chaîne "-------" par le(s) '<charactère trouvé(s)>'.
Dans votre cas ce qui va vous intéresser (enfin j'espère) sera l'instruction
Attention pour que cela fonctionne il faut bien sûr la boucle :
NB: la fonction pos() donne la position de la dernière iccurence trouvée dans une chaîne comparée à un 'pattern'., Il lui faut donc le 'g' dans l'opérateur 'm//'.
En espérant vous avoir aidé.
Gilles
PS: j'avais oublié le petit plus du script hangman.pl appelé pour 'faire joli' dans le cas d'une erreur ci-dessus:
Désolé, il se peut que j'arrive un peu tard pour vos exercices, voici quand même ma réponse.
Je vous propose le code suivant pour un hangman simplifié incluant la fonction de remplacement des '-' dans la chaîne "-------" par le(s) '<charactère trouvé(s)>'.
#!/usr/bin/perl -w # @(#)$Name: wordguess.pl$ use 5.010_0; use strict; use feature 'say'; my $a='machine'; my $b = '-' x length($a); my $c; my($i,$notfound)=(0,0); say "Word to guess is " . length($b) . " character long: " . $b; while ((print "Give me one char you guess ($b): ") and (chomp($c=<STDIN>)) and ($c ne '') and ($b ne $a) ) { ( say( qq/Invalid character '/ , $c , qq/'/) , next ) if $c =~ /\B/; $i=0; while ($a =~ m/$c/ixg) { say "Found '$c' in the magic word at pos: " , pos($a); substr( $b , pos($a)-1 , 1 ) = $c; # say $b; $i=1; }; (say("'$c'", qq/ not found in magic word/), system("hangman " . ++$notfound) ) if not $i; die "Toooo baaad: You're hanged!\n" if $notfound >=6; (say("YOU FOUND IT! *** $b ***") , exit 0) if $a eq $b; };
Dans votre cas ce qui va vous intéresser (enfin j'espère) sera l'instruction
substr( $b , pos($a)-1 , 1 ) = $c;qui fait ce que vous demandez.
Attention pour que cela fonctionne il faut bien sûr la boucle :
while ($a =~ m/$c/ixg)qui d'une part cherche toutes les occurences du caractère (g), ne tient pas compte de la casse (i) et utilise les regexp étendues (x) (encore que ça doit pouvoir fonctionner sans cette dernière). L'important c'est le 'g'.
NB: la fonction pos() donne la position de la dernière iccurence trouvée dans une chaîne comparée à un 'pattern'., Il lui faut donc le 'g' dans l'opérateur 'm//'.
En espérant vous avoir aidé.
Gilles
PS: j'avais oublié le petit plus du script hangman.pl appelé pour 'faire joli' dans le cas d'une erreur ci-dessus:
#!/usr/bin/perl -w # @(#)$Name: hangman.pl$ #|--| #| O #| /|\ #| / \ #| #/\ use 5.010_0; use strict; use feature 'say'; my @hangman=( ['/',qq/\\\n/], [qq/|\n/], ['|',' /',qq/ \\\n/], ['|',' /','|',qq/\\\n/], ['|',qq/ O\n/], ['|-',qq/-|\n/] ); my($aref , $i, $limit); $limit = scalar @hangman; $limit = $ARGV[0] if (defined $ARGV[0]) and ($ARGV[0] =~ m/[1-6]/); for $aref (reverse @hangman) { # print scalar @$aref, ' '; print @$aref; exit if ++$i >= $limit; }; # say scalar @hangman;