3

我实现了一个将整数转换为字符串表示形式的函数intToStr()(下面的代码)。

为了进行测试,我传入了一些值并观察到了意外的输出:

print intToStr( 1223) # prints 1223 as expected
print intToStr(01223) # prints  659, surprisingly 

现在,我尝试调试它,我传入的整数确实是659.

为什么会发生这种情况,我怎样才能让 python 忽略整数文字的前导零?


这是我的功能的代码:

def intToStr(i):
    digits = '0123456789'
    if i == 0:
        return 0
    result = ""
    while i > 0:
        result = digits[i%10] + result
        i /= 10
    return result
4

4 回答 4

9

以 0 开头的整数文字被解释为八进制数,以 8 为底

>>> 01223
659

这在 Python 3 中已更改,其中带有前导 0 的整数被视为错误:

>>> 01223
  File "<stdin>", line 1
    01223
        ^
SyntaxError: invalid token
>>> 0o1223
659

您永远不应该指定带有前导零的整数文字;如果您打算指定一个八进制数,请使用0o它来启动它,否则去除那些零。

于 2012-11-02T12:26:35.093 回答
4

正如其他人所说,这是因为八进制数。但我强烈建议您将功能更改为:

>>> from functools import partial
>>> force_decimal = partial(int, base=10)
>>> force_decimal("01")
1
>>> force_decimal("0102301")
102301

这样,您将明确强制转换为以 10 为底。并且 int 不会为您推断它。

于 2012-11-02T12:33:57.663 回答
1

以 a 开头的数字0被解释为八进制数0x如果它以十六进制开头。

于 2012-11-02T12:26:57.910 回答
0

前导零会导致 Python 将您的数字解释为八进制(base-8)。

要去除零(假设 num 是一个字符串),请执行以下操作:

num.lstrip("0")
于 2012-11-02T12:31:15.197 回答