题目描述
编写一个能实现双色球选号的小程序。双色球选号由7个数字组成,其中有6个红球,其号码的取值范围为[1,33];一个蓝球的取值范围为[1,16],要求6个红球从小到大排列,蓝球在最后输出。其输出格式为09 12 16 20 30 33 | 03。(注意,如双色球号码为3,则必须输出03)
思路
用sample()
直接模拟
代码
import random
from random import sample
def display(balls):
"""
按照题目所要求格式输出列表中的双色球号码
:param balls:双色球号码列表,如[9,12,16,20,30,33 3]
:print: 输出格式为 09 12 16 20 30 33 | 03
"""
for i in range(len(balls)):
if i <= 5:
print("{:02d} ".format(balls[i]), end="")
else:
print("| {:02d} ".format(balls[i])) # 输出格式必须严格正确:蓝色球号码后也要接一个空格
def random_select():
"""
随机选择一组号码
:return balls 随机选择的一组双色球号码,如[9,12,16,20,30,33 3]
"""
# 在[1,33]中等概率抽取6个数
list_red = [x for x in range(1, 33 + 1)] # list_red = [1,2,3,...,33]
# 从 list_red 中等概率抽取6个数(6个红球),并添加到 balls
balls = sample(list_red, 6)
# 从大到小排列
balls.sort()
# 在[1,16]中等概率抽取1个数
list_blue = [x for x in range(1, 16 + 1)] # list = [1,2,3,...,16]
# 从 list_blue 中等概率抽取1个数(1个蓝球),并添加到 balls
balls = balls + sample(list_blue, 1)
return balls
def main(n):
"""
打印 n 注双色球号码
:param n 注数
"""
for _ in range(n):
display(random_select())
# 随机数种子用于初始化随机数生成器,确保每次运行程序时生成的随机数序列相同。
# 如果不设置随机数种子,每次运行程序时生成的随机数序列将会不同。
random.seed(3)
n = int(input())
if __name__ == '__main__':
#main(n)
main(7) # 测试
运行结果