Rob*_*man 57 python python-2.x
当我输入前面带有0的小整数到python时,它们会产生奇怪的结果.为什么是这样?
>>> 011
9
>>> 0100
64
>>> 027
23
Run Code Online (Sandbox Code Playgroud)
注意:Python版本2.7.3我在Python 3.0中对此进行了测试,显然现在这是一个错误.所以这是版本特定的.
编辑:他们显然仍然是整数:
>>> type(027)
`<type 'int'>`
Run Code Online (Sandbox Code Playgroud)
unu*_*tbu 61
这些是以基数8(八进制数)表示的数字.例如,
011等于 1*(8**1) + 1*(8**0)= 9,
0100等于1*(8**2) + 0*(8**1) + 0*(8**0)= 64,
027等于 2*(8**1) + 7*(8**0)= 16 + 7 = 23.
小智 10
Python版本2和3都理解使用前导'0o'和'0O'(大写o)编写的八进制文件,因此习惯使用if时也使用Python 2.x.
仅在字符串中使用数字前导零.
您可以使用int()转换来自任何其他基本系统的整数.
>>> int(0o20)
16
Run Code Online (Sandbox Code Playgroud)
如果希望输出显示前导零,则根据此答案定义输出: 显示前导零的数字
如果您计划使用邮政编码,最好将它们作为字符串处理.
这些是八进制数字(基数为8,值为0 - 7)
您可以使用oct()函数将十进制数转换为八进制数.
In [125]: for i in range(10):
.....: print '{:5} {:5}'.format(i, oct(i))
.....:
0 0
1 01
2 02
3 03
4 04
5 05
6 06
7 07
8 010
9 011
Run Code Online (Sandbox Code Playgroud)
并使用带有适当基数的int()函数将八进制值转换为整数(在本例中为8):
int(str(17), 8)
Out[129]: 15
Run Code Online (Sandbox Code Playgroud)
类似的规则/函数集使用hex()函数适用于十六进制数字(基数16).