Go 入门(24):练习——猜数字游戏
更新时间:2026-09-01。本文是
languages/go/beginner/入门层第 24 篇,接 sync 包。综合练习,用已学知识写一个猜数字游戏:程序生成一个 1-100 的随机数,玩家猜,猜大了提示"大了",猜小了提示"小了",猜中提示"恭喜"并显示次数。
需求
- 程序随机生成一个 1-100 的整数
- 玩家输入数字猜
- 猜大了 → 提示"大了"
- 猜小了 → 提示"小了"
- 猜对了 → 提示"恭喜"和猜的次数
- 输入非法(不是数字、超出范围)→ 提示重新输入,不算次数
- 玩家可以输 exit 退出
用到的知识
math/rand和time生成随机数bufio.Scanner读取输入strconv.Atoi转换字符串到数字strings.TrimSpace去除空格for循环控制游戏流程if-else判断大小- 计数器记录猜的次数
实现
go
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
// 1. 生成随机数
rand.Seed(time.Now().UnixNano())
target := rand.Intn(100) + 1 // 1-100
fmt.Println("🎯 猜数字游戏(1-100),输入 exit 退出")
scanner := bufio.NewScanner(os.Stdin)
attempts := 0
for {
fmt.Print("请输入你的猜测:")
scanner.Scan()
input := strings.TrimSpace(scanner.Text())
// 退出条件
if input == "exit" {
fmt.Println("下次再来玩!")
break
}
// 转数字
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("请输入有效数字")
continue
}
// 范围检查
if guess < 1 || guess > 100 {
fmt.Println("数字必须在 1-100 之间")
continue
}
attempts++
// 判断大小
if guess > target {
fmt.Println("大了")
} else if guess < target {
fmt.Println("小了")
} else {
fmt.Printf("🎉 恭喜!猜对了!数字是 %d,你猜了 %d 次\n", target, attempts)
break
}
}
}运行
bash
go run guess_number.go
🎯 猜数字游戏(1-100),输入 exit 退出
请输入你的猜测:50
大了
请输入你的猜测:25
小了
请输入你的猜测:37
大了
请输入你的猜测:31
🎉 恭喜!猜对了!数字是 31,你猜了 4 次扩展练习
- 加一个"最高分"功能:记录历史最少猜的次数
- 联网版:两个玩家,轮流猜,比谁猜得少
- 难度选择:1-100 / 1-1000 两个模式
- 带日志:把每次游戏记录写进文件,下次启动展示历史
相关与延伸
下一篇:练习:CLI 待办事项工具;标准库
math/rand的使用,在 时间处理 有提到,bufio.Scanner见 文件 I/O。
一句话总结
猜数字游戏:综合了随机数生成、标准输入读取、字符串转换、循环控制和条件判断,用到的都是 Go 入门层前 23 篇的知识点——一个完整的"学了能用"的小项目。