如何用Python实现可判断中奖结果及次数的抽奖程序
实现思路与修正代码
现有代码问题
- 生成的随机数范围是
range(1,90),只能取到1~89,遗漏了90 - 直接打印生成的随机数行,没有存储整个网格的数据,后续无法做存在性校验
- 循环逻辑冗余,可直接用更简洁的方式生成5x5网格
核心实现逻辑
- 先校验获取用户输入的1~90范围内的整数
- 生成5x5网格时把数据存入二维列表,方便后续遍历校验
- 遍历整个二维列表,统计用户输入数字的出现次数
- 打印网格和最终中奖结果
修正后可运行代码
import random # 1. 获取用户合法输入 while True: try: user_num = int(input("请输入1~90之间的数字:")) if 1 <= user_num <= 90: break print("输入超出范围,请重新输入") except ValueError: print("输入不是有效数字,请重新输入") # 2. 生成5x5不重复随机数网格(如果允许重复可调整为逐行生成) all_nums = random.sample(range(1, 91), k=25) grid = [all_nums[i*5 : (i+1)*5] for i in range(5)] # 3. 统计数字出现次数 count = 0 for row in grid: if user_num in row: count += row.count(user_num) # 4. 打印网格和结果 print("\n生成的5x5网格如下:") for row in grid: print(row) if count > 0: print(f"\n恭喜中奖!你选择的数字{user_num}共出现了{count}次") else: print(f"\n很遗憾,你选择的数字{user_num}未在网格中出现,未中奖")
逻辑说明
- 如果你允许网格中出现重复数字,把生成网格的代码替换为逐行生成即可:
grid = [] for _ in range(5): grid.append(random.sample(range(1,91), k=5))
- 统计逻辑也可以简化为单行写法:
count = sum(row.count(user_num) for row in grid)
内容的提问来源于stack exchange,提问作者andr3a00
相关产品推荐
相关产品推荐

