我正在尝试编写一个计算给定数字中位数的函数。这是我的功能:
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循环的条件应该是什么?
答案 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)