Saya ingin menghasilkan, katakanlah 10 angka acak antara 100 dan 200 (keduanya termasuk). Bagaimana saya membuatnya dengan rand?
Saya ingin menghasilkan, katakanlah 10 angka acak antara 100 dan 200 (keduanya termasuk). Bagaimana saya membuatnya dengan rand?
Jawaban:
Jika Anda berarti randdari para randpaket (sebagai lawan satu dari OpenSSL), tidak mendukung batas bawah, hanya bagian atas terikat. Apa yang dapat Anda lakukan adalah trik shift-lower-bound-to-zero-then-add-lower-bound:
$ rand -N 10 -M 100 -e -d '\n' | awk '{$0 += 100}1'
170
180
192
168
169
170
117
180
167
142
-N adalah jumlah angka acak yang Anda butuhkan-Makan menjadi batas atas dari randoutput angka , jadi ( maks - min = 100)-e -d '\n'menyetel pembatas ke baris baru. Itu untuk kenyamanan pemrosesan oleh awk.The awkkode kemudian mengambil setiap baris dan menambahkan 100 untuk itu.
Menggunakan python:
#!/usr/bin/env python2
import random
for i in range(10):
print random.randint(100, 200)
Keluaran:
187
123
194
190
124
121
191
103
126
192
Di sini saya telah menggunakan randommodul pythonuntuk menghasilkan 10 ( range(10)) bilangan bulat acak antara 100 dan 200 (termasuk) ( random.randint(100, 200)).
Inilah cara Perl:
$ 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
Anda juga dapat menggunakan /dev/urandom(diadaptasi dari sini ):
$ 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
Dengan shufdari GNU coreutils:
$ shuf -i 100-200 -n 10
159
112
192
140
166
121
135
120
198
139
Anda bisa menggunakannya $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
Tidak ada yang spektakuler - emulasi sederhana untuk loop dengan icounter dan while. Rentang diatur menggunakan if . . . else . . .fistruktur. Catatan: prompt saya adalah direktori yang berfungsi terlebih dahulu, kemudian area input, jadi jangan bingung dengan apa yang Anda lihat
$ ./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
Ini adalah kode yang saya gunakan saat mengambil kelas C di universitas saya. Edit kecil yang saya tambahkan agar sesuai dengan pertanyaan ini adalah penggunaan argumen baris perintah (alih-alih nilai hardcoding ke sumber)
$ 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;
}
randomperpustakaan: stackoverflow.com/a/19728404/2072269 , stackoverflow.com/a/19666713/2072269
rand? TheRANDOMvariabel?/dev/random?/dev/urandom?