AI编程(十三):猜数字游戏 — 把学过的全用上

作者:

不学任何新东西,用一个游戏把前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,然后对比一下。


下一篇:密码生成器 — 用随机数和字符串操作,做一个帮你生成强密码的小工具。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注