Tôi đang cố gắng thêm hai phân số vào Python
Nếu đầu vào 1/4 + 1/4, tôi đang mong đợi 1/2 kết quả
Tôi đã xây dựng một lớp phân số với phương pháp __add__
để bổ sung
from fractions import gcd
class fraction:
def __init__[self, numerator, denominator]:
self.num = numerator
self.deno = denominator
def __add__[self, other]:
self.sumOfn = self.num + other.num
self.sumOfd = gcd[self.deno,other.deno]
return[self.sumOfn, self.sumOfd]
print[fraction[1,4]+fraction[1,4]]
Tuy nhiên, tôi nhận được 2,4 làm đầu ra, thực sự là 1/2, không đơn giản hóa. Làm thế nào tôi có thể khắc phục vấn đề đó?
Mã nguồn: lib/phân số.py Lib/fractions.py
Mô -đun fractions
cung cấp hỗ trợ cho số học số hợp lý.
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ợp lý khác hoặc từ một chuỗi.
fractions.
Fraction
[other_fraction] class fractions.
Fraction
[float] class fractions.
Fraction
[decimal] class fractions.
Fraction
[string]Phiên bản đầu tiên yêu cầu tử số và mẫu số là các phiên bản là
[sign] numerator ['/' denominator]8 và trả về một phiên bản
[sign] numerator ['/' denominator]9 mới với giá trị
>>> 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ế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]1, nó sẽ tăng
>>> 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]2. Phiên bản thứ hai yêu cầu các trường hợp khác là một thể hiện của
[sign] numerator ['/' denominator]8 và trả về một thể hiện
[sign] numerator ['/' denominator]9 với cùng một giá trị. Hai phiên bản tiếp theo chấp nhận một 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]5 hoặc
>>> 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]6 và trả về một thể hiện
[sign] numerator ['/' denominator]9 với chính xác cùng một giá trị. Lưu ý rằng do các vấn đề thông thường với điểm nổi nhị phân [xem Số học điểm nổi: Các vấn đề và giới hạn], đố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]8 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]8 không trả lại
>>> from fractions import Fraction >>> Fraction['3.1415926535897932'].limit_denominator[1000] Fraction[355, 113]0 như người ta có thể mong đợi. [Nhưng xem tài liệu cho phương thức
>>> from fractions import Fraction >>> Fraction['3.1415926535897932'].limit_denominator[1000] Fraction[355, 113]1 bên dưới.] Phiên bản cuối cùng của hàm tạo mong đợi một trường hợp chuỗi hoặc unicode. Mẫu thông thường cho trường hợp này là:Floating Point Arithmetic: Issues and Limitations], the argument to
>>> 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]8 is not exactly equal to 11/10, and so
>>> 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]8 does not return
>>> from fractions import Fraction >>> Fraction['3.1415926535897932'].limit_denominator[1000] Fraction[355, 113]0 as one might expect. [But see the documentation for the
>>> from fractions import Fraction >>> Fraction['3.1415926535897932'].limit_denominator[1000] Fraction[355, 113]1 method below.] The last version of the constructor expects a string or unicode instance. The usual form for this instance is:
[sign] numerator ['/' denominator]
trong đó
>>> from fractions import Fraction >>> Fraction['3.1415926535897932'].limit_denominator[1000] Fraction[355, 113]2 tùy chọn có thể là ‘+hoặc hoặc‘-và và
>>> from fractions import Fraction >>> Fraction['3.1415926535897932'].limit_denominator[1000] Fraction[355, 113]3 và
>>> from fractions import Fraction >>> Fraction['3.1415926535897932'].limit_denominator[1000] Fraction[355, 113]4 [nếu có] là các chuỗi của các chữ số thập phân. 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
>>> 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]5 cũng được chấp nhận bởi hàm tạo
[sign] numerator ['/' denominator]9. Trong cả hai hình thức, chuỗi đầu vào cũng có thể có khoảng trắng dẫn đầu và/hoặc dấu vết. 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
[sign] numerator ['/' denominator]9 kế thừa từ lớp cơ sở trừu tượng
[sign] numerator ['/' denominator]8 và thực hiện tất cả các phương pháp và hoạt động từ lớp đó. Các trường hợp
[sign] numerator ['/' denominator]9 có thể băm, và nên được coi là bất biến. Ngoài ra,
[sign] numerator ['/' denominator]9 có các thuộc tính và phương pháp sau:
Đã thay đổi trong phiên bản 3.9: Hàm >>> 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]
1 hiện được sử dụng để bình thường hóa tử số và mẫu số. >>> 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]
1 Luôn trả về loại >>> 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]
3. Trước đây, loại GCD phụ thuộc vào tử số và mẫu số.The
>>> 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]1 function is now used to normalize the numerator and denominator.
>>> 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]1 always return a
>>> 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]3 type. Previously, the GCD type depended on numerator and denominator. ________ 44¶
Tử số của phân số trong thời hạn thấp nhất.
________ 45¶Mẫu số của phân số trong thời hạn thấp nhất.
Trả về một tuple của hai số nguyên, có tỷ lệ bằng phân số và với mẫu số dương.
Mới trong phiên bản 3.8.
ClassMethod ________ 47 [FLT] ¶[flt]¶Hàm tạo thay thế chỉ chấp nhận các trường hợp
>>> 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]5 hoặc
>>> 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. Hãy coi chừng
>>> from math import floor >>> floor[Fraction[355, 113]] 30 không giống với giá trị
>>> from math import floor >>> floor[Fraction[355, 113]] 31.
Ghi chú
Từ Python 3.2 trở đi, bạn cũng có thể xây dựng một ví dụ
[sign] numerator ['/' denominator]9 trực tiếp từ
>>> 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]5. ClassMethod ________ 54 [tháng 12] ¶[dec]¶
Hàm tạo thay thế chỉ chấp nhận các trường hợp
>>> 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]6 hoặc
>>> 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. ________ 57 [max_denominator = 1000000] ¶[max_denominator=1000000]¶
Tìm và trả về
[sign] numerator ['/' denominator]9 gần nhất đến
>>> from math import floor >>> floor[Fraction[355, 113]] 39 có mẫu số ở hầu hết 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ố điểm nổi nhất định:
>>> from fractions import Fraction >>> Fraction['3.1415926535897932'].limit_denominator[1000] Fraction[355, 113]
hoặc để phục hồi một số hợp lý mà LỚN đại diện cho một chiếc phao:
>>> 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]________ 60 [][]¶
Trả về
>>> 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]3 lớn nhất
__add__
2. Phương pháp này cũng có thể được truy cập thông qua hàm __add__
3:>>> from math import floor >>> floor[Fraction[355, 113]] 3________ 64 [][]¶
Trả về ít nhất
>>> 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]3
__add__
6. Phương pháp này cũng có thể được truy cập thông qua hàm __add__
7. ________ 68 [] ____ ____ 68 [ndigits][]¶ __add__
8[ndigits]Phiên bản đầu tiên trả lại
>>> 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]3 gần nhất đến
>>> from math import floor >>> floor[Fraction[355, 113]] 39, làm tròn một nửa vào chẵn. Phiên bản thứ hai làm tròn
>>> from math import floor >>> floor[Fraction[355, 113]] 39 đến bội số gần nhất của
fractions
3 [về mặt logic, nếu fractions
4 là âm], một lần nữa làm tròn một nửa về phía chẵn. Phương pháp này cũng có thể được truy cập thông qua hàm fractions
5.Xem thêm
Mô -đunfractions
6Các lớp cơ sở trừu tượng tạo nên tháp số.