为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

aluckdog 2023-05-23 15:35:15
该代码应该找到总和为 445833 的 90 个数字。我的代码找到总和为 445829 的 89 个数字。我做错了什么?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:            count += 1            for num in n:                num = int(num)            numbers.append(num)print(sum(numbers))print(count)
查看完整描述

4 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

正如所指出的,您有一些缩进错误,但总体方法可以稍微简化。

  • 你不需要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[]:

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


查看完整回答
反对 回复 2023-05-23
?
白衣非少年

TA贡献1155条经验 获得超0个赞

使用更简单的代码,您可以避免出现这些错误的机会。

此代码使用map内置函数迭代所有结果re.findall并将它们转换为 ,int然后再将它们全部附加到列表 ( numbers)。然后您可以打印sumlennumbers

with open('regex_sum_42.txt') as f:
  numbers = [*map(int, re.findall('\d+', f.read()))] 
   print(sum(numbers), len(numbers))


查看完整回答
反对 回复 2023-05-23
?
森林海

TA贡献2011条经验 获得超2个赞

两件事情:-

  1. 计数更新位置错误,将其向下移动到for循环中即可

  2. 总和是错误的,因为缩进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)


查看完整回答
反对 回复 2023-05-23
?
拉莫斯之舞

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)


查看完整回答
反对 回复 2023-05-23
  • 4 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信