Schrift
[thread]7118[/thread]

Problem mit kleiner Perlaufgabe



<< >> 8 Einträge, 1 Seite
Gast Gast
 2005-07-09 03:59
#56088 #56088
Hallo, ich bin noch ziemlich am Anfang mit Perl und
habe mit folgender Aufgabe ein Problem.

Ausgabe 7 stellige Wort,

1-3 immer aus letter
4-7 immer aus ziffern

ausgabe zb. abc12vw
n: anzahl der ausgebenden zeilen z.b. 100 unterschiedliche 7 stelle Wörter



Mein Lösungansatz, der aber nicht funktioniert. Kann jemand helfen?


Code: (dl )
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
@letters = ("a", "b", "c", "d", 
"e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
"x", "y", "z");
@ziffern = ("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d",
"e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
"x", "y", "z");






$siz = 7;

for $n (1..100) {
  for ($i=0; $i<$siz; $i++) {
     if ($i==0 or $i==1 or $i==2) {
          $wort .= $letters[rand(26)]
        } else {
          $wort .=$ziffern[rand(36)];
       }
  }

print  $wort . "\n";
}


Danke im vorraus.

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1120905376-->
lichtkind
 2005-07-09 05:04
#56089 #56089
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$anzahl = 100;
$wortlaenge = 7;

for (1..$anzahl) {
my $wort;
for $i (1..$wortlaenge) {
if ($i < 4) {
$wort .= chr ((int rand 26) + 97);
} else {
$wort .= int rand 10;
}
}
print $wort . "\n";
}


edit pq: code-tags hinzugefügt

edit lichtkind: $N wird nicht gebraucht, anzahl wieder auf 100 gestellt\n\n

<!--EDIT|lichtkind|1120958161-->
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
pq
 2005-07-09 14:44
#56090 #56090
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Guest,09.07.2005, 01:59]
Code: (dl )
1
2
3
4
5
6
@letters = ("a", "b", "c", "d", 
"e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
"x", "y", "z");
@ziffern = ("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d",
"e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
"x", "y", "z");
[/quote]
hui, das geht aber einfacher..
Code: (dl )
1
2
my @letters = ("a" .. "z");
my @ziffern = (1..9, 0, "a" .. "z");


und unbedingt lesen: Wiki:use strict;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
betterworld
 2005-07-09 16:11
#56091 #56091
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Das Problem ist wohl einfach, dass das $wort nicht am Schleifenanfang wieder zurueckgesetzt wird. Nimm Dir unbedingt pqs Link zu Herzen, denn mit richtig benutztem "use strict" und "my" waere das nicht passiert!
lichtkind
 2005-07-10 05:25
#56092 #56092
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
hab jetzt erst gesehen das in ziffern auch buchstaben sein können

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use strict;

my @letters = ("a" .. "z");
my @ziffern = (1..9, 0, "a" .. "z");

$anzahl = 100;
$wortlaenge = 7;

for (1..$anzahl) {
my $wort;
for $i (1..$wortlaenge) {
if ($i < 4) {
$wort .= $letters[rand 27];
} else {
$wort .= $ziffern[rand 37];
}
}
print $wort . "\n";
}


bw hat recht aber ich würde noch den random basiszahl um eins erhöhen da zb bei rand 1 die 1 so gut wie nie erreicht wird.\n\n

<!--EDIT|lichtkind|1120958847-->
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
[E|B]
 2005-07-10 13:06
#56093 #56093
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=pq,09.07.2005, 12:44]hui, das geht aber einfacher..
Code: (dl )
1
2
my @letters = ("a" .. "z");
my @ziffern = (1..9, 0, "a" .. "z");
[/quote]
Wieso nicht gleich:

Code: (dl )
my @ziffern = (0..9, "a".."z");
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
pq
 2005-07-10 13:33
#56094 #56094
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=lichtkind,10.07.2005, 03:25]
Code: (dl )
1
2
3
my @letters = ("a" .. "z");
...
           $wort .= $letters[rand 27];


bw hat recht aber ich würde noch den random basiszahl um eins erhöhen da zb bei rand 1 die 1 so gut wie nie erreicht wird.[/quote]
also rand gibt dir zwar eine zufallszahl, aber es ist doch sehr genau
spezifiziert, welche zahlen erreicht werden.
bei rand 1 kriegst du 0 <= x < 1. also die 1 wird nie erreicht.

$letters[rand 27] ist quatsch, es muss eine 26 sein. denn
$letters[26] ist undef.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
lichtkind
 2005-07-10 16:52
#56095 #56095
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
hm ja hab vergessen das array bei 0 anfangen
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
<< >> 8 Einträge, 1 Seite



View all threads created 2005-07-09 03:59.