亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 264 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號