我必须计算文件中任何数字的总和并打印总和。
数字定义为以数字0到9开头的任何字符串,后跟任意数字的数字0到9.
字母数字字符串(包括数字和字母的字符串)不包括在总和中。
这是文件的内容:
strlen(a)
所以在这种情况下答案是115。
答案 0 :(得分:2)
您需要做的就是使用item.isnumeric()
。如果该项目仅由数字而非字母或其他字符组成,则它将返回true。
因此,您检查wordList
中的所有项目以及项目isnumeric()
是否已将项目添加到total
。
infile = open(filename.txt, 'r')
content = infile.read()
infile.close()
wordList = content.split()
total = 0
for item in wordList:
if item.isnumeric():
total += int(item)
答案 1 :(得分:1)
我建议使用RegEx:
import re
with open('file') as f:
print(sum(int(i) for i in re.findall(r'\b\d+\b', f.read())))
在这种情况下:
\b+
匹配所有数字,\b
检查数字之后(或之前)是否有字母,以便我们可以忽略abcd7
或9kk
。
re.findall()
尝试查找文件中的所有数字,使用RegEx \b\d+\b
并返回一个列表。
列表压缩,int(i) for i in re.findall(r'\b\d+\b')
,将re.findall()
返回的列表中的所有元素转换为int
个对象。
sum()
内置函数对列表的元素求和,并返回结果。
答案 2 :(得分:-3)
def function():
infile = open("test.txt", 'r')
content = infile.read()
infile.close()
wordList = content.split()
total = 0
for i in wordList:
if i.isnumeric():
total += int(i)
return total
在此解决方案中,我将文件命名为test.txt。这个想法是你循环遍历wordList,这是一个包含test.txt中拼接的每个项目的列表(尝试在循环之前打印wordList以便自己查看)。然后我们尝试将每个项目转换为int(假设文件中没有小数,如果是,则可以包含浮点数)。然后我们捕获ValueError,它在转换时被引发,即'a'作为int。