如何将随机数转换为另一种基本格式?

时间:2012-03-06 06:41:47

标签: python math

我想选择一个随机数,并以彩票系统的格式表示该数字。例如,彩票系统有7组2位数字,从01到40,总可能组合为163,840,000,000(40到7次方)。如果我选择一个随机的基数为10的数字,比如说453,867,221,我如何在01-40的7组2位数字中表示?

我选择的编程语言是Python,尽管任何语言/伪语言都会有所帮助。

2 个答案:

答案 0 :(得分:7)

标准库的random.sample从群体中选择n个值而无需替换:

>>> import random
>>> ' '.join('{:02d}'.format(n) for n in random.sample(xrange(1,41),7))
'25 19 15 09 01 26 06'

但这正是你所要求的,包括重复数字的可能性:

import random

def display(n):
    for _ in range(7):
        d,n = n % 40 + 1, n // 40
        print '{:02d}'.format(d),
    print

display(0)       # test lower limit
display(40**7-1) # test upper limit
display(random.randint(0,40**7-1))

结果:

01 01 01 01 01 01 01
40 40 40 40 40 40 40
18 23 27 14 23 31 38

答案 1 :(得分:5)

所以你有40个基数,7个40基“数字”。将它们转换为整数是相对简单的(我使用显式循环来使事情更清晰):

digits = [12, 5, 39, 1, 40, 8, 17]
total = 0
for digit in digits:
    total = total * 40 + (digit-1)

转换回来恰恰相反:

total = ...
digits = []
while total > 0:
    digits = [(total % 40 + 1)] + digits
    total = total / 40