Python-nummers, typeconversie en wiskunde

In dit artikel leert u over de verschillende getallen die in Python worden gebruikt, hoe u van het ene gegevenstype naar het andere converteert en de wiskundige bewerkingen die in Python worden ondersteund.

Getalgegevenstype in Python

Python ondersteunt gehele getallen, getallen met drijvende komma en complexe getallen. Ze worden gedefinieerd als int, floaten complexklassen in Python.

Gehele getallen en drijvende komma's worden gescheiden door de aanwezigheid of afwezigheid van een decimale komma. 5 is bijvoorbeeld een geheel getal, terwijl 5,0 een drijvende-kommagetal is.

Complexe getallen worden in de vorm `` geschreven x + yj, waarbij x het reële deel is en y het imaginaire deel.

We kunnen de type()functie gebruiken om te weten tot welke klasse een variabele of een waarde behoort en isinstance()om te controleren of deze tot een bepaalde klasse behoort.

Laten we naar een voorbeeld kijken:

 a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex))

Als we het bovenstaande programma draaien, krijgen we de volgende output:

 (8 + 3j) Waar

Hoewel gehele getallen elke lengte kunnen hebben, is een drijvende-kommagetal slechts nauwkeurig tot 15 decimalen (de 16e plaats is onnauwkeurig).

De nummers waarmee we dagelijks te maken hebben, zijn van het decimale (grondtal 10) nummersysteem. Maar computerprogrammeurs (meestal embedded programmeurs) moeten werken met binaire (basis 2), hexadecimale (basis 16) en octale (basis 8) getalsystemen.

In Python kunnen we deze nummers weergeven door op de juiste manier een voorvoegsel voor dat nummer te plaatsen. De volgende tabel bevat deze voorvoegsels.

Nummer systeem Voorvoegsel
Binair '0b' of '0B'
Octaal '0o' of '0O'
Hexadecimaal '0x' of '0X'

Hier zijn enkele voorbeelden

 # Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)

Wanneer u het programma uitvoert, is de uitvoer:

 107253 13

Typ Conversie

We kunnen het ene type nummer in het andere omzetten. Dit wordt ook wel dwang genoemd.

Bewerkingen zoals optellen, aftrekken dwingen integer impliciet (automatisch) om te zweven, als een van de operanden zwevend is.

 >>> 1 + 2.0 3.0

We kunnen hierboven zien dat 1 (geheel getal) wordt gedwongen tot 1,0 (float) voor optelling en het resultaat is ook een drijvende-kommagetal.

We kunnen ook ingebouwde functies gebruiken, zoals int(), float()en complex()om expliciet tussen typen te converteren. Deze functies kunnen zelfs van strings converteren.

 >>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)

Bij het converteren van float naar integer, wordt het getal afgekapt (decimale delen worden verwijderd).

Python decimaal

De ingebouwde class float van Python voert enkele berekeningen uit die ons misschien versteld doen staan. We weten allemaal dat de som van 1.1 en 2.2 3.3 is, maar Python lijkt het daar niet mee eens te zijn.

 >>> (1.1 + 2.2) == 3.3 False

Wat is er aan de hand?

Het blijkt dat getallen met drijvende komma in computerhardware worden geïmplementeerd als binaire breuken, aangezien de computer alleen binair (0 en 1) begrijpt. Om deze reden kunnen de meeste decimale breuken die we kennen, niet nauwkeurig op onze computer worden opgeslagen.

Laten we een voorbeeld nemen. We kunnen de breuk 1/3 niet weergeven als een decimaal getal. Dit geeft 0,33333333… wat oneindig lang is, en we kunnen het alleen maar benaderen.

Het blijkt dat de decimale breuk 0.1 zal resulteren in een oneindig lange binaire breuk van 0.000110011001100110011… en onze computer slaat er slechts een eindig aantal van op.

Dit zal slechts bij benadering 0,1 zijn, maar nooit gelijk zijn. Daarom is het de beperking van onze computerhardware en geen fout in Python.

 >>> 1.1 + 2.2 3.3000000000000003

Om dit probleem op te lossen, kunnen we de decimale module gebruiken die bij Python wordt geleverd. Hoewel getallen met drijvende komma een precisie hebben tot 15 decimalen, heeft de decimale module een door de gebruiker instelbare precisie.

Laten we het verschil zien:

 import decimal print(0.1) print(decimal.Decimal(0.1))

Uitvoer

 0,1 0,1000000000000000055511151231257827021181583404541015625

Deze module wordt gebruikt wanneer we decimale berekeningen willen uitvoeren zoals we op school hebben geleerd.

Het behoudt ook de betekenis. We weten dat 25,50 kg nauwkeuriger is dan 25,5 kg, omdat het twee significante cijfers achter de komma heeft vergeleken met één.

 from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50'))

Uitvoer

 3.3 3.000

Notice the trailing zeroes in the above example.

We might ask, why not implement Decimal every time, instead of float? The main reason is efficiency. Floating point operations are carried out must faster than Decimal operations.

When to use Decimal instead of float?

We generally use Decimal in the following cases.

  • When we are making financial applications that need exact decimal representation.
  • When we want to control the level of precision required.
  • When we want to implement the notion of significant decimal places.

Python Fractions

Python provides operations involving fractional numbers through its fractions module.

A fraction has a numerator and a denominator, both of which are integers. This module has support for rational number arithmetic.

We can create Fraction objects in various ways. Let's have a look at them.

 import fractions print(fractions.Fraction(1.5)) print(fractions.Fraction(5)) print(fractions.Fraction(1,3))

Output

 3/2 5 1/3

While creating Fraction from float, we might get some unusual results. This is due to the imperfect binary floating point number representation as discussed in the previous section.

Fortunately, Fraction allows us to instantiate with string as well. This is the preferred option when using decimal numbers.

 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

This data type supports all basic operations. Here are a few examples.

 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 offers modules like math and random to carry out different mathematics like trigonometry, logarithms, probability and statistics, etc.

 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

Here is the full list of functions and attributes available in the Python math module.

 import random print(random.randrange(10, 20)) x = ('a', 'b', 'c', 'd', 'e') # Get random choice print(random.choice(x)) # Shuffle x random.shuffle(x) # Print the shuffled x print(x) # Print random element print(random.random())

Wanneer we het bovenstaande programma uitvoeren, krijgen we de uitvoer als volgt. (Waarden kunnen verschillen vanwege het willekeurige gedrag)

 18 e ('c', 'e', ​​'d', 'b', 'a') 0,5682821194654443

Hier is de volledige lijst met functies en attributen die beschikbaar zijn in de willekeurige module van Python.

Interessante artikelen...