2013-06-18 70 views
2

發生了什麼問題我有一個文本文件「luawrite」,其中我將每行分成4列,並將第3列值與第4列值相除(第3列值乘以8)。該文件luawrite看起來是這樣的:split()

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.: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

有什麼錯誤? – freakish

+0

@freakish我編輯帖子。我得到的輸出全部爲零。 –

+0

'對於f.readlines()中的行:'? –

回答

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 

所以至少一個操作數必須浮動以獲得正確的輸出。

您還可以在py2.x導入py3.x除法運算符的功能:

>>> from __future__ import division 
>>> 2/3 
0.6666666666666666 

另一種方法是operator.truediv

>>> import operator 
>>> operator.truediv(2,3) 
0.6666666666666666 
+2

或者,將'val1'乘以'8.0'而不是'8' – mgilson

+2

或'from __future__ import division' – mgilson