2

在下面的代码中,我想计算一个序列中 G 和 C 字符的百分比。在 Python 3 中我正确地得到0.5了,但在 Python 2 中我得到了0. 为什么结果不一样?

def gc_content(base_seq):
    """Return the percentage of G and C characters in base_seq"""
    seq = base_seq.upper()
    return (seq.count('G') + seq.count('C')) / len(seq)

gc_content('attacgcg')
4

3 回答 3

9

/是 Python 3 中不同的运算符;在 Python 2 中/,当应用于 2 个整数操作数时会改变行为,并改为返回下限除法的结果:

>>> 3/2   # two integer operands
1
>>> 3/2.0 # one operand is not an integer, float division is used
1.5

添加:

from __future__ import division

到代码顶部以/在 Python 2 中使用浮点除法,或用于//强制 Python 3 使用整数除法:

>>> from __future__ import division
>>> 3/2    # even when using integers, true division is used
1.5
>>> 3//2.0 # explicit floor division
1.0

在 Python 2.2 或更高版本中使用这些技术中的任何一种都有效。有关更改原因的详细信息,请参阅PEP 238 。

于 2013-07-08T16:46:18.703 回答
2

在 python2.x/中执行整数除法。

>>> 3/2
1

要获得所需的结果,您可以使用以下方法将任一操作数更改为浮点数float()

>>> 3/2.      #3/2.0
1.5
>>> 3/float(2)
1.5

division使用__future__

>>> from __future__ import division
>>> 3/2
1.5
于 2013-07-08T16:46:27.850 回答
1

对于 Python2/是整数除法,分子和分母都是int,你需要确保强制浮点除法

例如。

return (seq.count('G') + seq.count('C')) / float(len(seq))

或者,你可以把

from __future__ import division

在文件的顶部

于 2013-07-08T16:46:09.013 回答