GO语言的实战案例之猜谜游戏|青训营笔记

62 阅读1分钟

这是我参与「第五届青训营」伴学笔记创作活动的第4天。
猜谜游戏
程序随机生成一个0-100之间的整数,由用户进行猜测,程序会根据用户的输入给出相应的提示(猜测数字大于或小于准确数字),直到用户猜测正确。 image.png 生成随机数

	maxNum := 100
	secretNumber := rand.Intn(maxNum)
	fmt.Println("The secret number is ", secretNumber)

image.png 运行后会发现每次结果都是一样的。
在使用rand.Intn(maxNum)之前需要设置随机数种子

	maxNum := 100
	rand.Seed(time.Now().UnixNano()) //用时间戳来初始化随机数种子
	secretNumber := rand.Intn(maxNum)
	fmt.Println("The secret number is ", secretNumber)

image.png 设置随机数种子后,每次运行结果都不同。
读取用户输入

	fmt.Println("Please input your guess")
	reader := bufio.NewReader(os.Stdin)
	input, err := reader.ReadString('\n') //读取一行输入
	if err != nil {
		fmt.Println("An error occured while reading input. Please try again", err)
		return
	}
	input = strings.Trim(input, "\r\n") // 去掉换行符

	guess, err := strconv.Atoi(input) //转换成数字
	if err != nil {
		fmt.Println("Invalid input. Please enter an integer value")
		return
	}
	fmt.Println("You guess is", guess)
}

实现判断逻辑

        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!")
	}

完整代码

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 {
		input, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("An error occured while reading input. Please try again", err)
			continue
		}
		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
		}
	}
}