2021年2月24日,大家新年好。
我爹常年买彩票,今年过年期间突然想起让我写个程序来帮他选彩票。我一听挺简单的,没放心上,直到今天才想起说写一个,我先去查了一下双色球的选号规则,前六位数字在0-33之间(不包含两端),第七位在0-16之间(不包含两端)这种用个random写个随机数就行了嘛,然后就开始以下的代码编写
import random
a = random.randint(1,32)
b = random.randint(1,32)
c = random.randint(1,32)
d = random.randint(1,32)
e = random.randint(1,32)
f = random.randint(1,32)
g = random.randint(1,16)
print('输出为:'+str(a)+' ,'+str(b)+' ,'+str(c)+' ,'+str(d)+' ,'+str(e)+' ,'+str(f)+' ,'+str(g))
真的是不写Python久了,代码都写不来了,这个代码写的那叫一个麻烦,随后我写下了以下代码
import random
result = []
for i in range(0,6):
red = random.randint(1,33)
result.append(red)
blue = random.randint(1,16)
result.append(blue)
print(result)
后续我又想到,这样只能生成一组,何不加一个input()函数呢,来确定输入了几组数据呢,随后又有了以下代码
import random
lenth = input()
lenth = int(lenth) + 1
for e in range(1,lenth):
result = []
for i in range(0,6):
red = random.randint(1,33)
result.append(red)
blue = random.randint(1,16)
result.append(blue)
print(result)
然后就直接打包成了exe给了我爹。谁知道却出现了一个很明显的漏洞,我作为一个不买彩票的,却忘了这个双色球的每个数字都不能重复。然后我试了试程序,结果如下
很明显能看到,第五行出现了重复。所以修改了程序,如下
import random
print('随机生成双色球程序,操作规则如下,待程序运行开始,输入一个数字,')
print('该数字为双色球或大乐透随机生成的个数,随后回车确认,即可生成相')
print('应组数的号码')
print('---<双色球随机生成器>---')
len = input('双色球随机产生:')
len = int(len) + 1
for x in range(1,len):
a = random.randint(1,32)
b = random.randint(1,32)
if a != b:
c = random.randint(1,32)
if c != b and c != a:
d = random.randint(1,32)
if d !=a and d != b and d != c:
e = random.randint(1,32)
if e != a and e != b and e != c and e != d:
f = random.randint(1,32)
if f != a and f != b and f != c and f != d and f != e:
g = random.randint(1,16)
if g != a and g != b and g != c and g != d and g != e and g != f:
print('输出为:'+str(a)+' ,'+str(b)+' ,'+str(c)+' ,'+str(d)+' ,'+str(e)+' ,'+str(f)+' ,'+str(g))
else:
break
else:
break
else:
break
else:
break
else:
break
else:
break
a = input('执行完毕,敲击回车后结束程序!')
然后发现,重复率实在是太高了。然后浓缩精简,并参考了博客园的一篇博文,有了以下代码
import random
lenth = input()
lenth = int(lenth) + 1
list = {]
for e in range(1,):
result = []
for i in range(0,6):
red = random.randint(1,33)
result.append(red)
blue = random.randint(1,16)
result.append(blue)
if len(set(result))==len(result):
list.append(result)
else:
print(1)
所以,最终还是有点问题,等我研究几天,再写后续。
2021年2月25日,改1版,今天换了个思路来写双色球,数字重复的问题有了改善
import random
redlist = []
bluelist = []
i = 0
b = 0
while i < 32:
i += 1
redlist.append(i) //红色球的抽取列表
while b < 16:
b += 1
bluelist.append(b) //蓝色球的抽取列表
print('输入数字以确认生成的双色球组数')
a = input("请输入数字,并回车确认")
a = int(a) + 1
for e in range(1,a):
boll = []
red = random.sample(redlist,6) //从红色球里抽取6个数字
blue = random.choice(bluelist)
red.append(blue)
boll = red
print(boll)
print('程序执行完毕,敲击回车结束运行')
n = input()