由于我是 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我