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 で float 除算を使用するか、//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 に変更できます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 に答える