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)
添加回答
舉報