在Go语言基础的第二课实践案例中介绍了用Go语言写出一个简单的猜谜游戏,其主要由以下几个部分构成:
1、在0到100范围内生成一个随机数:
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
可见,程序生成一个0到maxNum之间的随机数作为秘密数字secretNumber。
2、读取用户输入
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
提示用户输入数字,并使用bufio.NewReader创建一个读取器reader,用于从标准输入读取用户的输入。
3、修正输入信息
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
}
如果转换失败,则提示用户重新输入。
4、根据输入进行输出
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
判断用户输入较之答案过大或过小并给予提示,直至输入正确。
5、完整代码
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("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
}
}
}
6、学习总结
经过这次深入的学习实践,我对使用Go语言进行编程有了更加全面和深入的理解。从编写一个简单的猜谜游戏开始,我逐步掌握了Go语言中的随机数生成、用户输入处理、逻辑判断以及代码结构构建等多个关键技能。
在随机数生成方面,我学会了如何利用`math/rand`包中的`rand.Intn`函数,在指定范围内生成一个随机数,并通过`rand.Seed`函数设置随机数种子,确保每次运行程序时生成的随机数都是不同的,这为游戏的随机性提供了保障。
在用户输入处理方面,我掌握了利用`bufio.NewReader`创建读取器,并通过`ReadString`方法读取用户输入的技巧。同时,我也学会了如何去除输入字符串末尾的回车和换行符,以及如何将字符串转换为整数,并对转换失败的情况进行错误处理,这提高了程序的健壮性和用户体验。
在逻辑判断方面,我通过`if-else`语句对用户输入的数字与生成的随机数进行了大小比较,并根据比较结果给出了相应的提示。此外,我还利用`for`循环实现了不断读取用户输入并进行判断的功能,直到用户猜中数字为止,这为游戏的互动性提供了支持。
总的来说,这次学习实践不仅让我掌握了编写简单猜谜游戏所需的技能,更让我对Go语言有了更加深入的认识和理解。