Go语言上手-简单的猜数字小游戏 | 青训营笔记

165 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

先上代码:

package main

import (
   "fmt"
   "math/rand"
   "time"
)

// 一个猜数字小游戏
// 1. 生成一个100以内的随机数
// 2. 参与游戏者从终端进行数字输入
// 3. 比较输入的数字和随机产生的数字之间的关系,并给与参与者提示
// 4. 输入正确,提示猜对信息,最后结束程序并返回

func randNums(nums int) int {
   rand.Seed(time.Now().UnixNano())   // 以当前时间戳作为随机数字生成的种子
   secretNumber := rand.Intn(nums)       // 通过rand.Intn()生成一个随机树
   return secretNumber
}

func compareNums(inputNum, randNum int) int {
   if inputNum > randNum {
      fmt.Println("亲,猜的数字大了的呢~") // 这里的提示信息可以搞一个信息提示集,用随机数进行获取随机提示集中的信息
      return 1                        // 每回提示的信息不一致,哈哈
   }else if inputNum < randNum {
      fmt.Println("哎呦,猜的数字小了的呢~")
      return -1
   }else {
      fmt.Println("哇~ 真棒!!!")
      return 0
   }
}

func main() {
   fmt.Println("欢迎参与猜随机数小游戏:")
   secretNumber :=  randNums(100)
   var inputNum int
   for {
      _, err := fmt.Scanln(&inputNum)
      if err != nil {
         log.Println("您又调皮了,输入数字噻~")
         continue
      }
      if res := compareNums(inputNum, secretNumber); res == 0 {
         break
      }
   }
}

注意:

  • 在使用随机数的时候,需要进行通过当前时间戳生成一个随机数种子,之后再再进行生成随机数的操作,否则生成的随机数都是第一次生成的随机数。
  • 在使用_, err := fmt.Scanln(&inputNum)的时候,如果输入的不是数字,例如输入的是字符串"aaa",上述代码就会打印4次 fmt.Println("您又调皮了,输入数字噻~");如果输入的是"aa",则打印3次,如下图: image.png
  • 这段代码在我正常输入数字的情况下是没有问题的,可以正常获取数值,但是输入非数字的情况下,就会出现,“输入多少个字符,if块里的错误代码就会执行多少遍+1的情况。”

这段代码的处理,有没有好一些的解决方法呢?

  • 用以下这种方式输入,异常比较好处理吧。 image.png

如果有更好的处理方法,请在下面留言,交流,超级感谢~