range()with x Base(不是10)

时间:2017-03-19 00:08:18

标签: python python-2.7

我希望有一个range()函数在不同的基础上工作(即基数为4)。

如果已知数字位数,我可以执行以下操作:

for a in range(4):
    for b in range(4):
        print str(a) + str(b)

但是,需要生成的数字量是未知的。我想我会需要某种递归。

2 个答案:

答案 0 :(得分:3)

import itertools
import string

digits_len = 2
digits_repr = string.digits[:4]
for digits in itertools.product(digits_repr, repeat=digits_len):
    print ''.join(digits)

答案 1 :(得分:0)

感谢jonrsharpe的评论,我提出了以下解决方案。不优雅,但做的工作!谢谢!

import string
digs = string.digits + string.letters

def int2base(x, base):
    if x < 0:
        sign = -1
    elif x == 0:
        return digs[0]
    else:
        sign = 1
    x *= sign
    digits = []
    while x:
        digits.append(digs[x % base])
        x /= base
    if sign < 0:
        digits.append('-')
    digits.reverse()
    return ''.join(digits)

base = 4
digits = 2

for x in range(base**digits):
    print int2base(x, base).zfill(digits)