Variable, die zufällig aus drei Zahlen ausgewählt wurde (10, 100 und 1000)


19

Kann es eine Variable geben, die eine Zufallszahl aus drei vorab festgelegten Zahlen auswählt?

Probe:

var= 10 or 100 or 1000

1
Ich programmiere nicht unter UNIX, daher kann ich den Code nicht schreiben. Hier ist jedoch ein anderer Ansatz: val = left ("1000", length = Random 2 bis 4). Bei drei unabhängigen Werten wäre der Code ähnlich.
Sensii Miller

Antworten:


31

Verwenden Sie ein Array, um die Werte zu speichern, und wählen Sie sie mithilfe der integrierten Variablen aus $RANDOM. Beispielsweise,

x[0]=10     # One decade
x[1]=100    # One century
x[2]=1000   # One millennium

for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10

Die Qualität der Zufälligkeit wird nicht die bestmögliche sein (dafür Bytes lesen /dev/urandom), aber sie sollte für ein Skript mehr als gut genug sein.

Anmerkung 1: Da die Menschen in den Kommentaren beobachtet haben, statt die Array - Elemente einzeln eine Dose Initialisierung natürlich ein Array Litteral benutzen x=(10 100 1000).

Anmerkung 2: Anstatt die Anzahl der Elemente im Array fest zu codieren, kann ein Radomelement mit extrahiert werden ${x[$RANDOM%${#x[@]}]}.


5
+1 Während die Antwort von Zeppelin in diesem speziellen Fall klug ist, ist der Array-Ansatz so viel allgemeiner.
Kamil Maciorowski

4
Scheint, als würde x=(10 100 1000)ein Array aus einem Literal in bash erstellt. Dies wäre lesbarer und idiomatischer
cat

1
@cat: Meinung zur Lesbarkeit unterschiedlich. Ich mag es, einzelne Elemente in separate Zeilen zu setzen, in der Regel mit abschließenden Kommentaren, die den Wert erklären.
AlexP

@AlexP Oh, ich würde wohl keinen Kommentar abgeben, wenn ich der Meinung wäre, dass es absichtlich war. aber fair genug
Katze

1
@AlexP x[0]=10 # This sets the first value of x to ten. Ten is the number of fingers that humans have (excepting birth defects or mutilation). It is also the sum of 9 and 1, or product of 5 and 2. Ten is not prime. A traditional Christmas gift is ten lords a-leaping.sowas?
Nick T

30

Wenn Sie bash (oder zsh oder ksh93 ) verwenden, können Sie einfach Folgendes tun:

echo "$((10**($RANDOM%3+1)))"

oder

var=$((10**($RANDOM%3+1)))

es var zuweisen


:). Einfach, wenn du es siehst, aber ich habe es nicht getan. Vielen Dank!!
Espen Larsen


8
case $(( RANDOM % 3 )) in
    0)
        var=10
        ;;
    1)
        var=100
        ;;
    2)
        var=1000
        ;;
esac

5

Hier ist ein leicht kryptischer Weg:

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

Dies weist den Zufallswert nach $varBedarf zu. Die printfFormatzeichenfolge lautet 1%0Nd- dies führt 0dazu, dass sie mit Nführenden Nullen gedruckt wird , wobei Ndas Intervall eine zufällige Ganzzahl ist [1,3].

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.