如何不改变值将八进制转换为字符串?

0 投票
1 回答
2084 浏览
提问于 2025-04-21 01:15

如何用Python把00024变成'00024'?

如果我在Python的命令行里输入00024,它会输出20。我想把00024转换成字符串,结果是'00024'。有什么建议吗?

1 个回答

3

如果你想用前导零来表示整数,可以用format()把数字转换成字符串:

format(integer, '05d')

每当你输出值时,print会自动把它转换成字符串,使用str()。而通过format(),你可以明确控制这种转换是怎么进行的。

在交互式解释器中,当你输入一个数字时,使用的是repr(),但对于整数来说,输出和使用str()是完全一样的。

演示:

>>> format(24, '05d')
'00024'

当你输入00024作为整数时,在Python 2中,这会被解析为八进制数字,而在Python 3中,这会导致语法错误。

如果你想在Python 2的命令行中把这样的数字当作字符串来处理,你是无法做到的,尤其是当前导零数量不固定时。你最多只能把得到的整数重新格式化为八进制,依然带有前导零。这会再次生成一个字符串,但你必须手动指定前导零的数量:

>>> number = 00024
>>> format(number, '05o')
'00024'

注意,一旦你遇到一个没有前导零的数字,这种方法就会失败;如果数字大于4095(07777八进制),你可以自动检测这些值:

strnumber = format(number, '5d' if number > 0o07777 else '05o')

而且任何带有前导零且包含数字8或9的数字都会直接导致语法错误:

>>> 09876
  File "<stdin>", line 1
    09876
        ^
SyntaxError: invalid token

更好的办法是直接把这些数字当作字符串输入

撰写回答