我希望以base 6格式递增一个整数,但在base 10中增加+= 1
个增量。有没有办法更改运算符递增的基数?
val = 5
val += 1
print val
我希望val
成为10
。
最后,我想把它放在一个例程中,从0
到215
输出基数为6的数字,每个数字都在一个新行上。 1
的增量看起来对我来说是最简单的方法。我还想过使用正则表达式来跳过包含6
或更高版本的所有数字,但认为这不是非常有效的代码。
答案 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]