Ruby如何生成随机数

Jan 17, 2019 am 10:23 AM

Ruby生成随机数的方法:首先在程序开始时在任何地方调用srand;然后运行它时即可生成一系列不同的看似随机的数字。

Ruby如何生成随机数

本文操作环境:Windows7系统、Dell G3电脑、ruby3.0.0版。

在Ruby中生成随机数

它可以在范围程序(通常是游戏和模拟)中用于生成随机数。虽然没有计算机可以生成真正的随机数,但Ruby确实提供了对返回伪随机数的方法的访问。

数字实际上不是随机的

没有一台计算机能纯粹通过计算产生真正的随机数。它们能做的最好的事情就是生成伪随机数,伪随机数是一组看起来随机但实际上不是随机的数字。

对于人类观察者来说,这些数字确实是随机的。不会有短的重复序列,而且,至少对人类观察者来说,它们是完全随机的。但是,如果有足够的时间和动机,就可以发现原始种子,重新创建序列,并猜测序列中的下一个数字。

因此,本文中讨论的方法可能不应该用于生成必须加密安全的数字。

如上所述,必须对伪随机数生成器(PRNGs)进行播种,以便每次生成新的随机数时产生不同的序列。请记住,没有一种方法是神奇的——这些看似随机的数字是用相对简单的算法和相对简单的算术生成的。通过播种PRNG,每次都可以从不同的点开始。如果你不播种,它每次都会产生相同的数字序列。

在Ruby中,可以不带参数地调用内核#srand方法。它将根据时间、进程ID和序列号选择随机数种子。只需在程序开始时在任何地方调用srand,每次运行它时都会生成一系列不同的看似随机的数字。当程序启动时隐式地调用此方法,并使用时间和进程ID(无序列号)播种PRNG。

生成数字

一旦程序运行并且内核#srand被隐式或显式地调用,就可以调用内核#rand方法。这个方法调用时没有参数,它将返回一个从0到1的随机数。在过去,这个数字通常被缩放到您希望生成的最大数字,也许to_i调用它来将其转换为整数。

# Generate an integer from 0 to 10
puts (rand() * 10).to_i
Salin selepas log masuk

然而,如果您使用Ruby 1.9.x, Ruby会使事情变得更简单。Kernel#rand方法可以接受单个参数。如果这个参数是任何类型的数字,Ruby将生成一个从0到(不包括)那个数字的整数。

# Generate a number from 0 to 10
# In a more readable way
puts rand(10)
Salin selepas log masuk

但是,如果您想要生成一个从10到15的数字呢?通常,您会生成一个从0到5的数字,并将其添加到10。然而,Ruby使它更容易。

您可以将一个Range对象传递给Kernel#rand,它的作用正如您所期望的:在该范围内生成一个随机整数。

一定要注意这两种类型的范围。如果调用rand(10..15),就会生成一个从10到15的数字,包括15。而兰德(10…15)(有3个点)将产生一个从10到15的数字,不包括15。

# Generate a number from 10 to 15
# Including 15
puts rand(10..15)
Salin selepas log masuk

非随机随机数

有时您需要一个看起来随机的数字序列,但每次都需要生成相同的序列。例如,如果在单元测试中生成随机数,那么每次都应该生成相同的数字序列。

在一个序列上失败的单元测试在下一次运行时应该会再次失败,如果下一次它生成了一个不同的序列,那么它可能不会失败。为此,使用一个已知的常量值调用内核#srand。

# Generate the same sequence of numbers every time
# the program is run
srand(5)
# Generate 10 random numbers
puts (0..10).map{rand(0..10)}
Salin selepas log masuk

注意,内核#rand的实现是非ruby的。它不以任何方式抽象PRNG,也不允许实例化PRNG。对于PRNG,所有代码共享一个全局状态。如果您更改种子或以其他方式更改PRNG的状态,其影响范围可能比您预期的更广。

然而,由于程序期望这个方法的结果是随机的(因为这是它的目的),这可能永远不会成为问题。只有当程序期望看到一个预期的数字序列时,例如它调用了一个具有常量值的srand,它才会看到意外的结果。

Atas ialah kandungan terperinci Ruby如何生成随机数. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan pelbagai simbol dalam bahasa C Cara menggunakan pelbagai simbol dalam bahasa C Apr 03, 2025 pm 04:48 PM

Kaedah penggunaan simbol dalam bahasa C meliputi aritmetik, tugasan, syarat, logik, pengendali bit, dan lain-lain. Operator aritmetik digunakan untuk operasi matematik asas, pengendali tugasan digunakan untuk penugasan dan penambahan, penolakan, pendaraban dan tugasan pembahagian, pengendali keadaan digunakan untuk operasi yang digunakan untuk operasi yang digunakan untuk Operasi Bit untuk Penunjuk null, penanda akhir fail, dan nilai bukan angka.

Apakah peranan char dalam c strings Apakah peranan char dalam c strings Apr 03, 2025 pm 03:15 PM

Dalam C, jenis char digunakan dalam rentetan: 1. Simpan satu watak; 2. Gunakan array untuk mewakili rentetan dan berakhir dengan terminator null; 3. Beroperasi melalui fungsi operasi rentetan; 4. Baca atau output rentetan dari papan kekunci.

Cara Mengendalikan Watak Khas dalam Bahasa C Cara Mengendalikan Watak Khas dalam Bahasa C Apr 03, 2025 pm 03:18 PM

Dalam bahasa C, watak -watak khas diproses melalui urutan melarikan diri, seperti: \ n mewakili rehat garis. \ t bermaksud watak tab. Gunakan urutan melarikan diri atau pemalar watak untuk mewakili watak khas, seperti char c = '\ n'. Perhatikan bahawa backslash perlu melarikan diri dua kali. Platform dan penyusun yang berbeza mungkin mempunyai urutan melarikan diri yang berbeza, sila rujuk dokumentasi.

Perbezaan antara multithreading dan asynchronous C# Perbezaan antara multithreading dan asynchronous C# Apr 03, 2025 pm 02:57 PM

Perbezaan antara multithreading dan asynchronous adalah bahawa multithreading melaksanakan pelbagai benang pada masa yang sama, sementara secara tidak sengaja melakukan operasi tanpa menyekat benang semasa. Multithreading digunakan untuk tugas-tugas yang berintensifkan, sementara asynchronously digunakan untuk interaksi pengguna. Kelebihan multi-threading adalah untuk meningkatkan prestasi pengkomputeran, sementara kelebihan asynchronous adalah untuk tidak menghalang benang UI. Memilih multithreading atau asynchronous bergantung kepada sifat tugas: tugas-tugas intensif pengiraan menggunakan multithreading, tugas yang berinteraksi dengan sumber luaran dan perlu menyimpan respons UI menggunakan asynchronous.

Perbezaan antara char dan wchar_t dalam bahasa c Perbezaan antara char dan wchar_t dalam bahasa c Apr 03, 2025 pm 03:09 PM

Dalam bahasa C, perbezaan utama antara char dan wchar_t adalah pengekodan aksara: char menggunakan ASCII atau memanjangkan ASCII, WCHAR_T menggunakan unicode; Char mengambil 1-2 bait, wchar_t mengambil 2-4 bait; Char sesuai untuk teks bahasa Inggeris, WCHAR_T sesuai untuk teks berbilang bahasa; CHAR disokong secara meluas, WCHAR_T bergantung kepada sama ada penyusun dan sistem operasi menyokong Unicode; Char adalah terhad dalam pelbagai watak, WCHAR_T mempunyai pelbagai watak yang lebih besar, dan fungsi khas digunakan untuk operasi aritmetik.

Cara menukar char dalam bahasa c Cara menukar char dalam bahasa c Apr 03, 2025 pm 03:21 PM

Dalam bahasa C, penukaran jenis char boleh ditukar secara langsung kepada jenis lain dengan: Casting: Menggunakan aksara pemutus. Penukaran Jenis Automatik: Apabila satu jenis data dapat menampung jenis nilai lain, pengkompil secara automatik menukarkannya.

Apakah fungsi jumlah bahasa C? Apakah fungsi jumlah bahasa C? Apr 03, 2025 pm 02:21 PM

Tiada fungsi jumlah terbina dalam dalam bahasa C, jadi ia perlu ditulis sendiri. Jumlah boleh dicapai dengan melintasi unsur -unsur array dan terkumpul: Versi gelung: SUM dikira menggunakan panjang gelung dan panjang. Versi Pointer: Gunakan petunjuk untuk menunjuk kepada unsur-unsur array, dan penjumlahan yang cekap dicapai melalui penunjuk diri sendiri. Secara dinamik memperuntukkan versi Array: Perlawanan secara dinamik dan uruskan memori sendiri, memastikan memori yang diperuntukkan dibebaskan untuk mengelakkan kebocoran ingatan.

Cara menggunakan array char dalam bahasa c Cara menggunakan array char dalam bahasa c Apr 03, 2025 pm 03:24 PM

Arus char menyimpan urutan watak dalam bahasa C dan diisytiharkan sebagai array_name char [saiz]. Unsur akses diluluskan melalui pengendali subskrip, dan elemen berakhir dengan terminator null '\ 0', yang mewakili titik akhir rentetan. Bahasa C menyediakan pelbagai fungsi manipulasi rentetan, seperti strlen (), strcpy (), strcat () dan strcmp ().

See all articles