基数为6的增量整数

时间:2015-11-09 13:34:12

标签: python string increment

我希望以base 6格式递增一个整数,但在base 10中增加+= 1个增量。有没有办法更改运算符递增的基数?

val = 5
val += 1
print val

我希望val成为10

最后,我想把它放在一个例程中,从0215输出基数为6的数字,每个数字都在一个新行上。 1的增量看起来对我来说是最简单的方法。我还想过使用正则表达式来跳过包含6或更高版本的所有数字,但认为这不是非常有效的代码。

3 个答案:

答案 0 :(得分:1)

只需使用itertools.product获取基数为6的所有有效数字,最多三位数即可:

<location path=".">
    <system.webServer>
    <security>
        <authentication>
            <windowsAuthentication enabled="true" />
            <anonymousAuthentication enabled="false" />
        </authentication>
    </security>
    </system.webServer>
</location>

int可以与可选的 base 参数一起使用,将表示基数为6的数字的给定字符串转换为小数形式:

>>> import itertools
>>> digits = '012345'
>>> for num in itertools.product(digits, repeat=3):
    s = ''.join(num)
    print s, int(s, 6)


000 0
001 1
002 2
...
553 213
554 214
555 215

所有留给你写的是一个取整数并将其转换为基数为6的字符串的函数; Python没有这种内置功能,就像它用于例如十六进制:

>>> int('553', 6)
213

请注意“以base 6格式递增整数”“[更改]运算符递增的基数”在概念上没有意义 - 基数为6,如二进制(基数2),十进制(基数10),八进制(基数8)等只是表示数字的一种方式。 Python默认以十进制形式显示整数,尽管它们将以二进制形式存储在计算机的内存中。 >>> hex(213) '0xd5' 正在添加一个你工作的基础。

答案 1 :(得分:0)

这是一个基于 n 字符串函数的整数,以及一个以 n 为基数的生成函数。

#!/usr/bin/env python

''' base `n` conversion and counting

    See http://stackoverflow.com/q/33610302/4014959

    Written by PM 2Ring 2015.11.10
'''

def int_to_base_n(i, base):
    ''' Convert integer `i` to base `base` 
        base must be <= 10
    '''
    digits = []
    while i:
        i, d = divmod(i, base)
        digits.append(str(d))
    if not digits:
        return '0'
    return ''.join(digits[::-1])

def base_n_counter(base):
    ''' An infinite iterator that counts in base `base` 
        base must be <= 10
    '''
    digits = [0]
    yield '0'
    while True:
        digits[0] += 1
        pos = 0
        while digits[pos] == base:
            digits[pos] = 0
            pos += 1
            if pos >= len(digits):
                digits.append(1)
            else:
                digits[pos] += 1

        yield ''.join([str(d) for d in reversed(digits)])

# Test

base = 2
counter = base_n_counter(base)    

print 'base', base
for i in range(16):
    print i, int_to_base_n(i, base), next(counter)

print

base = 6
print 'base', base
for i, s in enumerate(base_n_counter(base)):
    print i, int_to_base_n(i, base), s
    if i == base ** 2:
        break

<强>输出

base 2
0 0 0
1 1 1
2 10 10
3 11 11
4 100 100
5 101 101
6 110 110
7 111 111
8 1000 1000
9 1001 1001
10 1010 1010
11 1011 1011
12 1100 1100
13 1101 1101
14 1110 1110
15 1111 1111

base 6
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 10 10
7 11 11
8 12 12
9 13 13
10 14 14
11 15 15
12 20 20
13 21 21
14 22 22
15 23 23
16 24 24
17 25 25
18 30 30
19 31 31
20 32 32
21 33 33
22 34 34
23 35 35
24 40 40
25 41 41
26 42 42
27 43 43
28 44 44
29 45 45
30 50 50
31 51 51
32 52 52
33 53 53
34 54 54
35 55 55
36 100 100

这两项功能仅在base <= 10时才能正常工作。但是,很容易修改它们以处理更大的基数:将str(d)替换为digit_string[d],其中digit_string是包含所需数字的字符串。

答案 2 :(得分:-1)

def base(decimal ,base) :
    list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    answer = ""
    while decimal != 0 :
        answer  += list[decimal % base]
        decimal /= base
    return answer[::-1]