Chương trình phân số đơn giản hóa trong python

Một thể hiện Phân số có thể được xây dựng từ một cặp số nguyên, từ một số hữu tỷ khác hoặc từ một chuỗi

lớp phân số. Phân số(tử số=0 , mẫu số=1)lớp phân số. Phân số(other_fraction)lớp phân số. Phân số(phao)lớp phân số. Phân số(thập phân)lớp phân số. Phân số(chuỗi)

Phiên bản đầu tiên yêu cầu tử số và mẫu số là các thể hiện của và trả về một thể hiện mới có giá trị numerator/denominator. Nếu mẫu số là

>>> from fractions import Fraction
>>> Fraction(16, -10)
Fraction(-8, 5)
>>> Fraction(123)
Fraction(123, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' -3/7 ')
Fraction(-3, 7)
>>> Fraction('1.414213 \t\n')
Fraction(1414213, 1000000)
>>> Fraction('-.125')
Fraction(-1, 8)
>>> Fraction('7e-6')
Fraction(7, 1000000)
>>> Fraction(2.25)
Fraction(9, 4)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)
0, nó sẽ tăng một. Phiên bản thứ hai yêu cầu other_fraction là một phiên bản và trả về một phiên bản có cùng giá trị. Hai phiên bản tiếp theo chấp nhận một hoặc một phiên bản và trả về một phiên bản có cùng giá trị. Lưu ý rằng do các vấn đề thông thường với dấu phẩy động nhị phân (xem ), đối số của
>>> from fractions import Fraction
>>> Fraction(16, -10)
Fraction(-8, 5)
>>> Fraction(123)
Fraction(123, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' -3/7 ')
Fraction(-3, 7)
>>> Fraction('1.414213 \t\n')
Fraction(1414213, 1000000)
>>> Fraction('-.125')
Fraction(-1, 8)
>>> Fraction('7e-6')
Fraction(7, 1000000)
>>> Fraction(2.25)
Fraction(9, 4)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)
7 không chính xác bằng 11/10 và do đó,
>>> from fractions import Fraction
>>> Fraction(16, -10)
Fraction(-8, 5)
>>> Fraction(123)
Fraction(123, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' -3/7 ')
Fraction(-3, 7)
>>> Fraction('1.414213 \t\n')
Fraction(1414213, 1000000)
>>> Fraction('-.125')
Fraction(-1, 8)
>>> Fraction('7e-6')
Fraction(7, 1000000)
>>> Fraction(2.25)
Fraction(9, 4)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)
7 không trả về
>>> from fractions import Fraction
>>> Fraction(16, -10)
Fraction(-8, 5)
>>> Fraction(123)
Fraction(123, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' -3/7 ')
Fraction(-3, 7)
>>> Fraction('1.414213 \t\n')
Fraction(1414213, 1000000)
>>> Fraction('-.125')
Fraction(-1, 8)
>>> Fraction('7e-6')
Fraction(7, 1000000)
>>> Fraction(2.25)
Fraction(9, 4)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)
9 như người ta có thể mong đợi. (Nhưng hãy xem tài liệu về phương pháp bên dưới. ) Phiên bản cuối cùng của hàm tạo mong đợi một phiên bản chuỗi hoặc unicode. Hình thức thông thường cho trường hợp này là

[sign] numerator ['/' denominator]

trong đó tùy chọn

>>> from fractions import Fraction
>>> Fraction('3.1415926535897932').limit_denominator(1000)
Fraction(355, 113)
1 có thể là '+' hoặc '-' và
>>> from fractions import Fraction
>>> Fraction('3.1415926535897932').limit_denominator(1000)
Fraction(355, 113)
2 và
>>> from fractions import Fraction
>>> Fraction('3.1415926535897932').limit_denominator(1000)
Fraction(355, 113)
3 (nếu có) là chuỗi các chữ số thập phân (có thể sử dụng dấu gạch dưới để phân định các chữ số như với các ký tự nguyên trong mã). Ngoài ra, bất kỳ chuỗi nào đại diện cho một giá trị hữu hạn và được chấp nhận bởi hàm tạo cũng được chấp nhận bởi hàm tạo. Ở cả hai dạng, chuỗi đầu vào cũng có thể có khoảng trắng ở đầu và/hoặc ở cuối. Dưới đây là một số ví dụ

>>> from fractions import Fraction
>>> Fraction(16, -10)
Fraction(-8, 5)
>>> Fraction(123)
Fraction(123, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' -3/7 ')
Fraction(-3, 7)
>>> Fraction('1.414213 \t\n')
Fraction(1414213, 1000000)
>>> Fraction('-.125')
Fraction(-1, 8)
>>> Fraction('7e-6')
Fraction(7, 1000000)
>>> Fraction(2.25)
Fraction(9, 4)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)

Lớp kế thừa từ lớp cơ sở trừu tượng và thực hiện tất cả các phương thức và hoạt động từ lớp đó. các trường hợp có thể băm được và nên được coi là bất biến. Ngoài ra, có các thuộc tính và phương thức sau

Đã thay đổi trong phiên bản 3. 2. Hàm khởi tạo hiện chấp nhận và thể hiện.

Đã thay đổi trong phiên bản 3. 9. Hàm này hiện được dùng để chuẩn hóa tử số và mẫu số. luôn trả về một loại. Trước đây, loại GCD phụ thuộc vào tử số và mẫu số.

Đã thay đổi trong phiên bản 3. 11. Dấu gạch dưới hiện được phép khi tạo một phiên bản từ một chuỗi, tuân theo các quy tắc PEP 515.

Đã thay đổi trong phiên bản 3. 11. thực hiện

>>> from math import pi, cos
>>> Fraction(cos(pi/3))
Fraction(4503599627370497, 9007199254740992)
>>> Fraction(cos(pi/3)).limit_denominator()
Fraction(1, 2)
>>> Fraction(1.1).limit_denominator()
Fraction(11, 10)
8 ngay bây giờ để đáp ứng kiểm tra phiên bản
>>> from math import pi, cos
>>> Fraction(cos(pi/3))
Fraction(4503599627370497, 9007199254740992)
>>> Fraction(cos(pi/3)).limit_denominator()
Fraction(1, 2)
>>> Fraction(1.1).limit_denominator()
Fraction(11, 10)
9.

tử số

Tử số của Phân số ở số hạng bé nhất

mẫu số

Mẫu số của Phân số ở số hạng bé nhất

as_integer_ratio()

Trả về một bộ gồm hai số nguyên, có tỷ lệ bằng Phân số và có mẫu số dương

Mới trong phiên bản 3. 8

classmethod from_float(flt)

Hàm tạo thay thế chỉ chấp nhận các thể hiện của hoặc. Lưu ý rằng

>>> from math import floor
>>> floor(Fraction(355, 113))
3
2 không cùng giá trị với
>>> from math import floor
>>> floor(Fraction(355, 113))
3
3

Ghi chú

Từ Python 3. 2 trở đi, bạn cũng có thể xây dựng một thể hiện trực tiếp từ một

phương pháp phân lớp from_decimal(dec)

Hàm tạo thay thế chỉ chấp nhận các thể hiện của hoặc

Ghi chú

Từ Python 3. 2 trở đi, bạn cũng có thể xây dựng một phiên bản trực tiếp từ một phiên bản

limit_denominator(max_denominator=1000000)

Tìm và trả về giá trị gần nhất với fractions1 có mẫu số nhiều nhất là max_denominator. Phương pháp này rất hữu ích để tìm các xấp xỉ hợp lý cho một số dấu phẩy động đã cho

>>> from fractions import Fraction
>>> Fraction('3.1415926535897932').limit_denominator(1000)
Fraction(355, 113)

hoặc để khôi phục một số hữu tỷ được biểu thị dưới dạng số float

>>> from math import pi, cos
>>> Fraction(cos(pi/3))
Fraction(4503599627370497, 9007199254740992)
>>> Fraction(cos(pi/3)).limit_denominator()
Fraction(1, 2)
>>> Fraction(1.1).limit_denominator()
Fraction(11, 10)

__floor__()

Trả về giá trị lớn nhất fractions3. Phương pháp này cũng có thể được truy cập thông qua chức năng

>>> from math import floor
>>> floor(Fraction(355, 113))
3

__ceil__()

Trả về ít nhất fractions6. Phương pháp này cũng có thể được truy cập thông qua chức năng

__round__()__round__(nchữ số)

Phiên bản đầu tiên trả về giá trị gần nhất với fractions1, làm tròn một nửa thành số chẵn. Phiên bản thứ hai làm tròn fractions1 đến bội số gần nhất của fractions1 (về mặt logic, nếu fractions2 âm), một lần nữa làm tròn một nửa về số chẵn. Phương pháp này cũng có thể được truy cập thông qua chức năng