Pythoni numbrid, tüübi teisendamine ja matemaatika

Selles artiklis saate teada Pythonis kasutatavatest erinevatest numbritest, teisendamisest ühest andmetüübist teise ja Pythonis toetatud matemaatilistest toimingutest.

Number Andmete tüüp Pythonis

Python toetab täisarvusid, ujukoma- ja kompleksarvusid. Nad on defineeritud int, floatja complexklasside Python.

Täisarvud ja ujuvad punktid on eraldatud kümnendkoha olemasolu või puudumisega. Näiteks 5 on täisarv, samas kui 5,0 on ujukomaarv.

Kompleksarvud kirjutatakse kujul, x + yjkus x on tegelik osa ja y kujuteldav osa.

type()Funktsiooni abil saame teada, millisesse klassi muutuja või väärtus kuulub, ja isinstance()funktsiooni abil kontrollida, kas see kuulub konkreetsesse klassi.

Vaatame näidet:

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

Ülaltoodud programmi käivitamisel saame järgmise väljundi:

 (8 + 3j) Tõsi

Kui täisarvud võivad olla mis tahes pikkused, on ujukomaarv täpne ainult kuni 15 kümnendkohani (16. koht on ebatäpne).

Numbrid, millega me iga päev tegeleme, on kümnendarvude (baas 10) arvsüsteem. Kuid arvutiprogrammeerijad (tavaliselt sisseehitatud programmeerijad) peavad töötama binaarse (baas 2), kuueteistkümnendsüsteemi (baas 16) ja kaheksandarvulise (baas 8) arvusüsteemiga.

Pythonis saame neid numbreid esindada, pannes selle numbri ette sobivalt eesliite. Järgmises tabelis on loetletud need eesliited.

Numbrisüsteem Eesliide
Binaarne „0b” või „0B”
Kaheksandik „0o” või „0O”
Kuueteistkümnendkoht „0x” või „0X”

Siin on mõned näidised

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

Programmi käivitamisel on väljund järgmine:

 107 253 13

Sisestage teisendus

Saame teisendada ühte tüüpi numbreid teisteks. Seda tuntakse ka sunnina.

Operatsioonid nagu liitmine, lahutamine sunnivad täisarvu kaudselt (automaatselt) hõljuma, kui üks operandidest on ujuk.

 >>> 1 + 2.0 3.0

Eespool näeme, et 1 (täisarv) sunditakse liitmiseks väärtuseks 1,0 (ujuk) ja tulemuseks on ka ujukomaarv.

Võime kasutada ka sisseehitatud funktsioone, näiteks int(), float()ja complex()tüüpi vahetult teisendamiseks. Need funktsioonid võivad isegi stringidest teisendada.

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

Ujukilt täisarvuks teisendamisel kärbitakse arvu (kümnendkohad eemaldatakse).

Pythoni kümnendkoht

Pythoni sisseehitatud klassi ujuk teeb mõned arvutused, mis võivad meid hämmastada. Me kõik teame, et 1.1 ja 2.2 summa on 3.3, kuid Python näib olevat sellega nõus.

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

Mis toimub?

Selgub, et ujukomaarvud rakendatakse arvutiriistvaras kahendmurdudena, kuna arvuti saab aru ainult binaarsetest (0 ja 1). Sel põhjusel ei saa enamikku meile teadaolevaid kümnendmurde meie arvutisse täpselt salvestada.

Võtame näite. Me ei saa murdosa 1/3 esindada kümnendarvuna. See annab 0,33333333 … mis on lõpmata pikk ja me saame seda ainult ligikaudselt hinnata.

Selgub, et kümnendmurru 0,1 tulemuseks on lõpmatult pikk binaarmurd 0,000110011001100110011 … ja meie arvuti salvestab sellest vaid piiratud arvu.

See on ainult ligikaudne 0,1, kuid pole kunagi võrdne. Seega on see meie arvutiriistvara piirang ja mitte viga Pythonis.

 >>> 1.1 + 2.2 3.3000000000000003

Selle probleemi ületamiseks saame kasutada Pythoni komplektis olevat kümnendmoodulit. Kui ujukomaarvude täpsus on kuni 15 kümnendkoha täpsust, siis kümnendmoodulil on kasutaja määratud täpsus.

Vaatame erinevust:

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

Väljund

 0,1 0,1000000000000000055511151231257827021181583404541015625

Seda moodulit kasutatakse siis, kui me tahame koolis õppida kümnendarvutusi.

See säilitab ka olulisuse. Me teame, et 25,50 kg on täpsem kui 25,5 kg, kuna sellel on kaks märkimisväärset kohta pärast koma.

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

Väljund

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

Ülaltoodud programmi käivitamisel saame väljundi järgmiselt. (Juhusliku käitumise tõttu võivad väärtused olla erinevad)

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

Siin on täielik Pythoni juhusliku mooduli funktsioonide ja atribuutide loend.

Huvitavad Artiklid...