2

テキストファイル「luawrite」があり、各行を 4 列に分割し、(3 列目の値に 8 を掛けたもの) を 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を使用しています。しかし、私が得る解決策はすべてゼロです。このコードのどこに問題があるのか​​教えてください。小さな間違いかもしれませんが、私はそれを見つけることができません。ありがとう!

4

1 に答える 1

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

したがって、正しい出力を得るには、少なくとも1 つのオペランドが float でなければなりません。

py3.x の除算演算子の機能を py2.x にインポートすることもできます。

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

別の選択肢はoperator.truediv次のとおりです。

>>> import operator
>>> operator.truediv(2,3)
0.6666666666666666
于 2013-06-18T21:21:50.103 に答える