3.6 实战:红包模拟 (练习)《Python程序编写入门》(高教版) 【上好课】

2026-08-18
| 2份
| 11页
| 3人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 程序设计基础
教材版本 -
年级 高一
章节 -
类型 作业-同步练
知识点 程序控制结构
使用场景 同步教学
学年 2026-2027
地区(省份) 全国
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 103 KB
发布时间 2026-08-18
更新时间 2026-08-18
作者 爱学习的muller
品牌系列 上好课·上好课
审核时间 2026-08-18
下载链接 https://m.zxxk.com/soft/59249339.html
价格 2.00储值(1储值=1元)
来源 学科网

内容正文:

实战:红包模拟 1、 单项选择题 1. Python中生成指定区间随机浮点数,用于拼手气红包的函数是( ) A. random.uniform() B. random.randint() C. random.random() D. random.shuffle() 2. 将可迭代对象转换为迭代器的Python内置函数是( ) A. range() B. yield C. next() D. iter() 3. 迭代器中所有元素读取完毕后,再次调用next()会抛出的异常是( ) A. IndexError B. ValueError C. StopIteration D. TypeError 4. 定义生成器函数必须使用的标志性关键字是( ) A. return B. break C. yield D. continue 5. 下列关于生成器执行机制描述正确的是( ) A. 一次性将所有数据加载到内存 B. 惰性计算,调用next时才生成单个值 C. 迭代结束后可以重复遍历 D. 不需要遵循迭代器协议 6. 拼手气红包总金额10元、共5份,单份金额不可能出现的是( ) A. 0.01 B. 1.25 C. 10.00 D. 10.01 7. 下列选项中属于可迭代对象,但本身不是迭代器的是( ) A. list列表 B. iter([1,2]) C. generator生成器 D. 迭代器对象 8. 均分红包核心代码single = money / count 属于哪类程序结构( ) A. 循环结构 B. 顺序结构 C. 递归结构 D. 迭代器结构 9. 自定义类要成为合法迭代器,必须实现的两个魔术方法是( ) A. __init__、__str__ B. append、pop C. yield、next D. __iter__、__next__ 10. 生成器表达式(x for x in range(10))与列表推导[x for x in range(10)]最核心的区别是( ) A. 生成器惰性生成,列表一次性加载全部数据 B. 仅列表支持for循环遍历 C. 生成器仅支持数字类型 D. 生成器长度固定不可修改 二、简答题 1. 简述普通均分红包与拼手气红包在Python代码实现上的核心差异。 2. 说明iter()与next()函数的功能,以及二者的执行顺序。 3. 简述yield关键字在生成器函数中的运行机制。 4. 写出迭代器的任意两条核心特性。 5. 简述for循环遍历列表时,底层自动执行的迭代流程。 6. 拼手气红包分配时,最后一份金额直接取剩余总额的原因是什么? 三、材料题 1. 财务发放固定福利均分红包,编写程序实现:输入红包总金额、红包人数,自动计算人均金额,保留两位小数,输出最终的红包金额列表。 2. 模拟微信拼手气红包:导入random模块,输入红包总额与个数,随机分配每份金额,要求每份最低0.01元,最后一份兜底剩余金额,输出所有红包明细。 3. 自定义迭代器类NumIter,遵循迭代器协议,实现依次输出1~n的所有整数,使用for循环完成遍历测试。 4. 编写生成器函数money_gen,传入红包总额与份数,通过yield惰性逐个产出拼手气红包金额,使用next()依次取出每一份红包。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 实战:红包模拟 1、 单项选择题 1. Python中生成指定区间随机浮点数,用于拼手气红包的函数是( ) A. random.uniform() B. random.randint() C. random.random() D. random.shuffle() 【答案】A 【解析】uniform(a,b)生成[a,b]区间的均匀随机浮点数,是实现随机红包金额的核心函数;randint仅生成整数,random生成0-1随机数,shuffle用于打乱列表。 2. 将可迭代对象转换为迭代器的Python内置函数是( ) A. range() B. yield C. next() D. iter() 【答案】D 【解析】iter(可迭代对象)用于创建对应迭代器实例;next用于从迭代器中取出元素,yield是生成器定义关键字。 3. 迭代器中所有元素读取完毕后,再次调用next()会抛出的异常是( ) A. IndexError B. ValueError C. StopIteration D. TypeError 【答案】C 【解析】迭代器元素耗尽时,next()固定抛出StopIteration异常,作为迭代终止的标志,for循环会自动捕获该异常结束遍历。 4. 定义生成器函数必须使用的标志性关键字是( ) A. return B. break C. yield D. continue 【答案】C 【解析】yield是生成器特有关键字,实现函数暂停与现场保存;return直接终止函数运行,无法实现惰性迭代。 5. 下列关于生成器执行机制描述正确的是( ) A. 一次性将所有数据加载到内存 B. 惰性计算,调用next时才生成单个值 C. 迭代结束后可以重复遍历 D. 不需要遵循迭代器协议 【答案】B 【解析】生成器核心特性是惰性按需计算,仅在迭代时生成单个值,内存占用极低;迭代器是一次性单向遍历,必须遵循迭代器协议。 6. 拼手气红包总金额10元、共5份,单份金额不可能出现的是( ) A. 0.01 B. 1.25 C. 10.00 D. 10.01 【答案】D 【解析】random.uniform生成的随机金额不会超过总金额边界,10.01大于红包总额,无法在分配中出现。 7. 下列选项中属于可迭代对象,但本身不是迭代器的是( ) A. list列表 B. iter([1,2]) C. generator生成器 D. 迭代器对象 【答案】A 【解析】列表是可迭代对象,必须调用iter()转换后才能成为迭代器;生成器本身就是迭代器,可直接使用next()取值。 8. 均分红包核心代码single = money / count 属于哪类程序结构( ) A. 循环结构 B. 顺序结构 C. 递归结构 D. 迭代器结构 【答案】B 【解析】该语句是单纯的算术赋值,无判断、无循环,按书写顺序依次执行,属于基础顺序结构。 9. 自定义类要成为合法迭代器,必须实现的两个魔术方法是( ) A. __init__、__str__ B. append、pop C. yield、next D. __iter__、__next__ 【答案】D 【解析】Python迭代器协议规定:__iter__返回迭代器自身,__next__返回下一个元素或抛出StopIteration异常。 10. 生成器表达式(x for x in range(10))与列表推导[x for x in range(10)]最核心的区别是( ) A. 生成器惰性生成,列表一次性加载全部数据 B. 仅列表支持for循环遍历 C. 生成器仅支持数字类型 D. 生成器长度固定不可修改 【答案】A 【解析】列表推导会一次性生成完整列表并将所有数据存入内存;生成器仅保存运算逻辑,迭代时逐个生成数据,大幅降低内存占用,适合大数据场景。 二、简答题 1. 简述普通均分红包与拼手气红包在Python代码实现上的核心差异。 【答案】普通均分红包仅使用算术除法计算单份金额,所有人金额完全相等,不需要随机函数;拼手气红包通过循环调用random.uniform生成随机金额,最后一份直接取剩余金额保证总额正确,每份金额随机不相等。 2. 说明iter()与next()函数的功能,以及二者的执行顺序。 【答案】iter()接收可迭代对象,生成对应的迭代器实例;next()接收迭代器,取出下一个元素。执行顺序为先调用iter()创建迭代器,再反复调用next()逐个取值,元素耗尽后抛出StopIteration。 3. 简述yield关键字在生成器函数中的运行机制。 【答案】代码执行到yield时会暂停函数运行,返回yield后的值,同时保存当前所有变量与执行位置;下一次调用next()唤醒函数时,从暂停位置继续向下执行。 4. 写出迭代器的任意两条核心特性。 【答案】①单向遍历,只能向前取值,无法回退到之前的元素;②一次性遍历,所有元素取出后无法重复使用,需要重新创建迭代器实例;③惰性加载,不会一次性把所有数据读入内存,内存占用低。 5. 简述for循环遍历列表时,底层自动执行的迭代流程。 【答案】1. 隐式调用iter()将列表转换为迭代器;2. 循环调用next()取出元素并赋值给循环变量;3. 元素耗尽时触发StopIteration异常;4. for循环自动捕获该异常,结束遍历。 6. 拼手气红包分配时,最后一份金额直接取剩余总额的原因是什么? 【答案】多次随机浮点数相加会产生精度误差,最后一份直接取剩余金额,可以保证所有红包金额相加严格等于输入总金额,避免出现总额对不上的问题。 三、材料题 1. 财务发放固定福利均分红包,编写程序实现:输入红包总金额、红包人数,自动计算人均金额,保留两位小数,输出最终的红包金额列表。 【答案】参考代码: money = eval(input("请输入红包总金额:")) count = eval(input("请输入红包人数:")) single = round(money / count, 2) red_pack = [single] * count print("均分红包列表:", red_pack) 【解析】纯顺序结构实现,通过算术除法完成均分,round控制人民币两位小数精度,考察输入输出、列表基础操作与顺序结构知识点。 2. 模拟微信拼手气红包:导入random模块,输入红包总额与个数,随机分配每份金额,要求每份最低0.01元,最后一份兜底剩余金额,输出所有红包明细。 【答案】参考代码: import random total = eval(input("输入红包总额:")) num = eval(input("输入红包个数:")) pack = [] remain = total for i in range(num - 1): # 保证后续剩余红包每份至少0.01元 m = round(random.uniform(0.01, remain - 0.01*(num-i-1)), 2) pack.append(m) remain -= m pack.append(round(remain, 2)) print("拼手气红包:", pack) 【解析】综合考察random.uniform随机函数、for循环、浮点数精度兜底逻辑,是本节课红包实战的核心代码,覆盖循环与随机数综合应用。 3. 自定义迭代器类NumIter,遵循迭代器协议,实现依次输出1~n的所有整数,使用for循环完成遍历测试。 【答案】参考代码: class NumIter: def __init__(self, n): self.max = n self.current = 1 def __iter__(self): return self def __next__(self): if self.current > self.max: raise StopIteration res = self.current self.current += 1 return res # 测试代码 obj = NumIter(5) for i in obj: print(i) 【解析】手动实现迭代器协议的两个魔术方法,理解迭代器底层工作原理,区分类实现迭代器与可迭代对象的差异,覆盖迭代器核心知识点。 4. 编写生成器函数money_gen,传入红包总额与份数,通过yield惰性逐个产出拼手气红包金额,使用next()依次取出每一份红包。 【答案】参考代码: import random def money_gen(total, count): remain = total for i in range(count - 1): m = round(random.uniform(0.01, remain - 0.01*(count-i-1)), 2) yield m remain -= m yield round(remain, 2) # 测试调用 g = money_gen(50, 3) print(next(g)) print(next(g)) print(next(g)) 【解析】结合红包业务场景考察yield生成器,通过惰性计算逐个产出红包金额,体现生成器节省内存的优势,覆盖生成器与红包实战两大核心知识点。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

3.6 实战:红包模拟 (练习)《Python程序编写入门》(高教版) 【上好课】
1
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。