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