Chcę wygenerować, powiedzmy 10 liczb losowych od 100 do 200 (oba uwzględnione). Jak mogę to zrobić za pomocą Rand?
Chcę wygenerować, powiedzmy 10 liczb losowych od 100 do 200 (oba uwzględnione). Jak mogę to zrobić za pomocą Rand?
Odpowiedzi:
Jeśli masz na myśli rand
z tym rand
pakietem (w przeciwieństwie do jednego z OpenSSL), nie obsługuje dolną granicę, tylko górną granicę. To, co możesz zrobić, to sztuczka polegająca na przesunięciu dolnej granicy do zera, a następnie dodaniu dolnej granicy:
$ rand -N 10 -M 100 -e -d '\n' | awk '{$0 += 100}1'
170
180
192
168
169
170
117
180
167
142
-N
jest liczbą potrzebnych liczb losowych-M
będzie górną granicą liczb rand
wyjściowych, więc ( max - min = 100)-e -d '\n'
ustawia separator na nowy wiersz. To dla wygody przetwarzania przez awk
.Następnie awk
kod pobiera każdą linię i dodaje do niej 100.
Używanie python
:
#!/usr/bin/env python2
import random
for i in range(10):
print random.randint(100, 200)
Wynik :
187
123
194
190
124
121
191
103
126
192
Tutaj wykorzystałem random
moduł python
generowania 10 ( range(10)
) losowych liczb całkowitych od 100 do 200 (w zestawie) ( random.randint(100, 200)
).
Oto sposób na Perla:
$ perl -le 'print 100+int(rand(101)) for(1..10)'
129
197
127
167
116
134
143
134
122
117
Or, on the same line:
$ perl -e 'print 100+int(rand(101))." " for(1..10); print "\n"'
147 181 146 115 126 116 154 112 100 116
Możesz także użyć /dev/urandom
(dostosowanego tutaj ):
$ for((i=0;i<=10;i++)); do
echo $(( 100+(`od -An -N2 -i /dev/urandom` )%(101)));
done
101
156
102
190
152
130
178
165
186
173
143
Z shuf
z GNU coreutils:
$ shuf -i 100-200 -n 10
159
112
192
140
166
121
135
120
198
139
Możesz użyć $RANDOM
.
number=0 #initialize the number
FLOOR=100
RANGE=200
while [ "$number" -le $FLOOR ]
do
number=$RANDOM
let "number %= $RANGE" # Scales $number down within $RANGE.
done
echo "Random number between $FLOOR and $RANGE $number"
echo
Nic spektakularnego - prosta emulacja pętli for z i
licznikiem i while
. Zakres ustawia się za pomocą if . . . else . . .fi
struktury. Uwaga dodatkowa: mój monit to najpierw katalog roboczy, a następnie obszar wprowadzania, więc nie myl się z tym, co widzisz
$ ./bashRadom.sh 100 200
190
111
101
158
171
197
199
147
142
125
bashRadom.sh
:
#! /bin/bash
i=0;
while [ $i -lt 10 ]; do
NUM=$RANDOM;
if [ $NUM -gt $1 ] && [ $NUM -lt $2 ]; then
echo $NUM;
else continue;
fi;
i=$((i+1));
done
To jest kod, którego używałem podczas nauki klasy C na moim uniwersytecie. Niewielka edycja, którą dodałem w celu dopasowania do tego pytania, polega na użyciu argumentów wiersza poleceń (zamiast na stałe wpisywać wartości do źródła)
$ gcc randfunc.c
$ ./a.out 100 200
100
106
155
132
161
130
110
195
105
162
187
randfunc.c
:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int randInt (int, int);
void
main (int argc, char *argv[])
{
int min = atoi (argv[1]), max = atoi (argv[2]), i = 0;
srand (time (NULL));
for (i; i < 11; i++)
{
printf ("%d \n", randInt (min, max));
}
}
int
randInt (int a, int b)
{
int randValue;
randValue = a + (int) rand () % (b - a + 1);
return randValue;
}
random
biblioteką: stackoverflow.com/a/19728404/2072269 , stackoverflow.com/a/19666713/2072269
rand
?RANDOM
Zmienna?/dev/random
?/dev/urandom
?