Python for Everyone第11章练习2';浮动';对象不可调用
这是我的问题 练习2:编写一个程序来查找表单中的行: 新版本:39772Python for Everyone第11章练习2';浮动';对象不可调用,python,python-3.x,jupyter-notebook,jupyter,Python,Python 3.x,Jupyter Notebook,Jupyter,这是我的问题 练习2:编写一个程序来查找表单中的行: 新版本:39772 使用正则表达式和findall()方法从每行中提取数字。计算数字的平均值,并将平均值打印为整数。 输入文件:mbox.txt 38549 输入文件:mbox short.txt 39756 代码: 这是输出 Enter file: mbox-short.txt --------------------------------------------------------------------------- TypeEr
使用正则表达式和findall()方法从每行中提取数字。计算数字的平均值,并将平均值打印为整数。
输入文件:mbox.txt
38549
输入文件:mbox short.txt
39756 代码: 这是输出
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
输入文件:mbox-short.txt
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
19版本=版本+[val]#包含新值
20
--->21版次总和=总和(版次)
22计数=浮动*(长度(修订))
23 rev_ave=rev_总和/计数
TypeError:“float”对象不可调用
为什么?我认为您不小心在某个地方用一个同名的
sum
变量覆盖了内置的sum
。寻找:
sum = <some float value>
sum=
据我所知,您使用的方法似乎没有正确处理使用匹配模式找到的行。相反,它只是试图在数字不存在的情况下对其进行处理,这就是为什么会出现“被零除”的错误
但是,我们可以修改您的代码,改为查看所有匹配的所有匹配字符串,并将这些解析的数字附加为浮点数。从这里开始,你的求和和和平均工作得很好,没有错误
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
我的文件名来源于:您发布的代码与错误输出中的代码不一样。毫无疑问,其他地方的差异导致了我们只能猜测的问题。在上面的某个地方,在您没有向我们展示的内容中,您命名了一个变量
sum
。修复?不要这样做。嗨,你确实改进了代码,但是你没有回答他们的问题:为什么我会出现这个错误?请注意,这不是一个zero错误
。这是一个类型错误
。谢谢!代码有效!
mbox.txt : 38549
mbox-short.txt : 39756