4 回答
TA贡献1862条经验 获得超7个赞
正如所指出的,您有一些缩进错误,但总体方法可以稍微简化。
你不需要
count
因为len(numbers)
会给你同样的答案。您可以在整条线上使用,
re.findall()
而不仅仅是一个word
.您不需要条件,因为
for
如果没有n
s 将退出。
例如:
for line in fn:
n = re.findall('[0-9]+', line)
for num in n:
num = int(num)
numbers.append(num)
print(sum(numbers))
print(len(numbers))
Out[]:
445833
90
您还可以使用list.extend()替换内部for循环,导致:
In []:
import re
numbers = []
with open('regex_sum_42.txt', 'r') as fn:
for line in fn:
numbers.extend(int(num) for num in re.findall('[0-9]+', line))
print(sum(numbers))
print(len(numbers))
Out[]:
445833
90
TA贡献1155条经验 获得超0个赞
使用更简单的代码,您可以避免出现这些错误的机会。
此代码使用map
内置函数迭代所有结果re.findall
并将它们转换为 ,int
然后再将它们全部附加到列表 ( numbers
)。然后您可以打印sum
和len
的numbers
。
with open('regex_sum_42.txt') as f: numbers = [*map(int, re.findall('\d+', f.read()))] print(sum(numbers), len(numbers))
TA贡献2011条经验 获得超2个赞
两件事情:-
计数更新位置错误,将其向下移动到for循环中即可
总和是错误的,因为缩进
numbers.append(num)
不正确
试试下面的代码
fn = open('regex_sum_42.txt','r')
import re
numbers = []
count = 0
for line in fn:
line = line.split()
for char in line:
n=re.findall('[0-9]+',char)
if len(n)>0:
for num in n:
count += 1
num = int(num)
numbers.append(num)
print(sum(numbers))
print(count)
TA贡献1820条经验 获得超10个赞
count += 1在错误的地方。
将它移到 的内部for num in n:以使其对每个数字进行计数。
也向上移动numbers.append(num)到循环。这可确保添加所有 num值,而不仅仅是一行中的最后一个值。
fn=open('text.txt','r')
import re
numbers = []
count = 0
for line in fn:
line = line.split()
for char in line:
n=re.findall('[0-9]+',char)
if len(n)>0:
for num in n:
count += 1
num = int(num)
numbers.append(num)
print(sum(numbers))
print(count)
添加回答
举报