Perl choisir un nbre ou mot en aleatoire

snufx Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
salut a tous
J'ai commence le perl depuis peu et la je suis un peu bloquer.
pourriez vous m'aider a comprendre.
voila mon soucis je choisis aleatoirement des chiffres en ecrivant ce programme
#!/usr/bin/perl;
use strict;

my @cle = (1,3,5,6,8,10);
my @cle1 = (1..100);

foreach $i (@cle) {
$cle[$i] = int(rand());
}
my @cle_aleatoire = @cle;
#print "$cle_aleatoire[0]\n";

for (my $i = 0; $i < 1; $i++) {
$cle1[$i] = int(rand(99)+1);
}
my @cle1_aleatoire = @cle1;
print "$cle1_aleatoire[0]\n";


for (my $i = 0; $i < 1; $i++) {
$cle[$i] = int(rand(5)+1);
}
my @cle_aleatoire = @cle;
print "$cle_aleatoire[0]\n";

il marche tres bien pour @cle1 mais pas pour @cle.
mon probleme est que des que je decide de mettre des valeurs bien definit a mon tableau, j'obtient des nbres ou valeur autre que celle contenu dans mon tableau.
Cela fait quelques jours que je tente differente chose,utilisation de (hash ) mais sans succes quequ'un pourrait il m 'eclairer merci
A voir également:

4 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

ça te va comme ça?
Le script
~/trash/vider$ cat ccm.pl
#!/usr/bin/perl;
use strict;

my @cle = (1,3,5,6,8,10);
my @cle1 = 1..100;

my @cle_aleatoire  = map { rand @cle  } @cle;
my @cle1_aleatoire = map { rand @cle1 } @cle1;

map { s/\..*// } @cle_aleatoire,@cle1_aleatoire;

print "$cle_aleatoire[0]\n";
print "$cle1_aleatoire[0]\n";
print "@cle_aleatoire\n";
print "@cle1_aleatoire\n";
Le résultat
~/trash/vider$ perl ccm.pl
4
95
4 2 2 5 1 5
95 72 95 17 99 18 36 25 8 35 78 12 71 40 90 73 52 14 38 72 43 63 31 84 46 76 30 46 55 44 48 60 87 41 37 60 67 66 75 44 33 38 53 72 73 2 90 49 77 2 52 3 36 65 15 19 54 36 67 31 89 4 71 16 8 99 20 99 80 51 12 27 64 33 57 59 28 68 67 97 35 65 25 92 22 10 94 5 74 77 42 65 34 66 17 79 76 85 65 78
~/trash/vider$ perl ccm.pl
4
66
4 0 3 1 0 1
66 77 1 22 64 53 88 76 64 22 39 21 50 27 33 38 56 51 23 91 0 3 70 91 66 7 39 73 36 59 64 75 58 34 9 91 4 79 94 30 50 38 43 62 16 19 24 81 21 97 99 88 19 65 97 59 45 17 34 0 26 35 62 36 95 41 24 28 91 29 95 99 39 68 74 98 1 88 19 32 88 75 80 7 2 59 38 49 69 83 76 41 42 43 62 66 64 44 90 75
~/trash/vider$ perl ccm.pl
2
28
2 5 2 5 5 4
28 69 22 58 62 40 85 25 81 41 23 35 21 22 12 94 57 1 61 39 87 3 51 69 62 61 33 55 77 6 91 26 92 44 91 60 78 88 16 21 88 21 21 65 37 42 8 74 7 8 39 55 6 18 93 98 46 57 20 20 77 7 56 84 54 5 8 20 78 7 66 35 70 70 46 16 17 8 28 40 34 64 82 1 86 23 74 27 50 88 89 91 4 25 70 77 33 68 9 34
~/trash/vider$ perl ccm.pl
2
65
2 4 2 3 3 1
65 40 64 85 98 55 18 6 25 59 63 25 34 78 4 42 51 73 71 45 86 61 86 82 73 18 96 0 11 93 29 2 74 44 29 34 79 12 16 92 99 92 55 65 6 95 65 19 54 23 46 43 14 31 59 10 37 96 65 63 60 42 25 62 33 93 21 5 3 56 92 79 3 56 30 96 86 81 60 23 30 31 15 60 63 86 72 23 82 48 2 98 32 76 90 7 47 32 12 63
~/trash/vider$ perl ccm.pl
0
50
0 5 1 1 4 3
50 46 10 28 2 65 35 4 73 44 82 94 87 7 5 84 23 56 99 74 65 31 94 86 85 3 34 76 44 86 13 50 81 69 23 60 63 26 36 48 92 58 8 38 27 11 37 97 48 69 28 35 41 67 14 77 13 4 13 68 87 79 36 49 22 97 86 36 15 99 41 81 86 27 60 98 29 35 27 53 11 14 43 25 80 21 15 97 37 25 8 49 54 63 90 45 1 94 54 79
0
snufx Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
grand merci lami20j pour ta reponse

Mais une chose m'intrigue pourquoi je n'obtiens pas que les valeurs contenues dans le tableau @cle?

Les valeurs 2,0 s'affiche alors quel ne devrait pas.
0
snufx Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
he he une solution qui a l'air de marcher et beaucoup me plaire.Bien que je remercie lami20j et tous les autres pour leur reponse rapide malgre la diversite des questions.

my @values1 = (1,3,5,6,8,10);

for (1) {
#for (1..5) {
print "tirage aléatoire: ", $values1[rand @values1], "\n";
}

et avec du texte se serait plus ca

my @values = qw(robert roger anatole);
print "bonjour ", $values[rand @values], "\n";
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Ben,


en revanche avec la fonction que j'ai écrit le tableau et bien melanger
il ne te reste qu'à afficher le 1er élément après chaque tirage

j'ai pris ton script comme point de départ et pas ce que tu veux en fait ("Un tirage aléatoire")

j'espère que tu as compirs pourquoi $cle[ rand @cle] te donne le bon résultat :-))
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

en fait le résultat c'est bon
en revanche ce n'est pas ça que tu veux ou j'ai mal compris :-))
je suppose que tu veux tout simplement melanger les éléments de tes tableaux

tu dois écrire quelque chose comme ça
#!/usr/bin/perl;
use strict;

my @cle = (1,3,5,6,8,10);

melanger(\@cle_alea);

sub melanger{
  my $tmp = shift;
  for(my $i = @$tmp;--$i;){
    my $j = int rand ($i + 1);
    @$tmp[$i,$j] = @$tmp[$j,$i];
  }
}

print "@cle_alea\n";


0