计算数字的数字,不进行字符串操作

时间:2015-12-28 13:39:28

标签: 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)

使用%我得到最后的数字 - 以便将其添加到列表中。通过使用/我从数字中抛出数字。

该脚本不起作用。对于每个n i put,脚本只打印1

谢谢!

3 个答案:

答案 0 :(得分:3)

您的代码有几个问题:

  • return语句应该在循环之外。
  • n = n % 10语句会修改n,因此无法获取其他数字。
  • 我使用整数除法运算符//。在Python 3中,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

答案 1 :(得分:2)

count_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)

答案 2 :(得分:2)

也许你可以试试这个,这是一个更简单的方法。没有列表涉及:)

def dcount(num):
    count = 0
    if num == 0:
        return 1
    while (num != 0):
        num /= 10
        count += 1
    return count