Python中带前导零的整数长度

3
如何获取整数的长度。有许多解决方案,我使用了 (int(math.log10(TheNumber))+1)。但是如果数字是 '0111',它在 python 2.7 中返回 '1',在 python 3.* 中返回 'SyntaxError: leading zeroes in a decimal number is not permitted'。但 '0111' 实际上是 '111'。但是使用 len(str(number)) 可以得到正确的长度。是否有其他解决方案?希望能够得到澄清,谢谢。
抱歉问题中信息较少。 问题是: 0111 ,这个数字的长度是3,但是当我检查这个整数的长度时,在 Python 2.7中返回2。 代码为:
a = 0111

print(len(str(a)))

当我在Python3.*中运行上述相同代码时,它显示为“SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers”,但在Python2.7中返回答案2。

如果用户提供这种具有前导零的数字,应如何将其转换为没有前导零的数字。

例如:my_input = 0111,转换后的结果为:converted_input = 111。

在Python2.7中,该数字被视为八进制数,并返回“73”;而在Python3.*中,则要求以八进制表示(SyntaxError)。如果使用另一种方法:int(math.log10(TheNumber))+1

import math
a = 0111
print(int(math.log10(a))+1)

在 Python 2.7 中,它返回 2,并隐式地转换为八进制数字。 在 Python 3.* 中,它会返回语法错误。因此,任何解决方案都可以做得很好,如果我错了,请指出。提前致谢。


“0111”是一个字符串而不是整数。如果你想返回4,只需使用len(number)即可。 - Mark
不存在“整数的长度”这样的东西。 - Karl Knechtel
我认为通常将整数的长度视为给定进制中数字的数量。也许这不是普遍的做法? - Mark
也许是这样,但重要的是要让初学者远离这种思维方式。理解事物本质与仅仅是这些事物的表象之间的区别至关重要。 - Karl Knechtel
Abisake - 如果您能粘贴(相关部分的)实际代码,特别是将数字赋值给变量的行以及调用函数以获取长度的行,那将会很有帮助。仅从描述中,我们无法确定您如何在不使用数字的有效语法的情况下执行len(str(number))。 - alani
显示剩余2条评论
1个回答

1

SyntaxError是由https://www.python.org/dev/peps/pep-3127/引起的,该文档基本上使Python 3停止将以0开头的数字静默解释为八进制(这是Python 2所做的)。

实际上,0o111(即八进制下的111)的十进制值为73。

您的问题并没有提供关于需要处理什么类型的长度以及您需要对其执行什么操作的信息。但是,如果您想知道一个数字由多少个十进制位组成,您可以这样做:

len(int(number_as_string, 10))

这将确保即使是'0111'也会被解释为十进制(即111)。


问题已经说明 len(str(number)) 可以正常工作,很明显如果没有使用正确的语法定义该常量,他是无法在代码中将 number 赋值为一个常量的。老实说,由于 OP 没有发布他的确切代码,对于他到底做了什么存在相当大的不确定性。无论如何,显然在某个时候他尝试使用 0111,但由于你提供的原因而导致了 SyntaxError 的错误。 - alani
目前还不清楚问题中的 '0111' 是否代表代码中的实际字符串,或者只是他在问题中添加的单引号。尽管从 math.log10 中没有获得 TypeError 的提及。 - alani
1
关于你的回答,len(int(number_as_string, 10)) 是不可行的。你需要使用 len(str(int(number_as_string, 10))),因为你不能直接在一个 int 上调用 len - alani
谢谢,它起作用了,因为 len(str(int(number_as_string,10))) 给出了正确的答案。 - Abisake Villalan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接