我似乎无法在这个网站上找到答案,尽管看起来很常见。我正在尝试输出两个文件中行数的比率。
#Number of lines in each file
inputLines = sum(1 for line in open(current_file))
outputLines = sum(1 for line in open(output_file))
然后得到比率:
ratio = inputLines/outputLines
但即使我将其初始化为:
,这个比率似乎总是一个整数和一个整数ratio = 1.0
感谢。
答案 0 :(得分:25)
在python 2 中,两个整数除法的结果总是一个整数。要强制浮动除法,您需要在除法中使用至少一个浮点数:
ratio = float(inputLines)/outputLines
小心不要ratio = float(inputLines/outputLines)
:虽然这会导致浮动,但是在执行整数除法后得到,因此结果将是“错误的”(如“你期望什么“)
在python 3 ,the integer division behavior was changed中,两个整数的除法导致浮点数。您也可以在python 2.7中使用此功能,方法是将from __future__ import division
放在文件的乞讨中。
ratio = 1.0
不起作用的原因是类型(在python中)是值的属性,而不是变量 - 换句话说,变量don'有类型。
a= 1.0 # "a" is a float
a= 1 # "a" is now a integer
答案 1 :(得分:4)
您使用的是Python 2.x吗?
尝试使用
>>> from __future__ import division
>>> ratio = 2/5
0.4
从某个部门获得float
。
使用ratio = 1.0
进行初始化并不起作用,因为ratio = inputLines/outputLines
无论以前是什么,都要将变量重新分配给int。
答案 2 :(得分:2)
实际上,Python 2在分割整数时返回一个整数。您可以通过将此行为置于文件顶部来覆盖此行为,就像在Python 3中一样int / int = float
:
from __future__ import division
或者更好的是,停止使用Python 2:)
答案 3 :(得分:1)
您需要将其中一个术语转换为浮点值。明确地使用float
(即ratio = float(a)/b
或ratio=a/float(b)
)或隐式添加0.0
:ratio = (a+0.0)/b
。
如果使用Python 2,你可以from __future__ import division
使除法不是整数,而是浮点数。