Go语言实战案例猜数游戏课后作业实践 | 青训营

166 阅读3分钟

猜数游戏

1 猜数游戏规则

系统随机生成一个0到100的数字,随后我们要猜这个数字是多少,通过输入的方式来猜数,如果猜大了就提示说明“你猜大了”,如果猜小了就提示说明“你猜小了”,如果猜对了就结束猜数,并说明“猜对了”。

2 实现思路

首先需要形成一个随机数,随机数生成后还要我们输入数字,也就是需要使用输入函数,但是只输入一次是不行的,因为不能保证一次就能够猜对数字,所以我们需要用一个for循环来保证能多次输入,因为需要猜到正确为之,所以想到用一个死循环,其中当输入的数字正好等于系统设置的随机数,则使用break关键字来跳出循环,因此我们还需要用到if-else语句对输入与随机数进行大小判断以及正误判断。

3 对应实现

3.1 随机数的设置

根据课程内容,设置随机数的代码为secretNumber := rand.Intn(maxNum),其中maxNum表示随机数的最大值,也就是说随机数是属于0-maxNum之间的,由于我使用的编译器优化了,所以每一次的随机数都不一样,不存在字节教学视频所说的随机数一样的情况。若存在一样的情况,则在前面加上rand.Seed(time.Now().UnixNano()),就能满足随机数的实现了。

3.2 输入

课程的内容没有使用Scan来输入,使用Scan输入非常简单,只需要声明完变量就可以输入了,比如

var guess int
fmt.Scan(&guess)

输入的写法与C语言的输入类似,注意都是传地址!,留意到对于此题来说应该将输入的语句放在循环语句里面,而对于guess变量的声明既可以写在循环里面也可以写在循环外面,我个人更愿意外面因为在里面属于多次重复定义,没有必要,所以放在外面更加合理。

3.3 循环语句与if-else语句,break关键字

根据上面思路分析只需要写一个死循环即可,直接for {...}对于if-else语句可以直接按照思路分析写,注意,else if与else都要紧贴上一个语句的“}”(同一行),这是Go语言的特性,若不是同一行会报错。在不同的猜数if-else语句下按照题目打印不同的信息,在等于的if-else中最后加上break关键字保证退出循环,结束游戏。

4 代码实现

package main

import ( //引入相关包
        "fmt"
        "math/rand"
        "time"
)

func main() {
        maxNum := 100 //设置随机数上限
        //rand.Seed(time.Now().UnixNano())//解决每次不同的游戏随机数都相同的问题
        secretNumber := rand.Intn(maxNum) //设置随机数
        var guess int                     //声明猜数输入变量
        for {//死循环
                fmt.Scan(&guess) //输入猜数值
                if guess > secretNumber {//if-else判断
                        fmt.Println("You guess is bigger than the secret number. Please try again.")
                } else if guess < secretNumber {
                        fmt.Println("You guess is smaller than the secret number. Please try again.")
                } else {
                        fmt.Println("Correct, you legend!")
                        break//猜对退出循环
                }
        }
}

5 结果展示

image.png