Python开发6位彩票程序:号码生成、校验、比对兑奖实现咨询
彩票程序后续功能实现方案
前置修正
你之前写的两部分代码有两个小问题需要先调整,不然没法跑通后续逻辑:
- 随机号码生成函数原来直接打印结果,没有返回值,没法拿到中奖号码做比对,需要把打印逻辑改成返回生成的号码列表
- 随机数生成的区间写的
range(1,59)存在边界错误,Python的range是左闭右开结构,这个写法最大只能生成58,要改成range(1,60)才能覆盖1-59的所有整数
修正后的随机号码生成函数:
import random def create_winning_numbers(): return random.sample(range(1, 60), 6)
核心逻辑实现
号码匹配
不需要写多层循环挨个比对,直接把两个号码列表转成集合,求交集的长度就是匹配正确的号码个数,写法简单运行效率也高。
奖金判定
直接按匹配到的号码个数做分支判断,对应给定的奖励规则输出结果就行。
完整可运行代码
import random def create_winning_numbers(): return random.sample(range(1, 60), 6) # 生成中奖号码 winning_numbers = create_winning_numbers() user_numbers = [] # 用户输入与合法性校验 for i in range(1,7): input_valid = False while not input_valid: number = input(f"请输入第{i}个1-59之间的选号: ") if not number.isnumeric(): print("输入不合法,请输入整数") continue number = int(number) if not 1 <= number <= 59: print("输入不合法,请输入1到59之间的数字") continue if number in user_numbers: print("该号码已经选过,请重新输入") continue user_numbers.append(number) input_valid = True # 号码匹配 match_count = len(set(winning_numbers) & set(user_numbers)) # 结果输出 print(f"\n本期中奖号码:{sorted(winning_numbers)}") print(f"你的选号:{sorted(user_numbers)}") print(f"匹配号码个数:{match_count}") # 奖金判定 if match_count == 6: print("恭喜获得JackPot头奖!") elif match_count == 5: print("恭喜获得1000英镑奖励") elif match_count == 4: print("恭喜获得100英镑奖励") elif match_count == 3: print("恭喜获得25英镑奖励") else: print("抱歉,下周再试")
代码里加了
sorted()对号码排序,输出的时候更符合日常看彩票号码的习惯,不想要可以直接删掉。
内容的提问来源于stack exchange,提问作者IndinanKing1234
相关产品推荐
相关产品推荐

