轨道
/
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. 打乱切片

游戏中出现了八种不同的动物:

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

编写一个ShuffleAnimals函数,返回一个切片,其中包含这八种动物,顺序随机。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Go Exercism

准备好开始 动物魔法 了吗?

注册 Exercism,借助 34 个概念165 个练习 和真人导师指导,学习并掌握 Go,全部免费。