Python numuri, tipa pārveidošana un matemātika

Šajā rakstā jūs uzzināsiet par dažādiem Python izmantotajiem skaitļiem, kā pārveidot no viena datu veida uz otru un par Python atbalstītajām matemātiskajām operācijām.

Skaitļu datu tips Python

Python atbalsta veselus skaitļus, peldošā komata skaitļus un kompleksus skaitļus. Tie ir definēti kā int, floatun complexklasēs Python.

Veselos skaitļus un peldošos punktus atdala ar decimāldaļu esamību vai neesamību. Piemēram, 5 ir vesels skaitlis, savukārt 5,0 ir peldošā komata skaitlis.

Kompleksie skaitļi tiek ierakstīti formā,, x + yjkur x ir reālā daļa un y ir iedomātā daļa.

Mēs varam izmantot type()funkciju, lai uzzinātu, kurai klasei pieder mainīgais vai vērtība, un isinstance()funkciju, lai pārbaudītu, vai tas pieder konkrētai klasei.

Apskatīsim piemēru:

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

Palaidot iepriekš minēto programmu, mēs iegūstam šādu rezultātu:

 (8 + 3j) Patiesi

Lai gan veseli skaitļi var būt jebkura garuma, peldošā komata skaitlis ir precīzs tikai līdz 15 zīmēm aiz komata (16. vieta ir neprecīza).

Skaitļi, ar kuriem mēs katru dienu nodarbojamies, ir decimāldaļu (bāzes 10) skaitļu sistēma. Bet datorprogrammētājiem (parasti iegultiem programmētājiem) ir jāstrādā ar bināro (2. bāze), heksadecimālo (16. bāze) un oktālo (8. bāze) skaitļu sistēmām.

Programmā Python mēs varam attēlot šos skaitļus, pareizi ievietojot prefiksu pirms šī skaitļa. Šajā tabulā ir uzskaitīti šie prefiksi.

Skaitļu sistēma Priedēklis
Binārs “0b” vai “0B”
Astotnieks “0o” vai “0O”
Heksadecimāls “0x” vai “0X”

Šeit ir daži piemēri

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

Palaidot programmu, izeja būs:

 107 253 13

Ierakstiet reklāmguvumu

Mēs varam pārveidot viena veida numurus citos. To sauc arī par piespiešanu.

Darbības, piemēram, saskaitīšana, atņemšana, liek veselam skaitlim netieši (automātiski) peldēt, ja viens no operandiem ir peldošs.

 >>> 1 + 2.0 3.0

Iepriekš redzams, ka 1 (vesels skaitlis) tiek piespiests skaitlim 1.0 (pludiņš), lai pievienotu, un rezultāts ir arī peldošā komata skaitlis.

Mēs varam arī izmantot iebūvētās funkcijas, piemēram int(), float()un complex()tieši pārveidot starp tipiem. Šīs funkcijas var pārveidot pat no virknēm.

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

Konvertējot no pludiņa uz veselu skaitli, skaitlis tiek saīsināts (decimāldaļas tiek noņemtas).

Python decimālskaitlis

Python iebūvētais klases pludiņš veic dažus aprēķinus, kas mūs varētu pārsteigt. Mēs visi zinām, ka 1.1 un 2.2 summa ir 3.3, taču Python, šķiet, nepiekrīt.

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

Kas notiek?

Izrādās, ka peldošo komatu skaitļi datortehnikā tiek ieviesti kā bināras frakcijas, jo dators saprot tikai bināros (0 un 1). Šī iemesla dēļ lielāko daļu mums zināmo decimāldaļu nevar precīzi saglabāt mūsu datorā.

Ņemsim piemēru. Mēs nevaram attēlot daļu 1/3 kā decimāldaļu. Tas dos 0.33333333 … kas ir bezgalīgi garš, un mēs varam to tikai tuvināt.

Izrādās, ka decimāldaļskaitļa 0,1 rezultātā bezgalīgi gara binārā daļa būs 0,000110011001100110011 … un mūsu dators to glabā tikai ierobežotā skaitā.

Tas būs tikai aptuveni 0,1, bet nekad nebūs vienāds. Tādējādi tas ir mūsu datortehnikas ierobežojums, nevis kļūda Python.

 >>> 1.1 + 2.2 3.3000000000000003

Lai novērstu šo problēmu, mēs varam izmantot decimālo moduli, kas nāk ar Python. Kamēr peldošā komata skaitļu precizitāte ir līdz 15 zīmēm aiz komata, decimālo moduļu precizitāte ir lietotāja iestatīta.

Apskatīsim atšķirību:

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

Rezultāts

 0,1 0,1000000000000000055511151231257827021181583404541015625

Šis modulis tiek izmantots, kad mēs vēlamies veikt decimālus aprēķinus, kā mēs mācījāmies skolā.

Tas arī saglabā nozīmi. Mēs zinām, ka 25,50 kg ir precīzāks par 25,5 kg, jo tam ir divas zīmes aiz komata, salīdzinot ar vienu.

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

Rezultāts

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

Palaidot iepriekš minēto programmu, mēs iegūstam šādu rezultātu. (Vērtības var būt atšķirīgas nejaušas uzvedības dēļ)

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

Šeit ir pilns Python izlases modulī pieejamo funkciju un atribūtu saraksts.

Interesanti raksti...