这是我参与「第五届青训营 」伴学笔记创作活动的第 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
}
}
}