2014-01-23 7 views
45

Wie kann ich zwei Zahlen in Python 2.7 teilen und das Ergebnis mit Dezimalzahlen erhalten?Abteilung in Python 2.7. und 3.3

Ich verstehe es nicht, warum Unterschied gibt es:

in Python 3:

>>> 20/15 
1.3333333333333333 

in Python 2:

>>> 20/15 
1 

Ist das nicht ein Modulo eigentlich?

+7

Es ist Integer-Division, yo! '20 mod 15 == 5' –

+1

Versuchen Sie 'float (20)/float (15)' – dumbledad

+0

oder float 20./15. – Tbb

Antwort

70

In Python 2.7, die / Operator Integer-Division ist, wenn die Eingänge ganze Zahlen sind.

Wenn Sie Division schwimmen wollen (was etwas ist, ziehe ich immer), verwenden gerade diese spezielle Import:

from __future__ import division 

es Siehe hier:

>>> 3/2 
1 
>>> from __future__ import division 
>>> 3/2 
1.5 
>>> 

Integer-Division durch die Verwendung // erreicht wird, und modulo unter Verwendung %

>>> 3 % 2 
1 
>>> 3 // 1 
3 
>>> 

EDIT

Wie von user2357112 kommentiert, muss dieser Import vor jedem anderen normalen Import durchgeführt werden.

+3

Es ist erwähnenswert, dass zukünftige Anweisungen vor jedem anderen Code in einem Modul erscheinen müssen, insbesondere vor nicht-zukünftigen Importen. Auch "import __future__" funktioniert nicht. – user2357112

+0

Schön. Die Verwendung von '__future__' ist fast immer der empfohlene Weg – woozyking

+0

Danke! Ich bevorzuge auch immer die Float-Division :) – Erzsebet

25

In Python 3 / ist Teilung

In Python 2 schweben, ist / ganzzahlige Division (unter der Annahme int Eingänge)

In beide 2 und 3, // ist ganzzahlige Division

(Um die Gleitkommadivision in Python 2 zu erhalten, muss einer der Operanden ein Gleitkomma sein, entweder 20. oder float(20))

13

Stellen Sie in Python 2.x sicher, dass Sie mindestens einen Operanden Ihrer Division in float haben. Mehrere Möglichkeiten, wie Sie können diese wie die folgenden Beispiele erreichen:

20./15 
20/float(15) 
9

"/" ist Integer-Division in Python 2, also wird es auf eine ganze Zahl runden. Wenn Sie eine Dezimalzahl zurückgegeben möchten, ändern Sie einfach die Art der einen der Eingänge zu schweben:

float(20)/15 #1.33333333