Python 无字符串操作的数字计数
我正在尝试编写一个函数,该函数计算一个数字中的位数-无Python 无字符串操作的数字计数,python,python-2.7,Python,Python 2.7,我正在尝试编写一个函数,该函数计算一个数字中的位数-无string操作。这是我的密码: def count_digits(n): count_list=[] while (n>0): n=n%10 i=n count_list.append(i) n=n/10 return len(count_list) n=12345 print count_digits(n) 通过使用%我得到最后的数字
string
操作。这是我的密码:
def count_digits(n):
count_list=[]
while (n>0):
n=n%10
i=n
count_list.append(i)
n=n/10
return len(count_list)
n=12345
print count_digits(n)
通过使用%
我得到最后的数字-以便将其添加到列表中。通过使用/
我从数字中抛出数字
脚本不起作用。对于我输入的每个n
,脚本只打印1
谢谢 您的代码有几个问题:
def count_digits(n):
if n == 0:
return 1
count_list = []
while n > 0:
count_list.append(n % 10)
n = n // 10
return len(count_list)
语句应该在循环之外return
语句修改了n=n%10
,使得无法获取其他数字n
- 我将使用整数除法运算符
。在Python3中,/
将给出一个浮点数n/10
- 正如ShadowRanger所说,当前的解决方案认为
具有0
位数。您需要检查0
是否为n
0
def count_digits(n):
if n == 0:
return 1
count_list = []
while n > 0:
count_list.append(n % 10)
n = n // 10
return len(count_list)
此外,正如评论中所说,由于您的目标只是计算数字,因此不需要维护列表:
def count_digits(n):
if n == 0:
return 1
count = 0
while n > 0:
n = n // 10
count += 1
return count
您的代码有几个问题:
def count_digits(n):
if n == 0:
return 1
count_list = []
while n > 0:
count_list.append(n % 10)
n = n // 10
return len(count_list)
语句应该在循环之外return
语句修改了n=n%10
,使得无法获取其他数字n
- 我将使用整数除法运算符
。在Python3中,/
将给出一个浮点数n/10
- 正如ShadowRanger所说,当前的解决方案认为
具有0
位数。您需要检查0
是否为n
0
def count_digits(n):
if n == 0:
return 1
count_list = []
while n > 0:
count_list.append(n % 10)
n = n // 10
return len(count_list)
此外,正如评论中所说,由于您的目标只是计算数字,因此不需要维护列表:
def count_digits(n):
if n == 0:
return 1
count = 0
while n > 0:
n = n // 10
count += 1
return count
count\u list
存储数字
def count_digits(n):
count_list=[]
while (n>0):
count_list.append(n%10)
n-=n%10
n = n/10
return count_list
n=12345
print len(count_digits(n))
不使用列表
def count_digits(n):
count_list=0
while (n>0):
count_list+=1
n-=n%10
n = n/10
return count_list
n=12345
print count_digits(n)
count\u list
存储数字
def count_digits(n):
count_list=[]
while (n>0):
count_list.append(n%10)
n-=n%10
n = n/10
return count_list
n=12345
print len(count_digits(n))
不使用列表
def count_digits(n):
count_list=0
while (n>0):
count_list+=1
n-=n%10
n = n/10
return count_list
n=12345
print count_digits(n)
也许你可以试试这个,一个更简单的方法。不涉及任何列表:)
也许你可以试试这个,一个更简单的方法。不涉及任何列表:)
第一次执行n=n%10时,无论其起始值如何,n都会减少到0到9之间的值。
return
语句未正确缩进。它应该在while
循环之外。此外,在可以使用递增计数器的情况下维护计数列表似乎有点愚蠢(唯一的诀窍是专门处理0
,或者使用类似于do
/while
的笨拙Python来避免需要专门处理它)。如果您导入数学
,则可以使用int(math.log10(n))+1
@eumiro:checker.-)获取位数(注意:我投了赞成票,但我怀疑这仍然算作作弊;这听起来像是家庭作业)第一次执行n=n%10时,n被减少到0到9之间的值,不管它的起始值如何。return
语句没有正确缩进。它应该在while
循环之外。此外,在可以使用递增计数器的情况下维护计数列表似乎有点愚蠢(唯一的诀窍是专门处理0
,或者使用类似于do
/while
的笨拙Python来避免需要专门处理它)。如果您导入数学
,则可以使用int(math.log10(n))+1
@eumiro:checker.-)获取位数(注:我投了赞成票,但我怀疑这仍然算作作弊;这听起来像是家庭作业)我还想说,使用列表是完全没有必要的,即使它是一个可接受的解决方案。注:此代码(以及原始代码)将把0
视为零位,而通常情况下,它仍应算作一位。它可以通过使while
条件while
为True
和如果n来处理,我还要说,使用列表是完全不必要的,即使它是一个可接受的解决方案注:此代码(以及原始代码)将把0
视为具有零位,而通常情况下,它仍应计为具有一位。它可以通过使while
条件while True
和如果n为什么n-=n%10
来处理?它使将列表
计算为0的列表
,这其实并不重要(你只是得到了它的len
),但它会为零增益花费更多的工作。@ShadowRanger感谢,直到没有必要为止。切换到n//=10
(或者n=n//10
,如果您愿意的话),在Py2和Py3中它都将进行楼层划分;减去余数是不必要的(这样就消除了浮点错误咬你的机会)。@ShadowRanger是的,这是eskaev
解决方案,谢谢你的评论。现在可以了,但我不知道为什么。我在代码中找不到区别。我看到您更改了它(为'n-=n%10'),但我无法理解其中的区别;例如,如果n=123,则n-=120。因此,我们将一个对象(120)添加到列表中。好啊但是我们只是把不同的对象放在一个相同数量的对象上,不是吗?为什么n-=n%10
?它使将列表
计算为0的列表
,这其实并不重要(你只是得到了它的len
),但它会为零增益花费更多的工作。@ShadowRanger感谢,直到没有必要为止。切换到n//=10
(或者n=n//10
,如果您愿意的话),在Py2和Py3中它都将进行楼层划分;减去余数是不必要的(这样就消除了浮点错误咬你的机会)。@ShadowRanger是的,这是eskaev
解决方案,谢谢你的评论。现在可以了,但我不知道为什么。我在代码中找不到区别。我看到您已将其更改为'n-=n%1