所以我在python中乱搞,并且出现了问题。 我从一个字符串开始,如下所示:
a = "1523467aa252aaa98a892a8198aa818a18238aa82938a"
对于每个数字,您必须将其添加到sum
变量。此外,每次遇到一个字母时,索引迭代器必须向后移动2.我的程序在isinstance()
处不断崩溃。这是我到目前为止的代码:
def sum():
a = '93752aaa746a27a1754aa90a93aaaaa238a44a75aa08750912738a8461a8759383aa328a4a4935903a6a55503605350'
z = 0
for i in a:
if isinstance(a[i], int):
z = z + a[i]
elif isinstance(a[i], str):
a = a[:i] + a[(i+1):]
i = i - 2
continue
print z
return z
sum()
答案 0 :(得分:1)
这部分没有按你的想法行事:
for i in a:
if isinstance(a[i], int):
由于i
是一个迭代器,因此不需要使用a[i]
,它会混淆Python。
此外,由于a
是一个字符串,因此它的任何元素都不是int
,它们都是string
。你想要这样的东西:
for i in a:
if i.isdigit():
z += int(i)
编辑: 在迭代迭代时删除迭代元素是一个常见的问题,我建议创建一个只包含你要保留的元素的新字符串:
z = 0
b = ''
for i in a:
if i.isdigit():
z += int(i)
b += str(i)
a = b # set a back to b so the "original string" is set to a string with all non-numeric characters removed.
答案 1 :(得分:0)
您的代码存在一些问题。你好像不明白for... in
循环是如何工作的,但@Will已经在他的答案中解决了这个问题。此外,您对isinstance()
的工作方式存在误解。由于数字是字符串的字符,当您遍历该字符串时,每个字符也将是(一个长度)字符串。无论是否可以将isinstance(a[i], int)
转换为int
,int
都会失败。你真正想要做的只是尝试将每个角色转换为ValueError
并将其添加到总数中。如果它工作,那很好,如果不是只是抓住异常并继续前进。您不必担心非数字字符,因为当每个字符引发string = '93752aaa746a27a1754aa90a93aaaaa238a44a75aa08750912738a8461a8759383aa328a4a4935903a6a55503605350'
def sum_(string):
total = 0
for c in string:
try:
total += int(c)
except ValueError:
pass
return total
sum_(string)
时,它将被忽略,并且字符串中的下一个字符将被处理。
sum(int(c) for c in string if c.isdigit())
此外,此功能相当于以下单行:
sum(map(int, filter(str.isdigit, string)))
或功能风格......
wikipedia