„Python“ skaičiai, tipų konvertavimas ir matematika

Šiame straipsnyje sužinosite apie skirtingus „Python“ naudojamus skaičius, kaip konvertuoti iš vieno duomenų tipo į kitą ir „Python“ palaikomas matematines operacijas.

Skaičiaus duomenų tipas „Python“

„Python“ palaiko sveikus skaičius, slankiojo kablelio skaičius ir sudėtinius skaičius. Jie apibrėžiami kaip int, floatir complexklasių Python.

Sveikieji skaičiai ir plūduriuojantys taškai skiriami po kablelio buvimo ar nebuvimo. Pavyzdžiui, 5 yra sveikasis skaičius, o 5,0 yra slankiojo kablelio skaičius.

Kompleksiniai skaičiai rašomi tokia forma:, x + yjkur x yra tikroji dalis, o y - įsivaizduojama dalis.

Mes galime naudoti type()funkciją norėdami sužinoti, kuriai klasei priklauso kintamasis ar reikšmė, ir isinstance()patikrinti, ar ji priklauso tam tikrai klasei.

Pažvelkime į pavyzdį:

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

Vykdydami pirmiau nurodytą programą, gauname tokį išėjimą:

 (8 + 3j) Tiesa

Nors sveikieji skaičiai gali būti bet kokio ilgio, slankiojo kablelio skaičius tikslus tik iki 15 dešimtųjų (16 vieta yra netiksli).

Skaičiai, su kuriais susiduriame kiekvieną dieną, yra dešimtainių (10 bazinių) skaičių sistema. Tačiau kompiuterių programuotojai (paprastai įterptieji programuotojai) turi dirbti su dvejetainėmis (bazinė 2), šešioliktainėmis (bazė 16) ir aštuntainėmis (bazė 8) skaičių sistemomis.

„Python“ galime pavaizduoti šiuos skaičius tinkamai įdėdami priešdėlį prieš tą skaičių. Šioje lentelėje išvardyti šie priešdėliai.

Skaičių sistema Priešdėlis
Dvejetainis „0b“ arba „0B“
Aštuonkojis „0o“ arba „0O“
Šešioliktainis „0x“ arba „0X“

Štai keletas pavyzdžių

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

Kai paleisite programą, išvestis bus:

 107 253 13

Tipo konversija

Vieno tipo numerį galime paversti kitu. Tai dar vadinama prievarta.

Tokios operacijos kaip sudėjimas, atimtis priverčia sveiką skaičių plūduriuoti netiesiogiai (automatiškai), jei vienas iš operandų yra plūduriuojantis.

 >>> 1 + 2.0 3.0

Aukščiau matome, kad 1 (sveikasis skaičius) pridedamas prie 1,0 (plūdės) ir rezultatas taip pat yra slankiojo kablelio skaičius.

Mes taip pat galime naudoti įmontuotas funkcijas, pvz. int(), float()Ir complex()aiškiai konvertuoti tarp tipų. Šios funkcijos gali konvertuoti net iš eilučių.

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

Konvertuojant iš plūduriuojančio į sveikąjį skaičių, skaičius sutrumpinamas (dešimtainės dalys pašalinamos).

„Python“ dešimtainis skaičius

„Python“ įmontuota klasės „float“ atlieka keletą skaičiavimų, kurie mus gali nustebinti. Mes visi žinome, kad 1.1 ir 2.2 suma yra 3.3, tačiau atrodo, kad „Python“ nesutaria.

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

Kas vyksta?

Pasirodo, kad slankiojo kablelio skaičiai kompiuterių aparatinėje įrangoje įgyvendinami kaip dvejetainės trupmenos, nes kompiuteris supranta tik dvejetainius (0 ir 1). Dėl šios priežasties dauguma žinomų dešimtainių trupmenų negali būti tiksliai išsaugotos mūsų kompiuteryje.

Paimkime pavyzdį. Mes negalime pateikti trupmenos 1/3 kaip dešimtainio skaičiaus. Tai suteiks 0.33333333 … kuris yra be galo ilgas, ir mes galime jį tik apytiksliai įvertinti.

It turns out that the decimal fraction 0.1 will result in an infinitely long binary fraction of 0.000110011001100110011… and our computer only stores a finite number of it.

This will only approximate 0.1 but never be equal. Hence, it is the limitation of our computer hardware and not an error in Python.

 >>> 1.1 + 2.2 3.3000000000000003

To overcome this issue, we can use the decimal module that comes with Python. While floating-point numbers have precision up to 15 decimal places, the decimal module has user-settable precision.

Let's see the difference:

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

Output

 0.1 0.1000000000000000055511151231257827021181583404541015625

This module is used when we want to carry out decimal calculations as we learned in school.

It also preserves significance. We know 25.50 kg is more accurate than 25.5 kg as it has two significant decimal places compared to one.

 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

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())

Vykdydami pirmiau nurodytą programą, gauname išvestį taip. (Dėl atsitiktinio elgesio vertės gali skirtis)

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

Čia yra visas „Python“ atsitiktinių modulių funkcijų ir atributų sąrašas.

Įdomios straipsniai...