在第13天的时候,我们写了一个猜数字游戏.exe,那时候我们还没有学习集合、列表等知识点,程序还有很多功能待优化,今天,我们就把那天留下的待优化完善一下。
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
① 访问区间可以添加让玩家自行输入;
② 每次输入提示可以添加当前数字新区间;
③ 添加判断玩家输入的数字是否在区间内,若不在,返回让玩家重新输入;
④ 添加猜数字次数,若数字一直没有猜到,达到次数后终止。
操作:设置一个空列表,然后让玩家手动输入最小值和最大值,将两个值添加进空列表中。
# 定义默认区间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
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
今日学习完毕,课后作业:
优化后的代码也不复杂,大家看看涉及的知识点,有没有不熟悉的,建议重新看一遍对应的知识点。最后,建议代码要多打,熟能生巧。