學習軌道
/
Go
Go
/
練習
/
動物魔法
動物魔法

動物魔法

學習練習

簡介

math/rand 套件支援產生偽隨機數字。

以下是產生介於0和99之間隨機整數的方法:

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())

說明

Elaine 正在開發一款新的兒童遊戲,裡面有動物和魔杖。現在該來寫幾個函式了:擲骰子、產生隨機的魔杖能量,還有打亂切片。

1. 擲骰子

實作一個RollADie函式。

這會是傳統的二十面骰,數字從 1 到 20。

d := RollADie() // d will be assigned a random int, 1 <= d <= 20

2. 產生魔杖能量

實作一個GenerateWandEnergy函式。 魔杖能量要是一個隨機的浮點數,大於等於 0.0 且小於 12.0。

f := GenerateWandEnergy()  // f will be assigned a random float64, 0.0 <= f < 12.0

3. 打亂切片

遊戲裡有 8 種不同的動物:

  • ant
  • beaver
  • cat
  • dog
  • elephant
  • fox
  • giraffe
  • hedgehog

寫一個ShuffleAnimals函式,回傳一個把這 8 種動物隨機排列的切片。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Go Exercism

準備好開始 動物魔法 了嗎?

註冊 Exercism,透過 34 個概念165 個練習 和真人引導來學習並精通 Go,全部免費。