Υπολογισμός κλασμάτων (ορθολογικών αριθμών) με κλάσματα

Επιχείρηση

Χρησιμοποιώντας την ενότητα κλασμάτων της τυπικής βιβλιοθήκης της Python, μπορείτε να εκτελέσετε υπολογισμούς με κλάσματα (ορθολογικούς αριθμούς).

Τα ακόλουθα εξηγούνται εδώ.

  • Κατασκευαστής του κλάσματος
  • Λάβετε τις τιμές αριθμητή και παρονομαστή ως ακέραιους αριθμούς
  • Υπολογισμός και σύγκριση κλασμάτων (ορθολογικοί αριθμοί)
  • Μετατροπή κλασμάτων σε δεκαδικούς (float)
  • Μετατροπή κλάσματος σε συμβολοσειρά (str)
  • Λήψη προσέγγισης ορθολογικού αριθμού

Κατασκευαστής του κλάσματος

Υπάρχουν διάφοροι τρόποι για να δημιουργήσετε μια περίπτωση κλάσματος. Σε όλες τις περιπτώσεις, το κλάσμα διαιρείται αυτόματα σε κλάσματα.

Καθορίστε τον αριθμητή και τον παρονομαστή ως ακέραιους αριθμούς

Καθορίστε τον αριθμητή και τον παρονομαστή ως ακέραιους αριθμούς, αντίστοιχα. Εάν ο παρονομαστής παραλειφθεί, θεωρείται ότι είναι 1.

from fractions import Fraction

print(Fraction(1, 3))
# 1/3

print(Fraction(2, 6))
# 1/3

print(Fraction(3))
# 3

δεκαδικό κλάσμα (float)

Εάν περάσει μια κλασματική τιμή, μετατρέπεται σε κλάσμα.

print(Fraction(0.25))
# 1/4

print(Fraction(0.33))
# 5944751508129055/18014398509481984

Εάν επιθυμείτε να προσεγγίσετε καθορίζοντας έναν μέγιστο παρονομαστή, χρησιμοποιήστε τη μέθοδο limit_denominator() που περιγράφεται παρακάτω.

συμβολοσειρά χαρακτήρων (str)

Εάν περάσει μια τιμή συμβολοσειράς, μετατρέπεται σε κλάσμα.

print(Fraction('2/5'))
# 2/5

print(Fraction('16/48'))
# 1/3

Λάβετε τις τιμές αριθμητή και παρονομαστή ως ακέραιους αριθμούς

Τα χαρακτηριστικά τύπου Fraction σας επιτρέπουν να λαμβάνετε ακέραιες τιμές για τον αριθμητή και τον παρονομαστή, αντίστοιχα. Δεν μπορούν να τροποποιηθούν.

  • numerator
  • denominator
a = Fraction(1, 3)
print(a)
# 1/3

print(a.numerator)
print(type(a.numerator))
# 1
# <class 'int'>

print(a.denominator)
print(type(a.denominator))
# 3
# <class 'int'>

# a.numerator = 7
# AttributeError: can't set attribute

Υπολογισμός και σύγκριση κλασμάτων (ορθολογικοί αριθμοί)

Οι αριθμητικοί τελεστές μπορούν να χρησιμοποιηθούν για τον υπολογισμό της πρόσθεσης, της αφαίρεσης κ.λπ.

result = Fraction(1, 6) ** 2 + Fraction(1, 3) / Fraction(1, 2)
print(result)
print(type(result))
# 25/36
# <class 'fractions.Fraction'>

Μπορούν επίσης να χρησιμοποιηθούν τελεστές σύγκρισης.

print(Fraction(7, 13) > Fraction(8, 15))
# True

Μετατροπή κλασμάτων σε δεκαδικούς (float)

Μπορεί να μετατρέψει κλάσματα σε δεκαδικούς με την float().

a_f = float(a)
print(a_f)
print(type(a_f))
# 0.3333333333333333
# <class 'float'>

Όταν υπολογίζεται με δεκαδικό αριθμό, μετατρέπεται αυτόματα σε τύπο float.

b = a + 0.1
print(b)
print(type(b))
# 0.43333333333333335
# <class 'float'>

Μετατροπή κλάσματος σε συμβολοσειρά (str)

Για μετατροπή σε συμβολοσειρά, χρησιμοποιήστε την str().

a_s = str(a)
print(a_s)
print(type(a_s))
# 1/3
# <class 'str'>

Λήψη προσέγγισης ορθολογικού αριθμού

Μια προσέγγιση λογικού αριθμού μπορεί να επιτευχθεί με τη μέθοδο limit_denominator() τύπου Fraction.

Επιστρέφει τον ορθολογικό αριθμό (κλάσμα) του οποίου ο παρονομαστής είναι μικρότερος ή ίσος με το όρισμα max_denominator. Εάν παραλειφθεί, max_denominator=1000000.

Προσέγγιση ανορθολογικών αριθμών όπως το pi και ο αριθμός Napier e

pi = Fraction(3.14159265359)
print(pi)
# 3537118876014453/1125899906842624

print(pi.limit_denominator(10))
print(pi.limit_denominator(100))
print(pi.limit_denominator(1000))
# 22/7
# 311/99
# 355/113

e = Fraction(2.71828182846)
print(e)
# 6121026514870223/2251799813685248

print(e.limit_denominator(10))
print(e.limit_denominator(100))
print(e.limit_denominator(1000))
# 19/7
# 193/71
# 1457/536

Μετατροπή κυκλικών δεκαδικών αριθμών σε κλάσματα

a = Fraction(0.565656565656)
print(a)
# 636872674577009/1125899906842624

print(a.limit_denominator())
# 56/99

a = Fraction(0.3333)
print(a)
# 6004199023210345/18014398509481984

print(a.limit_denominator())
print(a.limit_denominator(100))
# 3333/10000
# 1/3