【问题标题】:Length of an integer with leading zeros in pythonpython中带前导零的整数的长度
【发布时间】:2020-06-23 02:50:48
【问题描述】:

如何求整数的长度。有很多解决方案,我用过(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)))

它返回 2 作为答案, 当我在 python3.* 中运行上面相同的代码时,它显示为SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers

在我的程序中,如果用户给出这种数字,即有前导零的数字,我应该如何将其转换为没有前导零的数字。

我的输入 = 0111

converted_input =111

在python 2.7中它被认为是八进制数,当我打印它时,它返回73 在 python 3.* 中,它要求八进制表示(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)
  • 没有“整数的长度”这样的东西。
  • 我认为通常将整数的长度视为给定基数中的位数。也许这不是普遍的?
  • 也许,但重要的是让初学者远离这样的想法。了解事物的实际情况与这些事物的表示之间的区别至关重要。
  • Abisake - 如果您粘贴(相关部分)您的实际代码,特别是您将数字分配给变量的行以及然后调用函数以获取长度的行,这将有所帮助。仅从描述来看,如果您没有对数字的值使用有效的语法,您如何设法做到 len(str(number)) 存在不确定性。

标签: python python-2.7


【解决方案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,因为你给出的原因。
  • 目前还不清楚问题中的'0111' 是代表代码中的实际字符串还是他在问题中添加的单引号,尽管没有提到获得TypeError来自math.log10
  • 关于您的回答,len(int(number_as_string, 10)) 将不起作用。您需要len(str(int(number_as_string, 10))),因为您不能直接在int 上调用len
  • 谢谢,它成功了,len(str(int(number_as_string,10))) 给出了正确的答案。
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
相关资源
最近更新 更多