Python for Everybody 第 11 章练习 2 'float' 对象不可调用
Python for Everybody Chapter 11 Exercise 2 'float' object is not callable
所以这是我的问题
练习 2:编写一个程序来查找以下形式的行:
新版本:39772
使用正则表达式和 findall() 方法从每一行中提取数字。计算数字的平均值并将平均值打印为整数。
输入 file:mbox.txt
38549
输入file:mbox-short.txt
39756
代码:
import re
rev = []
fname = input('Enter file: ')
try:
fhand = open(fname)
except FileNotFoundError:
print('File cannot be opened: ', fname)
exit()
for line in fhand:
line = line.rstrip()
rev_temp = re.findall('^New Revision: ([0.0-9.0]+)', line)
if not rev_temp:
for val in rev_temp:
val = float(val) # Convert the strings to floats
rev = rev + [val] # Concats new values
rev_sum = sum(rev)
count = float(len(rev))
rev_ave = rev_sum / count
print(rev_ave)
这是输出
Enter file: mbox-short.txt
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-58-c4c50e707989> in <module>
19 rev = rev + [val] # Concats new values
20
---> 21 rev_sum = sum(rev)
22 count = float*(len(rev))
23 rev_ave = rev_sum / count
TypeError: 'float' object is not callable
为什么?
我认为您在某处无意中用一个名称相同的 sum
变量覆盖了内置 sum
。寻找:
sum = <some float value>
据我所知,您使用的方法似乎没有正确处理使用匹配模式找到的行。相反,它仅在数字不存在时才尝试对其进行处理,这就是为什么您会收到“除以零”错误的原因。
但是,我们可以修改您的代码,改为查看所有匹配项的所有匹配字符串,并将这些已解析的数字附加为浮点数。然后从那里,你的求和和平均工作正常,没有错误。
import re
rev = []
fname = input('Enter file: ')
try:
fhand = open(fname)
except FileNotFoundError:
print('File cannot be opened: ', fname)
exit()
for line in fhand:
line = line.rstrip()
#print(line)
rev_temp = re.findall('^New Revision: ([0.0-9.0]+)', line)
for x in rev_temp:
rev.append(float(x))
rev_sum = sum(rev)
count = float(len(rev))
rev_ave = int(rev_sum / count)
print(fname, ':', rev_ave)
我得到以下文件名:
mbox.txt : 38549
mbox-short.txt : 39756
我从以下来源获取文件名:
https://www.py4e.com/code3/mbox.txt
https://www.py4e.com/code3/mbox-short.txt
所以这是我的问题
练习 2:编写一个程序来查找以下形式的行:
新版本:39772
使用正则表达式和 findall() 方法从每一行中提取数字。计算数字的平均值并将平均值打印为整数。
输入 file:mbox.txt
38549
输入file:mbox-short.txt
39756
代码:
import re
rev = []
fname = input('Enter file: ')
try:
fhand = open(fname)
except FileNotFoundError:
print('File cannot be opened: ', fname)
exit()
for line in fhand:
line = line.rstrip()
rev_temp = re.findall('^New Revision: ([0.0-9.0]+)', line)
if not rev_temp:
for val in rev_temp:
val = float(val) # Convert the strings to floats
rev = rev + [val] # Concats new values
rev_sum = sum(rev)
count = float(len(rev))
rev_ave = rev_sum / count
print(rev_ave)
这是输出
Enter file: mbox-short.txt
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-58-c4c50e707989> in <module>
19 rev = rev + [val] # Concats new values
20
---> 21 rev_sum = sum(rev)
22 count = float*(len(rev))
23 rev_ave = rev_sum / count
TypeError: 'float' object is not callable
为什么?
我认为您在某处无意中用一个名称相同的 sum
变量覆盖了内置 sum
。寻找:
sum = <some float value>
据我所知,您使用的方法似乎没有正确处理使用匹配模式找到的行。相反,它仅在数字不存在时才尝试对其进行处理,这就是为什么您会收到“除以零”错误的原因。
但是,我们可以修改您的代码,改为查看所有匹配项的所有匹配字符串,并将这些已解析的数字附加为浮点数。然后从那里,你的求和和平均工作正常,没有错误。
import re
rev = []
fname = input('Enter file: ')
try:
fhand = open(fname)
except FileNotFoundError:
print('File cannot be opened: ', fname)
exit()
for line in fhand:
line = line.rstrip()
#print(line)
rev_temp = re.findall('^New Revision: ([0.0-9.0]+)', line)
for x in rev_temp:
rev.append(float(x))
rev_sum = sum(rev)
count = float(len(rev))
rev_ave = int(rev_sum / count)
print(fname, ':', rev_ave)
我得到以下文件名:
mbox.txt : 38549
mbox-short.txt : 39756
我从以下来源获取文件名:
https://www.py4e.com/code3/mbox.txt
https://www.py4e.com/code3/mbox-short.txt