我在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.我不知道我的代码有什么问题,那怎么能解决这个问题呢?
答案 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)))