Python小练习之彩票分析——简单模拟彩票中奖的次数

本文通过Python编程模拟彩票中奖情况,分别考虑号码顺序和不考虑顺序两种情形,探讨中奖难度。在设定的最大抽奖次数内,记录中奖所需的循环次数,结果显示顺序考虑时中奖平均需8645次,不考虑顺序则减少至1054次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过调用random模块、定义函数、使用循环来简单模拟彩票大奖有多难中奖!这里我根据是否需要考虑号码顺序分成了两种情况。在不超过规定的最大抽奖次数的情况下,打印出循环了多少次才中奖或者一直没有中奖。

大致分为4个步骤:
1.定义中奖号码(假设是4位数)
2.定义彩票号码
3.识别是否中奖
4.导入数据,进行判断并输出结果(可以设置最大抽奖次数)

考虑号码顺序

#考虑号码顺序

from random import randint

def win(possibilities):
    """定义中奖号码"""
    winning_ticket = []
    
    while len(winning_ticket) < 4:
        one = choice(possibilities)
        if one not in winning_ticket:
            winning_ticket.append(one)
    return winning_ticket
     
    
def choose(possibilities):
    """定义彩票号码"""
    choose_ticket = []
    
    while len(choose_ticket) < 4:
        one = choice(possibilities)
        if one not in choose_ticket:
            choose_ticket.append(one)
    return choose_ticket


def identify(winning_ticket, choose_ticket, order = False):
    """识别彩票是否中奖,order参数默认不考虑号码顺序"""

    if order == False: 
        for i in choose_ticket:
            if i not in winning_ticket:
                return False
        
        return True
                
    elif order == True:
        if choose_ticket == winning_ticket:
            won = True
        else:
            won = False
        return won

possibilities = [1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f']
winning_ticket = win(possibilities)

max_times = 10_000
flag = True
times = 0

while flag:
    times += 1
    choose_ticket = choose(possibilities)
    won = identify(winning_ticket, choose_ticket, order = True)
    if times > max_times:
        print('很遗憾,你的次数已用完了仍然没有中奖!')
        break
    else:
        if won:
            print(f'恭喜你中奖了!中奖号码为{winning_ticket},你的号码为{choose_ticket},你一共抽了{times}次!')
            flag = False

输出结果:

恭喜你中奖了!中奖号码为[2, ‘a’, 6, ‘e’],你的号码为[2, ‘a’, 6, ‘e’],你一共抽了8645次!

不考虑号码顺序

#不考虑号码顺序

from random import randint

def win(possibilities):
    """定义中奖号码"""
    winning_ticket = []
    
    while len(winning_ticket) < 4:
        one = choice(possibilities)
        if one not in winning_ticket:
            winning_ticket.append(one)
    return winning_ticket
     
    
def choose(possibilities):
    """定义彩票号码"""
    choose_ticket = []
    
    while len(choose_ticket) < 4:
        one = choice(possibilities)
        if one not in choose_ticket:
            choose_ticket.append(one)
    return choose_ticket


def identify(winning_ticket, choose_ticket, order = False):
    """识别彩票是否中奖,order参数默认不考虑号码顺序"""

    if order == False: 
        for i in choose_ticket:
            if i not in winning_ticket:
                return False
        
        return True
                
    elif order == True:
        if choose_ticket == winning_ticket:
            won = True
        else:
            won = False
        return won

possibilities = [1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f']
winning_ticket = win(possibilities)

max_times = 10_000
flag = True
times = 0

while flag:
    times += 1
    choose_ticket = choose(possibilities)
    won = identify(winning_ticket, choose_ticket, order = False)
    if times > max_times:
        print('很遗憾,你的次数已用完了仍然没有中奖!')
        break
    else:
        if won:
            print(f'恭喜你中奖了!中奖号码为{winning_ticket},你的号码为{choose_ticket},你一共抽了{times}次!')
            flag = False

输出结果:

恭喜你中奖了!中奖号码为[7, 1, ‘d’, 3],你的号码为[‘d’, 3, 7, 1],你一共抽了1054次!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值