Python编写彩票中奖模拟程序时While循环无限运行入门问题求助
彩票模拟代码问题修复方案
核心错误点
- 类型不匹配:
input()函数默认返回字符串类型,你存入chosen列表的是字符串,而random.randint()生成的是整数,drawn_numbers[i] in chosen的判断永远为假,count 永远无法累加到3,因此陷入死循环。 - 计数逻辑错误:你使用的 count 是全局变量,未在每次开奖前重置,即使类型问题修复,只要累计命中3次数字就会退出,不需要同一次开奖全部命中,不符合头奖规则。
- 匹配规则错误:头奖要求3个数字按顺序完全匹配,你当前的逻辑只要数字存在于选中列表就算命中,不需要位置对应,和需求规则不符。
修复后代码
import random # 接收输入时转换为整数 chosen = [] for i in range(3): num = int(input("Please input your lucky number: ")) chosen.append(num) week_count = 0 print(f"Your chosen numbers are: {chosen[0]}, {chosen[1]}, {chosen[2]}") while True: # 生成当期开奖号码 drawn_numbers = [random.randint(1, 30) for _ in range(3)] week_count += 1 # 按顺序匹配,完全一致则中奖 if drawn_numbers == chosen: break print(f"It took you {week_count} weeks to win.")
优化说明
- 输入阶段直接将用户输入转换为整数,避免类型不匹配问题
- 取消冗余的count变量,直接对比两个列表是否完全相等,天然满足顺序一致的要求
- 每次循环直接生成当期开奖列表,不需要额外清空操作,逻辑更简洁
- 当列表完全相等时跳出循环,返回累计的周数,完全符合需求规则
内容的提问来源于stack exchange,提问作者zаѓатhᵾѕтѓа
相关产品推荐
相关产品推荐

