由于我是 Python 初学者,因此在数量有限的工具中查找位数
Finding the number of digits in a number restricted number of tools since I am a Python beginner
def digits(n):
total=0
for i in range(0,n):
if n/(10**(i))<1 and n/(10**(i-1))=>1:
total+=i
else:
total+=0
return total
我想求出 13 的位数,所以我做了下面的操作
print digits(13)
它为我输入函数的每个数字提供 $\0$。
据我所见,我写的没有任何问题:
如果一个数字有 4 个数字,比如 1234,则除以 10^4 将使其小于 1:0.1234,除以 10^3 将得到 1.234
到 10^3 将使它成为 1.234>1。当我同时满足这两个条件时,您就知道您的位数是正确的。
这里有什么失败?请你告诉我我试过的具体方法
而不是另一个?
请记住,对于每个 n,只能有一个 i 满足该条件。
因此,当您将 i 添加到总数中时,只会添加 i 因此总返回总数将为您提供 i
你的循环完全没有意义。它从 0 到确切数字 - 不是你想要的。
它看起来像 python,所以抓住一个使用字符串的解决方案:
def digits(n):
return len(str(int(n))) # make sure that it's integer, than conver to string and return number of characters == number of digits
编辑:
如果你真的想使用循环来计算位数,你可以这样做:
def digits(n):
i = 0
while (n > 1):
n = n / 10
++i
return i
编辑 2:
既然你真的想让你的解决方案奏效,这就是你的问题。假设你的函数调用方式是digits(5)
,5是整型,所以你的除法是integer-based。这意味着 6/100 = 0
,而不是 0.06.
def digits(n):
for i in range(0,n):
if n/float(10**(i))<1 and n/float(10**(i-1))=>1:
return i # we don't need to check anything else, this is the solution
return null # we don't the answer. This should not happen, but still, nice to put it here. Throwing an exception would be even better
我修好了。感谢您的输入:)
定义数字(n):
对于范围内的我(0,n):
如果 n/(10**(i))<1 且 n/(10**(i-1))>=1:
return我
def digits(n):
total=0
for i in range(0,n):
if n/(10**(i))<1 and n/(10**(i-1))=>1:
total+=i
else:
total+=0
return total
我想求出 13 的位数,所以我做了下面的操作
print digits(13)
它为我输入函数的每个数字提供 $\0$。 据我所见,我写的没有任何问题:
如果一个数字有 4 个数字,比如 1234,则除以 10^4 将使其小于 1:0.1234,除以 10^3 将得到 1.234 到 10^3 将使它成为 1.234>1。当我同时满足这两个条件时,您就知道您的位数是正确的。 这里有什么失败?请你告诉我我试过的具体方法 而不是另一个? 请记住,对于每个 n,只能有一个 i 满足该条件。 因此,当您将 i 添加到总数中时,只会添加 i 因此总返回总数将为您提供 i
你的循环完全没有意义。它从 0 到确切数字 - 不是你想要的。
它看起来像 python,所以抓住一个使用字符串的解决方案:
def digits(n):
return len(str(int(n))) # make sure that it's integer, than conver to string and return number of characters == number of digits
编辑: 如果你真的想使用循环来计算位数,你可以这样做:
def digits(n):
i = 0
while (n > 1):
n = n / 10
++i
return i
编辑 2:
既然你真的想让你的解决方案奏效,这就是你的问题。假设你的函数调用方式是digits(5)
,5是整型,所以你的除法是integer-based。这意味着 6/100 = 0
,而不是 0.06.
def digits(n):
for i in range(0,n):
if n/float(10**(i))<1 and n/float(10**(i-1))=>1:
return i # we don't need to check anything else, this is the solution
return null # we don't the answer. This should not happen, but still, nice to put it here. Throwing an exception would be even better
我修好了。感谢您的输入:)
定义数字(n): 对于范围内的我(0,n): 如果 n/(10**(i))<1 且 n/(10**(i-1))>=1: return我