该问题要求在给定一串数字时查找奇数之和。 因此,例如,如果给定的值为“ 123”,我们应该得到4的总和。
这是我的尝试,它返回错误的“ 4”
def sumoddnum(s):
total= 0
for i in range(len(s)):
if i % 2 == 1:
total += i
return total
print(sumoddnum('12345'))
我也尝试过将s转换为整数,但它一直给我“ int不可迭代”错误
def sumoddnum(s):
total= 0
s= int(s)
for i in s:
if i % 2 == 1:
total += i
return total
print(sumoddnum('12345'))
答案 0 :(得分:1)
这应该对您有用:
def sumoddnum(s):
return sum(0 if int(i) % 2 == 0 else int(i) for i in s)
或者如果您想继续尝试,则应遍历str
,然后检查每个int
字符的条件:
def sumoddnum(s):
total= 0
for i in s:
if int(i) % 2 == 1:
total += int(i)
return total
print(sumoddnum('12345'))
答案 1 :(得分:1)
我喜欢在这里使用正则表达式。我们可以将正则表达式模式[13579]
应用于输入字符串,然后对所得的奇数列表使用列表推导来求和:
num = "123"
odds = re.findall(r'[13579]', num)
sum = sum(int(odd) for odd in odds)
print("the sum is: " + str(sum))
此打印:
The sum is: 4
答案 2 :(得分:1)
您的第一种方法行不通,因为您实际添加的总和是s
的“索引”,而不是元素。可以做的是更改for
循环以使其遍历元素而不是其位置。然后请记住,字符串的元素是字符,因此需要转换为int。每当字符实际代表数字时,都可以使用内置的int
函数来完成此操作。
def sumoddnum(s):
total= 0
for i in s:
if int(i) % 2 == 1:
total += int(i)
return total
现在您可能会想
这么简单的任务有多长的功能!
,您将完全正确。幸运的是,Python随附了一些理解功能,这些功能使我们可以缩短一些for
循环和内置的sum
函数,这的目的有点不言而喻,但是您需要记住,它以可迭代对象作为输入
您可能会得到如下结果:
def sumoddnum(s):
return sum(int(i) for i in s if int(i) % 2 == 1)
使用Python 3.8,您还可以使用全新的海象运算符:
def sumoddnum(s):
return sum(num for i in s if (num := int(i)) % 2 == 1)
第二种方法的问题已经由Python解释器本身解释。您已经将字符串转换为整数,并且没有内置的方法可以遍历整数。您将需要找到并实现自己的方法来循环访问整数(提示:使用10为模的余数)。
答案 3 :(得分:1)
您的程序无法运行的原因是由于以下原因:
for i in range(len(str)):
在这里,您要获取从0到字符串长度(不包括长度)的所有i值。
这意味着,您要将所有从0到String长度的奇数加起来。
相反,这样做:
for i in str:
这会将字符串中的每个字符都赋予i。现在:
i = int(i)
会将其转换为int。
最后:
if i%2 == 1:
total+=i
最终代码为:
def sumoddnum(s):
total= 0
for i in s:
i = int(i)
if i % 2 == 1:
total += i
return total
print(sumoddnum('12345'))
答案 4 :(得分:0)
def sumoddnum(s):
total= 0
for i in s:
i = int(i)
if i % 2 == 1:
total += i
return total
print(sumoddnum('12345'))
如果在for循环中使用'range(len(s))'而不是's',则会得到[0,1,2,3,4],它是'12345的长度的0。 / p>
因此,需要将范围仅改变s,然后它会给您['1','2','3','4','5']这是字符串'12345的char元素'。
别忘了将i的类型更改为int!
答案 5 :(得分:-1)
这是一个更好,更易读的解决方案:
def add_up(n: str or int):
if type(n) == str and str(n).isdigit():
numbers = [int(n) for n in list(n.strip()) if int(n) % 2 != 0]
return sum(numbers)
elif type(n) == int:
numbers = [int(str(n)) for n in list(str(n)) if n % 2 != 0]
return sum(numbers)
else:
return "No digits found to add up"