Tö

Törtek ebben a kurzusban: Python

{one: "1 feladat", other: "%{count} feladat"}

A(z) Törtek fogalomról

A fractions modul segítségével rational numbers értékeket hozhatunk létre és használhatunk: olyan törteket, amelyeknél egy egész számlálót egy egész nevezővel osztunk el.

Például a 2/3-at pontos törtként tárolhatjuk a közelítő 0.6666... float érték helyett.

Törtek létrehozása

Az int, float és complex számokkal ellentétben a törteknek nincs literál alakjuk. A tört konstruktora azonban meglehetősen rugalmas.

A legkézenfekvőbb eset: két egész számot adhatunk át neki. A közös tényezőket automatikusan eltávolítja, ezzel a törtet a „legegyszerűbb alakjára” egyszerűsíti (a legkisebb egészek, amelyek pontosan reprezentálják a törtet):

>>> from fractions import Fraction

>>> f1 = Fraction(2, 3) # 2/3
>>> f1
Fraction(2, 3)

>>> f2 = Fraction(6, 9)
>>> f2
Fraction(2, 3)  # automatically simplified

>>> f1 == f2
True

A tört konstruktora string alakban megadott értéket is fel tud dolgozni:

>>> f3 = Fraction('2/3')
>>> f3
Fraction(2, 3)

float paraméterekkel is működik, de ez problémákba ütközhet, mert a tizedes értéket a program a háttérben binárisan, közelítő formában tárolja. A reprezentáció ezen problémájáról bővebben lásd a 0.30000000000000004 weboldalt, valamint a Python dokumentációjának Floating Point Arithmetic: Issues and Limitations című részét.

Ha megbízhatóbb eredményt szeretnél, amikor floatokat használsz törtekkel, használhatod a <fraction>.limit_denominator() metódust.

A .limit_denominator() fogadhat egy egész szám paramétert, ha konkrét követelményeid vannak, de még az alapértelmezett érték (max_denominator=1000000) is jól működhet, és elfogadható, egyszerű közelítést adhat.

>>> Fraction(1.2)
Fraction(5404319552844595, 4503599627370496)

>>> Fraction(1.2).limit_denominator()
Fraction(6, 5)

Aritmetika törtekkel

A szokásos arithmetic operators (+ - * / **) ugyanúgy működnek törtekkel, mint más numerikus típusokkal.

Egész számokat és további Fraction értékeket is szerepeltethetünk a kifejezésben, és az eredmény Fraction lesz. Ha float is kerül a kifejezésbe, az eredmény float lesz, ami (esetleges) pontosságvesztéssel járhat.

>>> Fraction(2, 3) + Fraction(1, 4) # addition
Fraction(11, 12)

>>> Fraction(2, 3) * Fraction(6, 5) # multiply fractions
Fraction(4, 5)

>>> Fraction(2, 3) * 6 / 5 # fraction with integers
Fraction(4, 5)

>>> Fraction(2, 3) * 1.2  # fraction with float -> float
0.7999999999999999

>>> Fraction(2, 3) ** 2  # exponentiation with integer
Fraction(4, 9)

Átalakítás törtekre és törtekből

A törtek kiválóan megőrzik a pontosságot a közbenső számítások során, de a végső kimenethez nem biztos, hogy ezt szeretnéd.

A számlálót és a nevezőt külön-külön vagy egy tuple formájában is megkaphatod (a tuples típusról egy későbbi fogalomban lesz szó):

>>> Fraction(2, 3).numerator
2
>>> Fraction(2, 3).denominator
3
>>> Fraction(2, 3).as_integer_ratio()
(2, 3)

A különféle szabványos Python numerikus függvények is azt az eredményt adják, amit az int és float típusokkal való munkától elvárnál:

>>> round(Fraction(11, 3))
4

>>> from math import floor, ceil
>>> floor(Fraction(11, 3))
3
>>> ceil(Fraction(11, 3))
4

>>> float(Fraction(11, 3))
3.6666666666666665
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg