任务是找到整数中的奇数个数。
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}}
但是我的测试仍然失败,我的代码出了什么问题?
答案 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