Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 奇数计数_Python_Python 3.x - Fatal编程技术网

Python 奇数计数

Python 奇数计数,python,python-3.x,Python,Python 3.x,任务是找出整数中奇数的数目 count_odd_digits(n): 给定一个非负整数,计算其中有多少位是奇数 例如: 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

任务是找出整数中奇数的数目

count_odd_digits(n):
给定一个非负整数,计算其中有多少位是奇数

例如:

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
但是我仍然没有通过测试,我的代码出了什么问题?

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


返回None
部分将立即终止您的功能。您还应该将
i
转换为
整数
而不是完整的字符串

工作函数可以如下所示:

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)

您有几个问题:

  • elif n[i]==0:return None
    是完全无用的。您永远不想返回
    None
    ;你只想继续。由于您所做的一切都是继续进行的,因此可以将其删除

  • 如果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))

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

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

@如果你这么想,我不感到抱歉。但是,这根本不是故意的。我只是想给出最恰当的答案。这听起来像是一个家庭作业问题。你在做
int(n)
而不是
int(I)
。另外,您的
elif
语句是完整的,完全是胡说八道。为了澄清,当代码第一次到达
elif
时,它将检查
123450['2']
是否等于零。这就是为什么单字母变量名不受欢迎的原因。或者干脆
sum(int(i)%2表示str(n)中的i)
@zondo nice。我来这里是为了写“必修一行”。但我看到你就在那里。呵呵.)+1该
lambda
版本也是毫无意义的。并且您没有列表理解;没有创建
列表。这是一个生成器表达式。@TigerhawkT3:没错,它毫无意义;我只是觉得只有一行看起来更好。然而,反对PEP-8太过分了,所以我把它删除了。
def count_odd_digits(n):
    ans = 0
    while n:
        digit = n % 10
        if digit % 2:
            ans += 1
        n //= 10 
    return ans