مسیر
/
Go
Go
/
برنامه‌ی درسی
/
تصادفی بودن
تص

تصادفی بودن در Go

2 تمرین

درباره‌ی تصادفی بودن

بسته‌ی math/rand از تولید اعداد شبه‌تصادفی پشتیبانی می‌کند.

روش تولید یک عدد صحیح تصادفی بین 0 و 99 این است:

import "math/rand"

n := rand.Intn(100) // n is a random int, 0 <= n < 100

تابع rand.Float64 یک عدد اعشاری تصادفی بین 0.0 و 1.0 برمی‌گرداند:

f := rand.Float64() // f is a random float64, 0.0 <= f < 1.0

همچنین می‌توان ترتیب یک اسلایس (یا ساختارهای داده‌ی دیگر) را به هم ریخت:

x := []string{"a", "b", "c", "d", "e"}
// shuffling the slice put its elements into a random order
rand.Shuffle(len(x), func(i, j int) {
	x[i], x[j] = x[j], x[i]
})

بذر

دنباله‌های عددی که بسته‌ی math/rand تولید می‌کند، واقعاً تصادفی نیستند. اگر یک مقدار «بذر» مشخص داده شود، نتایج کاملاً قطعی‌اند.

در Go نسخه‌ی 1.20 و بالاتر، بذر به‌صورت خودکار و تصادفی انتخاب می‌شود؛ بنابراین هر بار که برنامه‌تان را اجرا کنید، دنباله‌ی متفاوتی از اعداد تصادفی می‌بینید.

در نسخه‌های پیشین Go، بذر به‌طور پیش‌فرض 1 بود. بنابراین برای گرفتن دنباله‌های متفاوت در اجراهای مختلف برنامه، باید پیش از گرفتن هر عدد تصادفی، بذر مولد اعداد تصادفی را به‌صورت دستی (برای نمونه با زمان فعلی) تنظیم می‌کردید.

rand.Seed(time.Now().UnixNano())
ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

تصادفی بودن را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین تصادفی بودن قفل 2 تمرین دیگر را باز کنید