Thread Array random abarbeiten
(8 answers)
Opened by FlorianL at 2007-11-07 16:30
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 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 .:.1.:.Frage.:.Antwort1.:.Antwort2.:.Antwort3.:.Antwort4.:. Vielen dank im Vorraus :) |