写点什么

go 语言实战入门案例之猜数字

作者:timerring
  • 2023-08-03
    甘肃
  • 本文字数:1332 字

    阅读完需:约 4 分钟

文章和代码已经归档至【Github 仓库:https://github.com/timerring/backend-tutorial 】或者公众号【AIShareLab】回复 go 也可获取。

猜数字

第一个例子里面,我们会使用 Golang 来构建一个猜数字游戏。


在这个游戏里面,程序首先会生成一个介于 1 到 100 之间的随机整数,然后提示玩家进行猜测。玩家每次输入一个数字,程序会告诉玩家这个猜测的值是高于还是低于那个秘密的随机数,并且让玩家再次猜测。如果猜对了,就告诉玩家胜利并且退出程序。



package main
import ( "fmt" "math/rand")
func main() { maxNum := 100 secretNumber := rand.Intn(maxNum) fmt.Println("The secret number is ", secretNumber)}
复制代码


通过尝试可以发现,每次生成的随机数都是一样的。



通过查看文档,可知随机数的生成会使用到一个随机种子。



否则每一次都会生成相同的随机数序列。一般用启动的时间戳来初始化随机数种子。这里使用 time.now.unix 来初始化随机种子。


package main
import ( "fmt" "math/rand" "time")
func main() { maxNum := 100 rand.Seed(time.Now().UnixNano()) secretNumber := rand.Intn(maxNum) fmt.Println("The secret number is ", secretNumber)}
复制代码



然后实现用户输入输出,并理解析成数字。


每个程序执行的时候都会打开几个文件,stdin stdout stderr 等,stdin 文件可以用 os.Stdin 来得到。然后直接操作这个文件很不方便,我们会用 bufio.NewReader 把一个文件转换成一个 reader 变量。


reader 变量上有用来操作流的操作,可以用它的 ReadString 方法读取一行。如果失败会打印错误并能退出。ReadString 返回的结果包含结尾的换行符,把它去掉再转换成数字。如果转换失败,我们同样打印错误,退出。


package main
import ( "bufio" "fmt" "math/rand" "os" "strconv" "strings" "time")
func main() { maxNum := 100 rand.Seed(time.Now().UnixNano()) secretNumber := rand.Intn(maxNum) // fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess") reader := bufio.NewReader(os.Stdin) for { // `reader` 变量上有用来操作流的操作,可以用它的 `ReadString` 方法读取一行。 input, err := reader.ReadString('\n') if err != nil { fmt.Println("An error occured while reading input. Please try again", err) continue } // `ReadString` 返回的结果包含结尾的换行符,把它去掉。 input = strings.Trim(input, "\r\n") // 再转换成数字 guess, err := strconv.Atoi(input) if err != nil { fmt.Println("Invalid input. Please enter an integer value") continue } fmt.Println("You guess is", guess) if guess > secretNumber { fmt.Println("Your guess is bigger than the secret number. Please try again") } else if guess < secretNumber { fmt.Println("Your guess is smaller than the secret number. Please try again") } else { fmt.Println("Correct, you Legend!") break } }}
复制代码


参考:字节内部课 Go 语言原理与实践

发布于: 刚刚阅读数: 3
用户头像

timerring

关注

公众号【AIShareLab】 2022-07-14 加入

他日若遂凌云志

评论

发布
暂无评论
go 语言实战入门案例之猜数字_Go_timerring_InfoQ写作社区