当前位置:首页>python>小白学python第42天之完善猜数字游戏.exe

小白学python第42天之完善猜数字游戏.exe

  • 2026-10-21 13:27:38
小白学python第42天之完善猜数字游戏.exe

1.18

完善猜数字游戏.exe

?

学前疑问

在第13天的时候,我们写了一个猜数字游戏.exe,那时候我们还没有学习集合、列表等知识点,程序还有很多功能待优化,今天,我们就把那天留下的待优化完善一下。

1

完善猜数字游戏

(1)回顾原始代码

import randomi = 1sercetNum = random.randint(1,100)while i <= 100:    useNum = int(input('请输入您的数字(1-100):'))if sercetNum == useNum:        print('恭喜你猜对了')        input('按回车键退出程序')  # 避免程序执行完立刻关闭break    elif sercetNum > useNum:        print('猜小了,请重猜')    elif sercetNum < useNum:        print('猜大了,请重猜')    i += 1

(2)回顾待优化项

① 访问区间可以添加让玩家自行输入;

② 每次输入提示可以添加当前数字新区间;

③ 添加判断玩家输入的数字是否在区间内,若不在,返回让玩家重新输入;

④ 添加猜数字次数,若数字一直没有猜到,达到次数后终止。

(3)分析

①访问区间可以添加让玩家自行输入

操作:设置一个空列表,然后让玩家手动输入最小值和最大值,将两个值添加进空列表中。

# 定义默认区间range1 = []# 让玩家输入最小值和最大值selectA = int(input('请输入猜字范围(最小值):'))selectB = int(input('请输入猜字范围(最大值):'))# 将玩家输入的数字添加进列表range1中range1.append(selectA)range1.append(selectB)

② 每次输入提示可以添加当前数字新区间

操作:在原代码中,有随机生成数sercetNum与玩家输入的数useNum做大小对比,我们只需要在对比后,若两数不相等,useNum大,就利用列表的改功能,替换列表range1[1],反之,替换列表range1[0]。

elif sercetNum > useNum:    range1[0] = useNum    print('猜小了,请重猜')elif sercetNum < useNum:    range1[1] = useNum    print('猜大了,请重猜')

③ 添加判断玩家输入的数字是否在区间内,若不在,返回让玩家重新输入

操作:前面判断了数是否相等已经大小,若还有不在区间内,直接加个else返回即可。

else:        print(f'你输入的数字不在正整数区间{range1}内,请重新再输')

④ 添加猜数字次数,若数字一直没有猜到,达到次数后终止。

操作:手动设置猜测次数,然后设置输入次数的初始值0,每次循环,次数减1.

# 部分功能代码# 设置最大猜测次数max_attempts = int(input('请输入最大允许猜测次数:'))# 初始化猜测次数计数器guess_count = 0# 检查是否达到最大猜测次数        if guess_count >= max_attempts:            print(f'很遗憾,您已经用了{max_attempts}次机会,还是没有猜中。')            print(f'正确的数字是{secretNum}。游戏结束。')            input('按回车键退出程序')            break# 循环最后次数减1          guess_count -= 1

(4)代码整合

import random# 定义默认区间range1 = []print('欢迎来到猜字游戏')# 让玩家输入最小值和最大值selectA = int(input('请输入猜字范围(最小值):'))selectB = int(input('请输入猜字范围(最大值):'))# 设置最大猜测次数max_attempts = int(input('请输入最大允许猜测次数:'))# 将玩家输入的数字添加进列表range1中range1.append(selectA)range1.append(selectB)# 调用random模块系统随机生成数secretNum = random.randint(selectA, selectB)# 初始化猜测次数计数器guess_count = 0# while循环条件,True无限循环,除非除非break结束循环while True:    # 显示剩余次数    remaining_attempts = max_attempts - guess_count    print(f'您还有{remaining_attempts}次机会')    # 提示玩家在区间内输入数字    useNum = int(input(f'请输入您的数字,范围为{range1}:'))    guess_count += 1  # 增加猜测次数    # if外层,判断玩家输入的数字是否在区间,符合则继续执行if内层    if useNum >= range1[0] and useNum <= range1[1]:        # if内层,判断数字是否猜中        if secretNum == useNum:            print(f'恭喜你猜对了!你一共用了{guess_count}次猜测。')            input('按回车键退出程序')  # 避免程序执行完立刻关闭            break        elif secretNum > useNum:            range1[0] = useNum            print('猜小了,请重猜')        elif secretNum < useNum:            range1[1] = useNum            print('猜大了,请重猜')        # 检查是否达到最大猜测次数        if guess_count >= max_attempts:            print(f'很遗憾,您已经用了{max_attempts}次机会,还是没有猜中。')            print(f'正确的数字是{secretNum}。游戏结束。')            input('按回车键退出程序')            break    # 玩家输入的数字不在区间,则提示    else:        print(f'你输入的数字不在正整数区间{range1}内,请重新再输')        # 注意:无效输入不计入猜测次数,所以这里需要减少计数        guess_count -= 1

(5)生成.exe可执行文件

pyinstaller -F .\test.py

(6)运行程序

今日学习完毕,课后作业:

优化后的代码也不复杂,大家看看涉及的知识点,有没有不熟悉的,建议重新看一遍对应的知识点。最后,建议代码要多打,熟能生巧。

最新文章

随机文章