如何计算Python中的位数?

时间:2014-03-26 09:20:02

标签: python-2.7

我正在尝试编写一个计算给定数字中位数的函数。这是我的功能:

def num_digits(n):
    """
    >>> num_digits(12345)
    5
    >>> num_digits(0)
    1
    >>> num_digits(-12345)
    5
    """
    count = 0
    while n > 0:
        if n == 0:
            count += 1
        count += 1
        n = n/10

    return count

if __name__=="__main__":
    import doctest
    doctest.testmod(verbose=True)

但是这个功能不起作用。 while循环的条件应该是什么?

11 个答案:

答案 0 :(得分:10)

这是一个定义的方法:

def numLen(num):
  return len(str(abs(num)))

答案 1 :(得分:5)

from math import log, ceil
print(int(ceil(log(number+1, 10))))

log()返回近似值,因此需要添加1。 使用ceil()是因为我们需要整数

答案 2 :(得分:2)

def numDigits(n):
    n_str = str(n)
    return len(n_str)

num = input("Enter a digit")
print("The number of digits is:", numDigits(num)) 

答案 3 :(得分:1)

Python2实现

def numDigits(n): 
    return len(filter(lambda m:m.isdigit(), str(n)))

对于Python3,filter命令返回一个迭代器。因此,你必须这样做:

def numDigits(n): 
    return len(list(filter(lambda m:m.isdigit(), str(n))))

不确定我们为什么需要while实施,但有可能......

count = 0
while len(string) > 0:
    if string[0].isdigit(): count += 1
    string = string[1:]

print(count)

答案 4 :(得分:1)

以下是答案:

def num_digits(n):
"""
>>> num_digits(12345)
5
>>> num_digits(0)
1
>>> num_digits(-12345)
5
"""
count = 0
if n == 0:
    count += 1
while n > 0 or n < 0:
    if n < 0:
        n = -1*n
    count += 1
    n = n/10
return count

if __name__=="__main__":
import doctest
doctest.testmod(verbose=True)

答案 5 :(得分:0)

代码中显然存在一个错误,所以请稍微考虑一下。

while n > 0:
    if n == 0:

如果我们检查n == 0

n > 0如何才能成真?

答案 6 :(得分:0)

你可以改为

  def num_digits(a):
      return len(repr(abs(n)))

答案 7 :(得分:0)

这很有效。但是,我更喜欢上面的其他答案

def num_digits(n):
    n = abs(n)
    count = 1
    while (int(n/10)) > 0:
        count += 1
        n=int(n/10)
    return count

答案 8 :(得分:0)

这是我的代码。 Vorsprung的略微修改版本

def num_digits(n):
    count = 1
    while (int(n/10)) is not 0:
        count += 1
        n = int(n/10)
    return count

基本区别在于不需要abs()

作为一个注释(对于整数输入),这是一个Python3 ansatz,因为devision是一个真正的&#39;一个而不是一个经典的&#39;像Python2一样的C-like。这意味着两个整数的偏差是浮点数(1/2 = 0.5)而不是整数(1/2 = 0)。 因此,在Python2中,整数输入不需要转换为行n = int(n/10)中的int。

此函数可能不依赖于len(repr(abs(n)))之类的python基本函数/功能,但其优点是它也适用于大型浮点数,例如1.23e19

答案 9 :(得分:0)

def num_digits(s):
   o = sum(c.isdigit() for c in s)
   return o

有s =&#34; asda234asdasd23&#34;并且你得到5。

或排序版本:

num_digits = lambda s: sum('/' < c < ':' for c in s)

其中s是一个字符串!

答案 10 :(得分:0)

您可以通过将其作为字符串循环来执行此操作,并且仅当字符属于可能的数字列表时才添加到计数器。

text_input = input("Please enter the input")
count = 0
for i in text_input:
    if i in '0,1,2,3,4,5,6,7,8,9':
        count = count + 1

print("Count is:", count)