我有一个文本文件" luawrite",其中我将每行分成4列,我将第3列值除以第4列值。文件luawrite看起来像这样:
0.012281001 00:1c:c4:c2:1f:fe 1441 44000000
0.012285001 00:1c:c4:c2:1f:fe 1441 44000000
0.012288001 00:1c:c4:c2:1f:fe 1441 44000000
0.012292001 00:1c:c4:c2:1f:fe 1441 44000000
0.012295001 00:1c:c4:c2:1f:fe 1441 44000000
0.012299001 00:1c:c4:c2:1f:fe 1441 44000000
0.012302001 00:1c:c4:c2:1f:fe 1441 44000000
我为此编写的代码如下:
#!/usr/bin/python
import collections
result = collections.defaultdict(int)
with open("luawrite", "r") as f:
for line in f:
hashes = line.split()
val1 = int(hashes[2])
val2 = int(hashes[3])
k = (val1*8)/val2
print k
我正在使用python 2.6。但我得到的解决方案都是零。这段代码中的问题在哪里,请告诉我。这可能是一个小错误,但我无法找到它。谢谢!
答案 0 :(得分:5)
在py2.x中,整数除法会截断输出,因此您将在此输出0
。:
使用float
:
k = (val1*8)/float(val2) #or just do: (val1*8.0)/val2 #numerator is now a float
演示:
>>> 2/3
0
>>> 2/3.0
0.6666666666666666
>>> 2/float(3)
0.6666666666666666
所以至少一个操作数必须是float才能获得正确的输出。
您还可以在py2.x中导入py3.x除法运算符的功能:
>>> from __future__ import division
>>> 2/3
0.6666666666666666
另一种选择是operator.truediv
:
>>> import operator
>>> operator.truediv(2,3)
0.6666666666666666