奇数位数蟒蛇

时间:2016-03-06 01:08:05

标签: python python-3.x

任务是找到整数中的奇数个数。

count_odd_digits(123450) → 3 #digits    1,3,    and 5   are odd

给定一个非负整数,计算它的奇数位数。

示例:

def count_odd_digits(n):

    ans = 0
    for i in str(n):    
        if int(n) %2 == 1:
            ans += 1
        elif n[i]==0:
            return None

我到目前为止:

{{1}}

但是我的测试仍然失败,我的代码出了什么问题?

4 个答案:

答案 0 :(得分:5)

你有几个问题:

  • elif n[i] == 0: return None完全没用。你永远不想要归还None;你只想继续。由于您所做的一切都在继续,因此可以将其删除。

  • if int(n) % 2 == 1正在测试错误的内容。您想要检查int(i),而不是int(n)

将代码更改为:

def count_odd_digits(n):
    ans = 0
    for i in str(n):
        if int(i) % 2:
            ans += 1
    return ans

使用生成器表达式会更容易:

def count_odd_digits(n):
    return sum(int(i) % 2 for i in str(n))

答案 1 :(得分:1)

将int(n)更改为int(i)

def count_odd_digits(n):
    ans = 0
    for i in str(n):    
        if int(i) %2 == 1:
            ans += 1
    return ans

答案 2 :(得分:1)

i部分将立即终止您的功能。另外,您应该将integer转换为def count_odd_digits(n): ans = 0 for i in str(n): if int(i) %2 == 1: ans += 1 # drop the elif part # return after the for loop return ans count_odd_digits(123450) 而不是完整的字符串。

工作函数可能如下所示:

{{1}}

答案 3 :(得分:1)

另一个解决方案是避免转换为字符串,只使用整数:

def count_odd_digits(n):
    ans = 0
    while n:
        digit = n % 10
        if digit % 2:
            ans += 1
        n //= 10 
    return ans