Python numbers, type conversion and math
Table of Contents
In diesem Artikel erfahren Sie mehr über die verschiedenen in Python verwendeten Zahlen, die Konvertierung von einem Datentyp in den anderen und die in Python unterstützten mathematischen Operationen.
Zahl Datentyp in Python
Python unterstützt ganze Zahlen, Gleitkommazahlen und komplexe Zahlen.
Sie sind definiert als int
, float
, und complex
klassen in Python.
Ganzzahlen und Gleitkommazahlen werden durch das Vorhandensein oder Fehlen eines Dezimalpunkts getrennt. 5 ist beispielsweise eine ganze Zahl, während 5,0 eine Gleitkommazahl ist.
Komplexe Zahlen werden in der Form geschrieben, x + yj
,wo x ist der wahre Teil und y ist der Imaginärteil.
Wir können die type()
Funktion, um zu wissen, zu welcher Klasse eine Variable oder ein Wert gehört und isinstance()
Funktion, um zu überprüfen, ob es zu einer bestimmten Klasse gehört.
Schauen wir uns ein Beispiel an:
a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex))
Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe:
<class 'int'> <class 'float'> (8+3j) True
Während ganze Zahlen beliebig lang sein können, ist eine Gleitkommazahl nur bis zu 15 Dezimalstellen genau (die 16. Stelle ist ungenau).
Die Zahlen, mit denen wir täglich zu tun haben, sind nach dem dezimalen Zahlensystem (Basis 10). Aber Computerprogrammierer (im Allgemeinen eingebettete Programmierer) müssen mit binären (Basis 2), hexadezimalen (Basis 16) und oktalen (Basis 8) Zahlensystemen arbeiten.
In Python können wir diese Zahlen darstellen, indem wir dieser Zahl entsprechend ein Präfix voranstellen. In der folgenden Tabelle sind diese Präfixe aufgeführt.
Nummern System | Prefix |
---|---|
Binär | ‘0b’ or ‘0B’ |
Oktal | ‘0o’ or ‘0O’ |
Hexadezimal | ‘0x’ or ‘0X’ |
Hier sind einige Beispiele
# Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)
Wenn Sie das Programm ausführen, wird die Ausgabe sein:
107 253 13
Typ Konvertierung
Wir können einen Zahlentyp in einen anderen umwandeln. Dies wird auch als Zwang bezeichnet.
Operationen wie Addition, Subtraktion erzwingen implizit (automatisch) Integer zu float, wenn einer der Operanden float ist.
>>> 1 + 2.0 3.0
Wir können oben sehen, dass 1 (Ganzzahl) zur Addition in 1.0 (Float) umgewandelt wird und das Ergebnis ebenfalls eine Gleitkommazahl ist.
Wir können auch eingebaute Funktionen verwenden wie int()
, float()
und complex()
zwischen Typen explizit konvertieren. Diese Funktionen können sogar von strings.
>>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)
Beim Konvertieren von Float in Integer wird die Zahl abgeschnitten (Dezimalteile werden entfernt).
Python Dezimal
Die in Python integrierte Klasse float führt einige Berechnungen durch, die uns verblüffen könnten. Wir alle wissen, dass die Summe von 1,1 und 2,2 3,3 ist, aber Python scheint da anderer Meinung zu sein.
>>> (1.1 + 2.2) == 3.3 False
Was geht vor?
Es stellt sich heraus, dass Gleitkommazahlen in Computerhardware als binäre Brüche implementiert sind, da der Computer nur binäre Werte (0 und 1) versteht. Aus diesem Grund können die meisten der uns bekannten Dezimalbrüche in unserem Computer nicht genau gespeichert werden.
Nehmen wir ein Beispiel. Wir können den Bruch 1/3 nicht als Dezimalzahl darstellen. Dies ergibt 0,33333333… was unendlich lang ist, und wir können es nur annähern.
Es stellt sich heraus, dass der Dezimalbruch 0.1 zu einem unendlich langen binären Bruch von 0.000110011001100110011 führt und unser Computer nur eine endliche Anzahl davon speichert.
Dies wird nur ungefähr 0,1 sein, aber niemals gleich sein. Daher ist es die Einschränkung unserer Computerhardware und kein Fehler in Python.
>>> 1.1 + 2.2 3.3000000000000003
Um dieses Problem zu lösen, können wir das Dezimalmodul verwenden, das mit Python geliefert wird. Während Gleitkommazahlen eine Genauigkeit von bis zu 15 Dezimalstellen haben, hat das Dezimalmodul eine vom Benutzer einstellbare Genauigkeit.
Sehen wir uns den Unterschied an:
import decimal print(0.1) print(decimal.Decimal(0.1))
Output
0.1 0.1000000000000000055511151231257827021181583404541015625
Dieses Modul wird verwendet, wenn wir Dezimalrechnungen durchführen möchten, wie wir sie in der Schule gelernt haben.
Es bewahrt auch die Bedeutung. Wir wissen, dass 25,50 kg genauer sind als 25,5 kg, da es zwei signifikante Dezimalstellen im Vergleich zu einer hat.
from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50'))
Output
3.3 3.000
Beachten Sie die nachgestellten Nullen im obigen Beispiel.
Wir könnten fragen, warum nicht implementieren Decimal
jedes Mal statt schweben? Der Hauptgrund ist die Effizienz. Gleitkommaoperationen müssen schneller ausgeführt werden als Decimal
Betrieb.
Wann sollte Decimal statt Float verwendet werden?
In den folgenden Fällen verwenden wir im Allgemeinen Dezimal.
- Wenn wir Finanzanwendungen erstellen, die eine genaue Dezimaldarstellung benötigen.
- Wenn wir die erforderliche Präzision kontrollieren wollen.
- Wenn wir den Begriff der signifikanten Dezimalstellen implementieren wollen.
Python Fractions
Python bietet Operationen mit Bruchzahlen durch seine fractions
modul.
Ein Bruch hat einen Zähler und einen Nenner, die beide ganze Zahlen sind. Dieses Modul unterstützt rationale Zahlenarithmetik.
Wir können Fraction-Objekte auf verschiedene Weise erstellen. Schauen wir sie uns an.
import fractions print(fractions.Fraction(1.5)) print(fractions.Fraction(5)) print(fractions.Fraction(1,3))
Output
3/2 5 1/3
Beim Erstellen Fraction
von float
, wir könnten einige ungewöhnliche Ergebnisse erhalten. Dies liegt an der unvollkommenen binären Gleitkommazahl-Darstellung, wie im vorherigen Abschnitt besprochen.
Glücklicherweise, Fraction
erlaubt uns, auch mit string zu instanziieren Dies ist die bevorzugte Option, wenn Dezimalzahlen verwendet werden.
import fractions # As float # Output: 2476979795053773/2251799813685248 print(fractions.Fraction(1.1)) # As string # Output: 11/10 print(fractions.Fraction('1.1'))
Output
2476979795053773/2251799813685248 11/10
Dieser Datentyp unterstützt alle grundlegenden Operationen. Hier sind ein paar Beispiele.
from fractions import Fraction as F print(F(1, 3) + F(1, 3)) print(1 / F(5, 6)) print(F(-3, 10) > 0) print(F(-3, 10) < 0)
Output
2/3 6/5 False True
Python Mathematics
Python bietet Module wie math
und random
verschiedene Mathematik wie Trigonometrie, Logarithmen, Wahrscheinlichkeit und Statistik usw. durchzuführen.
import math print(math.pi) print(math.cos(math.pi)) print(math.exp(10)) print(math.log10(1000)) print(math.sinh(1)) print(math.factorial(6))
Output
3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720
Hier ist die vollständige Liste der Funktionen und Attribute, die im Python math modul verfügbar sind.
import random print(random.randrange(10, 20)) x = ['a', 'b', 'c', 'd', 'e'] # Zufallsauswahl erhalten print(random.choice(x)) # Mischen x random.shuffle(x) # Drucken des gemischten x print(x) # Zufälliges Element drucken print(random.random())
Wenn wir das obige Programm ausführen, erhalten wir die Ausgabe wie folgt. (Werte können aufgrund des zufälligen Verhaltens abweichen)
18 e ['c', 'e', 'd', 'b', 'a'] 0.5682821194654443
Hier ist die vollständige Liste der Funktionen und Attribute, die im Python random module verfügbar sind.