不学任何新东西,用一个游戏把前12篇的知识串起来
一、换个方式巩固
前12篇你学了不少:变量、条件判断、循环、函数、列表字典、文件操作、错误处理。
但说实话,学完和”会用”之间还差一段距离。就像学了菜谱但没进过几次厨房。
今天开始的12篇,不学任何新东西。每篇做一个小项目,把学过的知识用起来。用着用着,它们就变成你的了。
第一个项目:猜数字游戏。
二、游戏规则
程序在心里想一个1-100的数字,你来猜。
- 猜大了,它说”大了”
- 猜小了,它说”小了”
- 猜对了,它说”恭喜”,并告诉你猜了几次
就这么简单。但这个小游戏会用到:随机数、循环、条件判断、输入输出、变量——全是前12篇学过的。
三、先跟AI聊
你的提示词:
用Python写一个猜数字游戏。程序随机生成1-100的数字,用户反复猜,程序提示”大了”或”小了”,猜对后显示总共猜了几次。加上详细的中文注释。
AI会给你一段代码,大概长这样:
import random
# 生成1-100的随机整数
answer = random.randint(1, 100)
# 记录猜测次数
count = 0
print("我想了一个1-100的数字,你来猜猜看!")
while True:
# 获取用户输入
guess = int(input("请输入你猜的数字:"))
# 次数加1
count += 1
# 判断大小
if guess > answer:
print("大了,再试试!")
elif guess < answer:
print("小了,再试试!")
else:
print(f"恭喜你猜对了!答案就是{answer}")
print(f"你总共猜了{count}次")
break
四、逐行理解
别急着运行,我们一行一行看。
第1行:import random
还记得第11篇说的吗?Python有很多”工具箱”(模块),random就是其中一个,专门生成随机数。
import random就是把工具箱搬到桌上。
第3行:answer = random.randint(1, 100)
random.randint(1, 100)的意思是:给我一个1到100之间的随机整数(包括1和100)。
这个数字存到变量answer里。程序”心里想好”了这个数字。
第5行:count = 0
一个计数器,从0开始。每猜一次就加1。这就是第四篇学的变量。
第9行:while True:
无限循环。还记得第六篇吗?while True就是”一直做,直到我让你停”。
什么时候停?猜对的时候,用break跳出循环。
第11行:guess = int(input(...))
这行有点意思。input()让用户输入文字,但它返回的是字符串(文字类型)。而我们要比较大小,得把文字转成数字。
int()就是干这个的——把”50″变成50。
还记得第四篇的数据类型吗?字符串”50″和数字50是不同的东西。
第16-22行:条件判断
if guess > answer:
print("大了,再试试!")
elif guess < answer:
print("小了,再试试!")
else:
print("恭喜你猜对了!")
这就是第五篇学的条件判断。三种情况:大了、小了、对了。
第21行:break
跳出循环。游戏结束。
五、运行试试
把代码保存为guess.py,运行:
python guess.py
试着玩几局。你会发现:
- 程序每次想的数字不一样(因为是随机的)
- 它真的会告诉你大了还是小了
- 最后会告诉你猜了几次
一个正常的二分法策略(每次猜中间值),最多7次就能猜中1-100之间的任何数字。你可以试试。
六、第一个改进:输入验证
玩几局后你可能会发现一个问题:如果输入的不是数字呢?比如手滑输入了”abc”?
程序会直接崩溃:
ValueError: invalid literal for int() with base 10: 'abc'
还记得第十篇的错误处理吗?用try...except来处理:
import random
answer = random.randint(1, 100)
count = 0
print("我想了一个1-100的数字,你来猜猜看!")
while True:
# 用try...except处理非法输入
try:
guess = int(input("请输入你猜的数字:"))
except ValueError:
print("请输入一个有效的数字!")
continue # 跳过这次循环,重新输入
count += 1
if guess > answer:
print("大了,再试试!")
elif guess < answer:
print("小了,再试试!")
else:
print(f"恭喜你猜对了!答案就是{answer}")
print(f"你总共猜了{count}次")
break
改动就三行:
try:和except ValueError:包住输入- 如果输入不是数字,打印提示
continue跳过这次循环,让用户重新输入
这就是错误处理的威力——程序不再一碰就碎。
七、第二个改进:猜过的数字不再猜
再想一下,如果用户猜了50大了,又猜60小了,那答案就在51-59之间。用户如果又猜50,程序应该提醒他”你猜过了”。
这需要用到列表(第八篇学的)来记住猜过的数字:
import random
answer = random.randint(1, 100)
count = 0
guess_history = [] # 记住所有猜过的数字
print("我想了一个1-100的数字,你来猜猜看!")
while True:
try:
guess = int(input("请输入你猜的数字:"))
except ValueError:
print("请输入一个有效的数字!")
continue
# 检查是否猜过
if guess in guess_history:
print(f"你之前猜过{guess}了,换个数字试试!")
continue
# 记录这次的猜测
guess_history.append(guess)
count += 1
if guess > answer:
print("大了,再试试!")
elif guess < answer:
print("小了,再试试!")
else:
print(f"恭喜你猜对了!答案就是{answer}")
print(f"你总共猜了{count}次")
# 显示猜测历史
print(f"你的猜测过程:{guess_history}")
break
新增的部分:
guess_history = []创建一个空列表if guess in guess_history:检查数字是否在列表里(第八篇学的in操作)guess_history.append(guess)把新猜测加到列表末尾- 最后打印整个猜测过程
八、第三个改进:加难度选择
再加一个功能:让玩家选难度。
- 简单:1-50
- 普通:1-100
- 困难:1-500
import random
print("=== 猜数字游戏 ===")
print("1. 简单(1-50)")
print("2. 普通(1-100)")
print("3. 困难(1-500)")
try:
level = int(input("请选择难度(1/2/3):"))
except ValueError:
level = 2 # 默认普通
# 根据难度设置范围
if level == 1:
max_num = 50
elif level == 3:
max_num = 500
else:
max_num = 100
answer = random.randint(1, max_num)
count = 0
guess_history = []
print(f"n我想了一个1-{max_num}的数字,你来猜猜看!")
while True:
try:
guess = int(input("请输入你猜的数字:"))
except ValueError:
print("请输入一个有效的数字!")
continue
if guess in guess_history:
print(f"你之前猜过{guess}了,换个数字试试!")
continue
guess_history.append(guess)
count += 1
if guess > answer:
print("大了,再试试!")
elif guess < answer:
print("小了,再试试!")
else:
print(f"n恭喜你猜对了!答案就是{answer}")
print(f"你总共猜了{count}次")
print(f"你的猜测过程:{guess_history}")
# 评价表现
if count <= 3:
print("🏆 太厉害了,简直是猜数字天才!")
elif count <= 7:
print("👍 不错,用了二分法吧?")
else:
print("💪 还行,下次试试每次猜中间值")
break
这里用到了:
- 条件判断选择难度
- 变量存储范围上限
- f-string动态显示范围
- 多层条件评价表现
九、回顾一下用到了什么
| 知识点 | 在哪里用的 |
|---|
|——–|———–|
| 变量 | answer, count, guess_history |
|---|---|
| 数据类型转换 | int(input(…)) |
| 条件判断 | if/elif/else 判断大小 |
| 循环 | while True 反复猜 |
| break/continue | 猜对跳出/跳过本次 |
| 列表 | guess_history 存猜测记录 |
| in操作 | 检查是否猜过 |
| append | 添加新猜测 |
| try/except | 处理非法输入 |
| import | 导入random模块 |
| f-string | 动态显示信息 |
11个知识点,全是从第1-12篇学的。没有一个新东西。
这就是今天的重点:你不需要学新知识才能做有趣的东西。把学过的用好,已经能做出一个完整的小游戏了。
十、今日小练习
试着自己加一个功能(可以问AI帮忙):
功能:限制猜测次数
- 简单模式最多25次
- 普通模式最多10次
- 困难模式最多20次
- 次数用完还没猜对,公布答案
提示:你需要一个变量来记录剩余次数,每次猜完减1,减到0就结束游戏。
想想你会怎么写?先自己想,再问AI,然后对比一下。
下一篇:密码生成器 — 用随机数和字符串操作,做一个帮你生成强密码的小工具。
发表回复