Thread Array random abarbeiten (8 answers)
Opened by FlorianL at 2007-11-07 16:30

FlorianL
 2007-11-07 16:30
#101972 #101972
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen, ich hab für unsre Azubis ein simples multiple-choice script geschrieben, nun möchte ich das array gerne zufällig durchlaufen damit die einzelnen fragen nicht in der anordnung wiedergegeben werden in der sie im db-file gespeichert sind.

Eine Randomzeile habe ich mir schonmal mit

Code: (dl )
1
2
my $length = $#db + 1;
print $db[int rand($#db)];


aus den fingern gelutscht ;)

hat mal jemand nen denkanstoss für mich wie ich das auf den rest übertragen kann? Hier ist der Code:

Code (perl): (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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/perl
use strict;
use warnings;

my $dbfile = "learnIT.db";
open(my $dbh, "<",$dbfile) or die $!;
my @db = <$dbh>;
close $dbh;

my $good = 0;
my $bad = 0;
my $count = 0;

my $length = $#db + 1;
print $db[int rand($#db)];


sub clear {
        my $sleeptime = shift;
        sleep("$sleeptime");
        system("clear");
        print("##############################\n##  LearnIT by Florian L    ##\n##                          ##\n##  type 'exit' to quit...  ##\n##                          ##\n###
###########################\n");
}
#clear(0);

sub getrand {
        my $random = int(rand(3));
        return $random;
}

foreach (@db) {
        my (undef,$question_nr,$question, $answer_a, $answer_b, $answer_c, $answer_d) = split(/\.:\./, $_);
        my $randnum = getrand();
        $count++;
        if ($randnum == 0) {
                print("\n$question_nr $question\n------------------------------\n");
                print("a) $answer_a\nb) $answer_b\nc) $answer_c\nd) $answer_d\n");
                TYPEA:
                print("\nAntwort: ");
                chomp(my $answer = <STDIN>);
                if ($answer eq 'd') {
                        print("\n-Korrekt-\n");
                        $good++;
                        clear(2);
                } elsif ($answer eq 'exit') {
                        print("Von $count Fragen wurden $good richtig beantwortet, es wurden dabei $bad falsche Antworten gegeben.\n");
                        exit;
                } else {
                        print("Leider falsch, try again...\n");
                        $bad++;
                        goto TYPEA;
                }
        } elsif ($randnum == 1) {
                print("\n$question_nr $question\n------------------------------\n");
                print("a) $answer_b\nb) $answer_c\nc) $answer_d\nd) $answer_a\n");
                TYPEB:
                print("\nAntwort: ");
                chomp(my $answer = <STDIN>);
                if ($answer eq 'c') {
                        print("\n-Korrekt-\n");
                        $good++;
                        clear(2);
                } elsif ($answer eq 'exit') {
                        print("Von $count Fragen wurden $good richtig beantwortet, es wurden dabei $bad falsche Antworten gegeben.\n");
                        exit;
                } else {
                        print("Leider falsch, try again...\n");
                        $bad++;
                        goto TYPEB;
                }
         } elsif ($randnum == 2) {
                print("\n$question_nr $question\n------------------------------\n");
                print("a) $answer_c\nb) $answer_d\nc) $answer_a\nd) $answer_b\n");
                TYPEC:
                print("\nAntwort: ");
                chomp(my $answer = <STDIN>);
                if ($answer eq 'b') {
                        print("\n-Korrekt-\n");
                        $good++;
                        clear(2);
                } elsif ($answer eq 'exit') {
                        print("Von $count Fragen wurden $good richtig beantwortet, es wurden dabei $bad falsche Antworten gegeben.\n");
                        exit;
                } else {
                        print("Leider falsch, try again...\n");
                        $bad++;
                        goto TYPEC;
                }
         } elsif ($randnum == 3) {
                print("\n$question_nr $question\n------------------------------\n");
                print("a) $answer_d\nb) $answer_a\nc) $answer_b\nd) $answer_c\n");
                TYPED:
                print("\nAntwort: ");
                chomp(my $answer = <STDIN>);
                if ($answer eq 'a') {
                        print("\n-Korrekt-\n");
                        $good++;
                        clear(2);
                } elsif ($answer eq 'exit') {
                        print("Von $count Fragen wurden $good richtig beantwortet, es wurden dabei $bad falsche Antworten gegeben.\n");
                        exit;
                } else {
                        print("Leider falsch, try again...\n");
                        $bad++;
                        goto TYPED;
                }
        }
}
print("\nVon $count Fragen wurden $good richtig beantwortet,\nes wurden dabei $bad falsche Antworten gegeben.\n");


db-file:

Code: (dl )
1
2
3
.:.1.:.Frage.:.Antwort1.:.Antwort2.:.Antwort3.:.Antwort4.:.
.:.2.:.Frage2.:.Antwort21.:.Antwort22.:.Antwort23.:.Antwort24.:.
.:.3.:.Frage3.:.Antwort31.:.Antwort32.:.Antwort33.:.Antwort34.:.



Vielen dank im Vorraus :)

View full thread Array random abarbeiten