猜数字游戏|青训营笔记

168 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

今天分享下猜字谜游戏的逻辑:

  1. 首先要有两个变量,一个是你要猜的随机数,一个是你输入的数字
  2. 根据这两个数字的大小是否相等来证明猜的对与错

我这里定义了三个变量,guess用来将输入的字符串数字转换成int类型

maxNum := 100 
rand.Seed(time.Now().UnixNano()) //设置一个种子,用来生成随机数
secretNum := rand.Intn(maxNum)//随机数的范围是0~100
reader := bufio.NewReader(os.Stdin)//定义一个bufio流
input, err := reader.ReadString('\n') //读取bufio流中那一行的数据
guess, err := strconv.Atoi(input)//将input转换成int类型来判断数字大小是否相等

利用if 条件语句比较guess和secretNum的值,并给出提示猜字谜游戏就完成了

if guess > secretNum {
   fmt.Println("Your guess num is bigger than secret number")
   fmt.Println("Please your guess:")
} else if guess < secretNum {
   fmt.Println("Your guess num is smaller than secret number")
   fmt.Println("Please your guess:")

} else {
   fmt.Println("The secret number is ", secretNum)
   fmt.Println("You are win")
   }

但是这样的话只能猜一次,随后任务便结束了,不能猜到正确答案,因此我们加一个for循环便可解决这样的问题

package main

import (
   "bufio"
   "fmt"
   "math/rand"
   "os"
   "strconv"
   "strings"
   "time"
)

func main() {
   maxNum := 100
   rand.Seed(time.Now().UnixNano()) //设置一个种子,用来生成随机数
   secretNum := rand.Intn(maxNum)   //随机数的范围是0~100
   reader := bufio.NewReader(os.Stdin)
   fmt.Println("Please input your guess")
   for {

      input, err := reader.ReadString('\n') //读取read流
      if err != nil {
         fmt.Println("An error occured while reading input,Please again", err)
         continue
      }
      input = strings.Trim(input, "\r\n") //去除读取流中的换行和空格
      guess, err := strconv.Atoi(input)
      if err != nil {
         fmt.Println("An error occured :", err)
         continue//如果发生错误,跳过该次循环,继续执行下次循环
      }
      fmt.Println("Your guess number is :", guess)
      if guess > secretNum {
         fmt.Println("Your guess num is bigger than secret number")
         fmt.Println("Please your guess:")
      } else if guess < secretNum {
         fmt.Println("Your guess num is smaller than secret number")
         fmt.Println("Please your guess:")

      } else {
         fmt.Println("The secret number is ", secretNum)
         fmt.Println("You are win")
         break
      }
   }
}