• Go语言实践案例之猜谜游戏| 青训营


    目录

    一、程序要实现效果:

    二、思路分析:

    三、具体代码

    四、可能存在的疑问


    一、程序要实现效果:

    1.程序首先生成一个0-100的随机整数。

    2.提示玩家进行猜测。

    3.每次玩家需要输入一个数字,程序将会告诉玩家输入的数字与生成的数字的大小关系,并且让玩家再次猜测。

    4.如果猜对了,则会告诉玩家胜利并退出程序

    二、思路分析:

    1. 由于要产生0-100的随机整数(且每次运行程序产生的数字都不同),所以使用当前的时间(UnixNano)作为种子来初始化随机数生成器(rand)。
    2. 使用随机数生成器生成一个在0到maxNum之间的随机整数,作为要猜测的秘密数字(secretNumber)。
    3. 提示用户输入他们的猜测。

    4. 创建一个从标准输入(os.Stdin)读取的缓冲读取器(bufio.NewReader)。

    5. 进入一个无限循环,直到用户猜对秘密数字为止。

    6. 在每次循环中,首先尝试从缓冲读取器中读取一行输入,如果读取过程中发生错误,则打印错误信息并跳过本次循环。

    7. 去除输入字符串两端的回车和换行符。

    8. 尝试将输入字符串转换为整数,如果转换失败(即输入的不是整数),则打印错误信息并跳过本次循环。

    9. 如果转换成功,打印用户的猜测。

    10. 根据用户的猜测和秘密数字的大小关系,给出相应的提示。

    11. 如果用户猜对了秘密数字,打印恭喜信息并跳出循环。

    三、具体代码

    1. package main
    2. import (
    3. "bufio"
    4. "fmt"
    5. "math/rand"
    6. "os"
    7. "strconv"
    8. "strings"
    9. "time"
    10. )
    11. func main() {
    12. maxNum := 100
    13. rand.Seed(time.Now().UnixNano())
    14. secretNumber := rand.Intn(maxNum)
    15. // fmt.Println("The secret number is ", secretNumber)
    16. fmt.Println("Please input your guess")
    17. reader := bufio.NewReader(os.Stdin)
    18. for {
    19. input, err := reader.ReadString('\n')
    20. if err != nil {
    21. fmt.Println("An error occured while reading input. Please try again", err)
    22. continue
    23. }
    24. input = strings.Trim(input, "\r\n")
    25. guess, err := strconv.Atoi(input)
    26. if err != nil {
    27. fmt.Println("Invalid input. Please enter an integer value")
    28. continue
    29. }
    30. fmt.Println("You guess is", guess)
    31. if guess > secretNumber {
    32. fmt.Println("Your guess is bigger than the secret number. Please try again")
    33. } else if guess < secretNumber {
    34. fmt.Println("Your guess is smaller than the secret number. Please try again")
    35. } else {
    36. fmt.Println("Correct, you Legend!")
    37. break
    38. }
    39. }
    40. }

    四、可能存在的疑问

    1.去除字符串两端回车和换行符是什么意思?

    答:在读取用户输入时,通常需要去除字符串两端的回车和换行符。这是因为这些字符通常是由于用户在终端或命令行中按下Enter键而产生的,而不是用户实际输入的内容。因此,如果我们不去除它们,将导致程序无法正确解析用户的输入,并可能导致意外的行为或错误。

    2.尝试将输入字符串转换为整数,如果转换失败(即输入的不是整数),则打印错误信息并跳过本次循环。这段思路是什么意思?

    答:在Go语言中,对于输入的处理都是按照字符串进行的,比如我输入97,其实是输入数字字符“97”。

  • 相关阅读:
    虚拟机安装CentOS 7
    数据分析-Pandas数据如何图示规律
    来自从事Java十年的老架构师给大家的一些经验,Java工程师必看
    C++11的shared_ptr共享的智能指针
    [FBCTF2019]Event(flask 伪造签名)
    基于android的旅游信息查询系统APP(ssm+uinapp+Mysql)
    设计模式学习(二十四):Spring 中使用到的设计模式
    英语小三门
    网络安全学习--操作系统安全防护
    12.建造者模式
  • 原文地址:https://blog.csdn.net/m0_74092309/article/details/132818183