如何让我的num_digit函数给我正确的输出,如何让它在python中返回任何整数值?

时间:2015-07-18 04:33:43

标签: python python-2.7

  1. 每当我输入0作为函数中的参数时,如何让我的num_digit函数返回1而不是0?
  2. 如何让函数返回任何整数,例如负数?

    def num_digits(n):
        count = 0
        while n:
            count = count + 1
            n = abs(n) / 10
        return count
    
  3. 我首先在第2号问题上工作。即使我把abs(n)放在代码行中的while,我仍然得到一个无限循环,我仍然不明白为什么。我想如果我可以得到我的n值始终为正,并输入-24,它会将其转换为24并仍然计算值的数量。

    问题1,我不知道从哪里开始,我试过:

    def num_digits(n):
        count = 0
        while n:
            if n == 0:
                count = count + 1
                n = n / 10
        return count
    

    我忘了添加我使用有限的工具,因为我还在学习python。我已经完成了迭代,正在研究while循环和计数器。我还没有打破,虽然我知道它的作用。

2 个答案:

答案 0 :(得分:1)

如果有疑问,蛮力总是可用的:

def num_digits(n):
    if n == 0:
        return 1
    if n < 0:
        return num_digits(abs(n))

    count = 0
    while n:
        count = count + 1
        n = n / 10
    return count

首先处理特殊情况,然后你只需处理常规情况。

如果你想避免条件限制,我建议只在开头使用abs(n)一次,并在0的情况下使用无限循环+中断:

def num_digits(n):
    n = abs(n)
    count = 0
    while True:
        count = count + 1
        n = n / 10
        if n == 0:
            break
    return count

对于更实用的解决方案,您可以计算字符串中的位数(类似于len(str(n))的正整数)或取log基数10,这是计算数字的数学方法

答案 1 :(得分:-1)

  def num_digits(n):
    if n == 0:
        return 0
    return math.floor(math.log10(math.abs(n)))