模拟彩票随机抽选机制

模拟彩票随机抽选机制(大乐透,七星彩)

一、背景

17亿巨奖得主身份成谜 缴税后到手奖金不到4成
女子探亲老公购彩命中7星彩500万 自选号送惊喜
男子8+2小复式揽双色球598万 奖金全交爱人打理
男子10元揽双色球647万大奖 彩站3月刚中二等奖

一条条中奖新闻,让我们心怀期待,恨不得今晚就冲进彩票站,选上几注,然后美美的睡上一觉,静等明天的大奖。然而来到彩票站面对这么多数字的选择,一时又不知道买啥,与其机选一下,不如我们自己写段代码,帮我们去随机选上几组数据,怎么说也是咱们凭本事随机选的了。接下来,我将以大乐透与七星彩为例。

二、代码展示

1、首先了解游戏规则

大乐透游戏规则为:
在这里插入图片描述
七星彩游戏规则为:
在这里插入图片描述

2、大乐透代码:

import random
n=eval(input("请输入随机号码数量:"))
for k in range(1,n+1):
    list_red=random.sample(range(1,36),5)
    list_blue=random.sample(range(1,13),2)
    print("({:02}) ".format(k),end="")
    for i in list_red:
        print("{:02} ".format(i),end="")
    print("+ ",end="")
    for j in list_blue:
        print("{:02} ".format(j),end="")    
    print()

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\大乐透.py 
请输入随机号码数量:5
(01) 33 23 08 27 22 + 12 04 
(02) 26 31 04 29 14 + 06 08 
(03) 06 20 15 19 04 + 02 10 
(04) 34 24 04 27 08 + 11 12 
(05) 03 32 04 16 24 + 11 07 

Process finished with exit code 0

3、七星彩代码

import random
n=eval(input("请输入随机号码数量:"))
for k in range(1,n+1):
    list_front=random.choices(range(0,10),k=6)
    list_after=random.choices(range(0,15),k=1)
    print("({:02}) ".format(k),end="")
    for i in list_front:
        print("{}".format(i),end=" ")
    print("+ ",end="")
    for j in list_after:
        print("{}".format(j),end=" ")
    print()

运行结果展示:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\pyqt5\七星彩.py 
请输入随机号码数量:5
(01) 1 7 3 5 2 8 + 9 
(02) 2 8 8 3 1 1 + 14 
(03) 0 8 6 5 0 2 + 2 
(04) 2 6 1 0 0 8 + 3 
(05) 2 7 9 8 3 2 + 13 

Process finished with exit code 0

三、代码分析

1、eval函数

1)定义:

将字符串str当成有效表达式来求值并返回结果。
可以实现list列表、dict字典、tuple元组与str之间的转换。
eval也存在安全问题,因为它会执行任意传给它的代码, 在代码字符串未知或者是来自一个不信任的源时,绝对不要使用 eval函数。

2)代码举例说明
l='["a"]'
m='{"a","b"}'
n='{"a":1}'
i='123'
print(eval(l),end=" ") #print格式用法,下面详细讲解
print("类型为:"+str(type(eval(l))))
print(eval(m),end=" ") #end=" " 指不需要换行
print("类型为:"+str(type(eval(m))))
print(eval(n),end=" ")
print("类型为:"+str(type(eval(n))))
print(eval(i),end=" ")
print("类型为:"+str(type(eval(i))))

执行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
['a'] 类型为:<class 'list'>
{'a', 'b'} 类型为:<class 'set'>
{'a': 1} 类型为:<class 'dict'>
123 类型为:<class 'int'>

Process finished with exit code 0
3)类似函数
int函数

数字型字符串转换
示例:

a='123'
print(type(a))
print(int(a))

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
<class 'str'>
123

Process finished with exit code 0
isdigit函数

用于判断一个字符串是否包含数字

a='abc'
b='123'
print(type(a))
print(a.isdigit(),b.isdigit())

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
<class 'str'>
False True

Process finished with exit code 0
float函数

浮点数转换

b='123'
print(type(b))
print(float(b))

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
<class 'str'>
123.0

Process finished with exit code 0

2、random产生随机数的模块

1)random.random()随机生成一个(0≤x<1)的数值

代码:

import random
b=random.random()
print(b)

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
0.9585191387165336

Process finished with exit code 0
2)random.choice() 从非空序列随机选取一个元素(列表,元组,字符串)

代码:

import random
l='avkfbabnkf'
print(random.choice(l)) #随机抽取一个

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
f

Process finished with exit code 0
3)random.choices()放回性抽样-七星彩可以采用(存在重复的数字)
import random
test=random.choices(range(1,10),k=5)  #在1-10之间随机抽取5次,每次抽取后,数字再放回原来的池子里
print(test)

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
[3, 9, 6, 3, 9]

Process finished with exit code 0
4)random.randint()在指定范围内随机抽取一个整数
import random
print(random.randint(1,9))

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
3

Process finished with exit code 0
5)random.sample()随机选取一个数之后不再放回继续抽取。–大乐透
import random
print(random.sample(range(1,10),k=9)) #k=9,抽取9次

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
[9, 1, 8, 4, 5, 6, 3, 7, 2]

Process finished with exit code 0
6)random.uniform()随机生成一个区间的浮点数。
import random
print(random.uniform(1,10))

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
5.505242907428551

Process finished with exit code 0

3、format函数

1)用法

用于格式化字符串。可以接受无限个参数,可以指定顺序。返回结果为字符串。在这里只解释上面代码中的所用到的函数。

2){:02} 代表不满足两位数的左侧以0补充。
import random
list_front=random.choices(range(0,20),k=5)
print(list_front)
for i in list_front:
    print("{:02}".format(i))

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
[16, 14, 14, 12, 5]
16
14
14
12
05  #05就是以0为补充输出的

Process finished with exit code 0
3)end=" ",取消默认换行

根据上面返回的结果,我们可以看到,每执行一次for循环,则输出默认换行,看起来很别扭,我们通过end=""方式,取消换行,一行进行输出。

import random
list_front=random.choices(range(0,20),k=5)
print(list_front)
for i in list_front:
    print("{:02}".format(i),end=" ")

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
[11, 16, 17, 10, 4]
11 16 17 10 04 
Process finished with exit code 0

四、总结

1、娱乐精神

众所周知,彩票中奖率百万分之一,很多人一辈子也中不了一次,因此我们抱着娱乐的想法,有时间,有兴趣买一下就好了,切不能抱着赌博的心态。

2、实践验证知识

生活中的小场景,我们也可以通过代码去实现,这样不仅锻炼我们的技术能力,而且拓展了彩票这门相关的知识,在以后吹牛逼时也能侃侃而谈了,哈哈哈。下期再见!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值