看了一下体彩超级大乐透规则:前区号码由01—35共三十五个号码组成,后区号码由01—12共十二个号码组成。由此可以使用random模拟体彩超级大乐透随机选号:
import random
import time
class Lottery:
'''一次模拟超级大乐透'''
def __init__(self):
'''初始化模型'''
self.num_choice_list = [i for i in range(1, 36)]#前区1至35数字
self.letter_choice_list = [chr(i) for i in range(97, 109)]#为了区分后区1至12数字,用字母a至l代替
def bet(self, num_times = 5, letter_times = 2):
'''前区共5个数字,后区共2个数字,可以更改参数'''
self.num_times = num_times
self.letter_times = letter_times
self.result = set()
#随机抽取5个数字,也可以简单使用random.sample()方法
self.num_times = 0
while self.num_times < num_times:
self.num_result = random.choice(self.num_choice_list)
if self.num_result not in self.result:
self.result.add(self.num_result)
else:
continue
self.num_times += 1
#随机抽取2个字母,也可以简单使用random.sample()方法
self.letter_times = 0
while self.letter_times < letter_times:
self.letter_result = random.choice(self.letter_choice_list)
if self.letter_result not in self.result:
self.result.add(self.letter_result)
else:
continue
self.letter_times += 1
return self.result
def count_probability(self):
'''统计中奖计算次数'''
self.try_nums = 0
self.tries = self.result
self.time_start = time.time() # 记录计算开始时间
while True:
self.try_nums += 1
self.bet()
if self.result == self.tries:
break
self.time_end = time.time()#记录计算结束时间
print(f'此次中奖共计算{self.try_nums}次,计算共用时{self.time_end - self.time_start}秒。')
因为用集合运行速度更快,中奖结果用set集合记录,在随机选择时剔除重复号码和字母。也可以使用random.sample选取,但为了练习,用了复杂一点的方法。同时为了区分前后区数字,后区两个数字用字母a至l代替。
my_bet = Lottery()
print(f'此次中奖号码为: {my_bet.bet()}')
my_bet.count_probability()#统计计算次数和花费时间
继续运行得到结果:
此次中奖号码为: {1, 'f', 'e', 4, 9, 17, 28}
此次中奖共计算31038748次,计算共用时131.57226610183716秒。
Process finished with exit code 0