使用Python计算输入数字的位数

4

我试图计算输入数字的位数。但是,每当我输入10或者11或者任何两位数时,输出结果都是325。为什么它无法正常工作?

inputnumber = int(input())
countnumber = inputnumber
digitcount = 0
while countnumber > 0:
    digitcount += 1
    countnumber = countnumber/10

print(digitcount) 
# result is 325 when input is 10 or 11

这是Python 2还是3? - Elisha
你可以通过以下链接获取其他实现方式:https://dev59.com/UHI95IYBdhLWcg3wtwRe - MD5
@pstatix,你不需要将输入转换为int再转换为strinput()已经是一个字符串了。只需要使用len(input())即可。如果要处理负数,可以使用len(str(abs(int(input())))) - Austin
@Elisha,这是Python3。请看这个问题以证明:https://dev59.com/FmEi5IYBdhLWcg3wZ7ka - Ṃųỻịgǻňạcểơửṩ
因为在Python 3(和2.7)中,countnumber = countnumber/10不会执行你想要的整数地板除法//,它会执行精确的(浮点数)除法,并且countnumber将变成一个浮点数。然后,当你用完数字时,你的迭代将不会终止,它将继续进行,每次迭代countnumber都会变成一个越来越小的浮点数,直到达到1e-323,最后下溢,但是你得到的数字计数(325)是错误的。 - smci
6个回答

5
你的错误主要发生在这里:

countnumber=countnumber/10

请注意,你打算进行整数除法。在Python 3中,单斜杆除法总是“浮点”或“实数”除法,它产生一个浮点值和必要时的小数部分。
请将它替换为双斜杆除法,即整数除法:countnumber = countnumber // 10。在这种情况下每次执行整数除法时,最右边的数字会被删除。
还要注意如果你的输入是0。数字0被认为是一个数字,而不是零。

这基本上是正确的,但使用单斜杠进行整数除法会生成浮点数。 - user3483203
@chrisz 完成了。现在它是一个“浮点数”除法。此外,您可以使用 len(),但这可能会导致非数字或非整数的输出。 - Ṃųỻịgǻňạcểơửṩ
如果您想将0视为一个数字,请添加一个if语句。 - Ṃųỻịgǻňạcểơửṩ

3
我诚实地说,我不会将那个美丽的输入转换为整数。
print(len(input())

这样就够了。

一个简单易懂的一句话,没有人会抱怨。

  • But of course, if negative sign bothers you like wisty said,

    len(str(abs(int (v))))
    

    will be safer for sure.

  • Again, if you are worried about the non numeric inputs like mulliganaceous said, you better cover that case.

    str = input()
    if str.isnumeric():
        print(len(str(abs(v))))
    else:
        print("bad input")
    

1

原因是在Python 3中,两个整数相除会得到一个浮点数。可以使用//运算符进行修复:

number = int(input())
digits_count = 0
while number > 0:
    digits_count += 1
    number = number // 10

1
你必须使用Python3,逻辑上你的函数是正确的。你只需要改变
countnumber = countnumber // 10
因为在Python3中,//是地板除法,而/是真正的除法。
>>>print(1 / 10)
0.1
>>>print(1 // 10)
0

顺便说一下,就像@chrisz在上面所说的那样,你可以简单地使用len()函数来获取输入数字的位数。
>>>print(len(input())

3
len(input()) 不适用于负数。而且没有保证输入是一个数字。 - Austin

0
def digits(number):
    number = str(number)
    lenght = len(number)
    return lenght

print(digits(25))   # Should print 2
print(digits(144))  # Should print 3
print(digits(1000)) # Should print 4
print(digits(0))    # Should print 1

2
您的答案可能需要更多的支持性信息才能得到改进。请[编辑]以添加更多细节,例如引用或文档,以便其他人可以确认您的答案是否正确。您可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
请记住,Stack Overflow 不仅旨在解决当前的问题,还要帮助未来的读者找到类似问题的解决方案,这需要理解底层代码。对于我们社区中的初学者和不熟悉语法的成员来说,这尤其重要。鉴于此,您能否编辑您的答案,包括您正在做什么的解释以及为什么您认为这是最好的方法? - Jeremy Caney

0
num = int(input())
count = 0
while num > 0:
  count += 1
  num = num // 10
print(count)

2
虽然这个代码块可能回答了OP的问题,但如果您解释一下这段代码与问题中的代码有何不同,您做了哪些更改,为什么要更改以及为什么可以解决问题而不引入其他问题,那么这个答案将会更加有用。 - StupidWolf

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