Python模拟超级大乐透随机选号

看了一下体彩超级大乐透规则:前区号码由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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值