在Python中使用while的位数

时间:2017-07-04 02:30:57

标签: python python-3.x

我在Python 3.6.1上编写一个程序,用来计算用户给定数字的位数。我正在使用句子"而真正的"而不是函数或字符串,因为我还没有学会使用它们。这是我的代码:

number=int(input("Write number: ")) 
cont=0
while True:
    number=number/10
    cont=cont+1
    if number==0:
        break 
print("The number of digits is: ", cont)

我的问题是上面的代码不起作用,因为当我放置时,让我们说123,程序给我的值为326.我不知道我的代码有什么问题,那怎么能解决这个问题呢?

4 个答案:

答案 0 :(得分:1)

看看这个:

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 123 / 10
12.3

是的,/是Python中的浮点除法,所以它没有达到预期的效果。

如果您在十分之后立即插入print(number),则可以看到实际发生的情况。它会持续进行除法,直到得到一个如此小的数字,它无法区分它与零之间的区别:

12.3
1.23
0.123
0.0123
0.00123
0.000123
1.23e-05
1.23e-06
1.23e-07
1.2300000000000001e-08
1.23e-09
1.2300000000000001e-10
1.2300000000000002e-11
1.2300000000000002e-12
1.2300000000000003e-13
1.2300000000000003e-14
1.2300000000000003e-15
:
1.2299999999999997e-307
1.2299999999999997e-308
1.23e-309
1.23e-310
1.23e-311
1.23e-312
1.23e-313
1.23e-314
1.23e-315
1.23e-316
1.23e-317
1.23e-318
1.23003e-319
1.23e-320
1.23e-321
1.24e-322
1e-323
0.0

您可以通过更改以下内容来解决此问题:

number=number/10

进入以下任何一个:

number = int(number / 10)
number = number // 10

这将执行整数除法,因此将在正确的步数后停止。

答案 1 :(得分:1)

您是否有特定原因未将数字转换为字符串并使用len(字符串)?

len(str(number))

更新(感谢评论):

len(str(abs(number)))

答案 2 :(得分:0)

Python 3默认执行浮点除法。你需要使用整数除法。 number = number // 10

答案 3 :(得分:0)

你可以这样试试

number = int(input("Write Number:"))
b = len(str(number))
print(b)

或者您可以将'/'更改为'//',它可以正常工作

更新

b = len(str(abs(number)))