Findall() 没有找到文本文件中的所有数字

该代码应该找到总和为 445833 的 90 个数字。我的代码找到总和为 445829 的 89 个数字。我做错了什么?


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:

            count += 1

            for num in n:

                num = int(num)

            numbers.append(num)

print(sum(numbers))

print(count)


aluckdog
浏览 207回答 4
4回答

牧羊人nacy

正如所指出的,您有一些缩进错误,但总体方法可以稍微简化。你不需要count因为len(numbers)会给你同样的答案。您可以在整条线上使用,re.findall()而不仅仅是一个word.您不需要条件,因为for如果没有ns 将退出。例如: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[]:44583390您还可以使用list.extend()替换内部for循环,导致:In []:import renumbers = []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[]:44583390

白衣非少年

使用更简单的代码,您可以避免出现这些错误的机会。此代码使用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))

森林海

两件事情:-计数更新位置错误,将其向下移动到for循环中即可总和是错误的,因为缩进numbers.append(num)不正确试试下面的代码fn = open('regex_sum_42.txt','r')import renumbers = []count = 0for 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)

拉莫斯之舞

count += 1在错误的地方。将它移到 的内部for num in n:以使其对每个数字进行计数。也向上移动numbers.append(num)到循环。这可确保添加所有 num值,而不仅仅是一行中的最后一个值。fn=open('text.txt','r')import renumbers = []count = 0for 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python