Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无字符串操作的数字计数_Python_Python 2.7 - Fatal编程技术网

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