Con số hợp lý trăn

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
69

Show

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
70

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
71

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
72

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
73

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
74

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
75

Mô-đun

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
8 trong Python được cho là một trong những phần tử ít được sử dụng nhất của thư viện chuẩn. Mặc dù nó có thể không được nhiều người biết đến, nhưng đây là một công cụ hữu ích cần có vì nó có thể giúp giải quyết những thiếu sót của số học dấu phẩy động trong hệ nhị phân. Điều đó rất cần thiết nếu bạn dự định làm việc với dữ liệu tài chính hoặc nếu bạn yêu cầu độ chính xác vô hạn cho các phép tính của mình

Đến cuối hướng dẫn này, bạn sẽ thấy một vài ví dụ thực hành trong đó phân số là lựa chọn phù hợp và tinh tế nhất. Bạn cũng sẽ tìm hiểu về những điểm yếu của họ và cách tận dụng chúng một cách tốt nhất trong quá trình thực hiện

Trong hướng dẫn này, bạn sẽ học cách

  • Chuyển đổi giữa ký hiệu thập phân và phân số
  • Thực hiện phép tính số hữu tỉ
  • Xấp xỉ số vô tỉ
  • Biểu diễn phân số chính xác với độ chính xác vô hạn
  • Biết khi nào nên chọn
    >>> one_third = Fraction(1, 3)
    
    >>> Fraction(one_third, 3)
    Fraction(1, 9)
    
    >>> Fraction(3, one_third)
    Fraction(9, 1)
    
    >>> Fraction(one_third, one_third)
    Fraction(1, 1)
    
    9 thay vì
    >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    0 hoặc
    >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    1

Phần lớn hướng dẫn này đề cập đến mô-đun

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
8, bản thân mô-đun này không yêu cầu kiến ​​thức chuyên sâu về Python ngoài sự hiểu biết về các loại số của nó. Tuy nhiên, bạn sẽ ở một nơi tốt để làm việc với tất cả các ví dụ mã sau đây nếu bạn quen thuộc với các khái niệm nâng cao hơn như mô-đun
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
3 tích hợp sẵn của Python, mô-đun
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
4 và trình tạo. Bạn nên cảm thấy thoải mái với những chủ đề này nếu bạn muốn tận dụng tối đa hướng dẫn này

Tiền thưởng miễn phí. 5 Suy nghĩ về Làm chủ Python, một khóa học miễn phí dành cho các nhà phát triển Python cho bạn thấy lộ trình và tư duy mà bạn sẽ cần để đưa các kỹ năng Python của mình lên một tầm cao mới

Ký hiệu thập phân và phân số

Cùng ôn lại ký ức để nhớ lại kiến ​​thức học đường của bạn về các con số và tránh những nhầm lẫn có thể xảy ra. Có bốn khái niệm đang diễn ra ở đây

  1. Các loại số trong toán học
  2. hệ thống số
  3. Ký hiệu của số
  4. Kiểu dữ liệu số trong Python

Bây giờ, bạn sẽ có cái nhìn tổng quan nhanh về từng loại này để hiểu rõ hơn về mục đích của loại dữ liệu

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 trong Python

Loại bỏ các quảng cáo

Phân loại số

Nếu bạn không nhớ phân loại các số, đây là phần bồi dưỡng nhanh

Con số hợp lý trăn
Các loại số

Có nhiều loại số khác trong toán học, nhưng đây là những loại phù hợp nhất trong cuộc sống hàng ngày. Ở trên cùng, bạn sẽ tìm thấy các số phức bao gồm số ảo và số thực. Số thực bao gồm các số hữu tỉ và vô tỉ. Cuối cùng, số hữu tỉ chứa số nguyên và số tự nhiên

Hệ thống số và ký hiệu

Đã có nhiều hệ thống biểu thị số trực quan qua nhiều thế kỷ. Ngày nay, hầu hết mọi người sử dụng một hệ thống chữ số theo vị trí dựa trên các ký hiệu Hindu-Ả Rập. Bạn có thể chọn bất kỳ cơ sở hoặc cơ số nào cho một hệ thống như vậy. Tuy nhiên, trong khi mọi người thích hệ thống thập phân (cơ sở-10), máy tính hoạt động tốt nhất trong hệ thống nhị phân (cơ sở-2)

Trong chính hệ thập phân, bạn có thể biểu diễn một số số bằng các ký hiệu thay thế

  • Số thập phân. 0. 75
  • phân số. ¾

Không cái nào trong số này tốt hơn hoặc chính xác hơn cái kia. Biểu thị một số trong ký hiệu thập phân có lẽ trực quan hơn vì nó giống tỷ lệ phần trăm. So sánh các số thập phân cũng đơn giản hơn vì chúng đã có mẫu số chung—cơ số của hệ thống. Cuối cùng, các số thập phân có thể giao tiếp chính xác bằng cách giữ các số 0 ở cuối và ở đầu

Mặt khác, phân số thuận tiện hơn khi thực hiện đại số ký hiệu bằng tay, đó là lý do tại sao chúng chủ yếu được sử dụng trong trường học. Nhưng bạn có thể nhớ lại lần cuối cùng bạn sử dụng phân số không?

Ký hiệu phân số thường chỉ được liên kết với các số hữu tỷ. Rốt cuộc, chính định nghĩa của một số hữu tỷ nói rằng bạn có thể biểu thị nó dưới dạng thương hoặc phân số của hai số nguyên miễn là mẫu số khác không. Tuy nhiên, đó không phải là toàn bộ câu chuyện khi bạn tính các phân số liên tục vô hạn có thể xấp xỉ các số vô tỷ

Con số hợp lý trăn

Các số vô tỷ luôn có khai triển thập phân không tận cùng và không lặp lại. Ví dụ: khai triển thập phân của số pi (π) không bao giờ hết chữ số dường như có phân phối ngẫu nhiên. Nếu bạn vẽ biểu đồ của chúng, thì mỗi chữ số sẽ có tần số gần giống nhau

Mặt khác, hầu hết các số hữu tỉ đều có khai triển thập phân có tận cùng. Tuy nhiên, một số có thể có phần mở rộng thập phân định kỳ vô hạn với một hoặc nhiều chữ số được lặp lại trong một khoảng thời gian. Các chữ số lặp lại thường được biểu thị bằng dấu chấm lửng (0. 33333…) trong ký hiệu thập phân. Bất kể việc mở rộng số thập phân của chúng, các số hữu tỷ như số đại diện cho một phần ba luôn trông thanh lịch và nhỏ gọn trong ký hiệu phân số

Kiểu dữ liệu số trong Python

Các số có phần mở rộng thập phân vô hạn gây ra lỗi làm tròn khi được lưu trữ dưới dạng kiểu dữ liệu dấu phẩy động trong bộ nhớ máy tính, bản thân nó là hữu hạn. Để làm cho vấn đề trở nên tồi tệ hơn, thường không thể biểu diễn chính xác các số bằng cách chấm dứt mở rộng thập phân ở dạng nhị phân

Đó được gọi là lỗi biểu diễn dấu phẩy động, ảnh hưởng đến tất cả các ngôn ngữ lập trình, bao gồm cả Python. Mọi lập trình viên đều phải đối mặt với vấn đề này sớm hay muộn. Ví dụ: bạn không thể sử dụng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 trong các ứng dụng như ngân hàng, nơi các số phải được lưu trữ và thực hiện mà không làm giảm độ chính xác

Python's

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 là một trong những giải pháp cho những trở ngại này. Trong khi nó đại diện cho một số hữu tỉ, tên
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
8 đã đại diện cho một lớp cơ sở trừu tượng trong mô-đun
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
9. Mô-đun
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
9 định nghĩa một hệ thống phân cấp các kiểu dữ liệu số trừu tượng để mô hình hóa việc phân loại các số trong toán học

Con số hợp lý trăn
Nhập phân cấp cho các số trong Python

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 là một phân lớp trực tiếp và cụ thể của
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
8, cung cấp triển khai đầy đủ cho các số hữu tỷ trong Python. Các kiểu tích phân như
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
53 và
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
54 cũng xuất phát từ
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
8, nhưng chúng cụ thể hơn

Với nền tảng lý thuyết này, đã đến lúc tạo phân số đầu tiên của bạn

Loại bỏ các quảng cáo

Tạo một phân số Python từ các loại dữ liệu khác nhau

Không giống như

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
53 hoặc
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1, phân số không phải là kiểu dữ liệu tích hợp sẵn trong Python, nghĩa là bạn phải nhập một mô-đun tương ứng từ thư viện chuẩn để sử dụng chúng. Tuy nhiên, sau khi vượt qua bước bổ sung này, bạn sẽ thấy rằng phân số chỉ đại diện cho một loại số khác mà bạn có thể tự do kết hợp với các số và toán tử khác trong các biểu thức số học

Ghi chú. Phân số được triển khai bằng Python thuần túy và chậm hơn nhiều so với số dấu phẩy động có thể chạy trực tiếp trên phần cứng của bạn. Trong hầu hết các trường hợp cần tính toán nhiều, hiệu suất quan trọng hơn độ chính xác. Mặt khác, nếu bạn cần cả hiệu suất và độ chính xác, thì hãy xem xét một giải pháp thay thế thả xuống cho các phân số được gọi là quicktions có thể tăng tốc độ thực thi của bạn ở một mức độ nào đó

Có một số cách để tạo một phân số trong Python và tất cả chúng đều liên quan đến việc sử dụng lớp

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9. Đó là thứ duy nhất bạn cần nhập từ mô-đun
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
8. Hàm tạo của lớp chấp nhận không, một hoặc hai đối số thuộc nhiều loại khác nhau

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
2

Khi bạn gọi hàm tạo của lớp mà không có đối số, nó sẽ tạo ra một phân số mới biểu thị số 0. Hương vị một đối số cố gắng chuyển đổi giá trị của loại dữ liệu khác thành phân số. Truyền vào đối số thứ hai làm cho hàm tạo mong đợi một tử số và mẫu số, phải là các thể hiện của lớp

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
8 hoặc hậu duệ của nó

Lưu ý rằng bạn phải

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
401 một phân số để hiển thị biểu diễn văn bản thân thiện với con người bằng ký tự gạch chéo (
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
402) giữa tử số và mẫu số. Nếu không, nó sẽ quay trở lại biểu diễn chuỗi rõ ràng hơn một chút được tạo thành từ một đoạn mã Python. Bạn sẽ học cách chuyển đổi phân số thành chuỗi sau trong hướng dẫn này

số hữu tỷ

Khi bạn gọi hàm tạo

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
403 với hai đối số, cả hai đối số phải là số hữu tỷ chẳng hạn như số nguyên hoặc phân số khác. Nếu tử số hoặc mẫu số không phải là một số hữu tỷ, thì bạn sẽ không thể tạo một phân số mới

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
4

Thay vào đó, bạn nhận được một

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
404. Mặc dù
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
405 là một số hữu tỷ trong toán học, nhưng nó không được coi là như vậy bởi Python. Đó là bởi vì giá trị được lưu trữ dưới dạng kiểu dữ liệu dấu phẩy động, quá rộng và có thể được sử dụng để biểu thị bất kỳ số thực nào

Ghi chú. Kiểu dữ liệu dấu phẩy động không thể lưu trữ chính xác các số vô tỷ trong bộ nhớ của máy tính do việc mở rộng số thập phân không kết thúc và không lặp lại của chúng. Tuy nhiên, trên thực tế, đó không phải là vấn đề lớn vì các phép tính gần đúng của chúng thường sẽ đủ tốt. Cách thực sự đáng tin cậy duy nhất để làm như vậy sẽ yêu cầu sử dụng tính toán ký hiệu trên các ký hiệu thông thường như π

Tương tự, bạn không thể tạo một phân số có mẫu số bằng 0 vì điều đó sẽ dẫn đến phép chia cho 0, không xác định và không có ý nghĩa gì trong toán học

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0

Python tăng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
406. Tuy nhiên, khi bạn chỉ định một tử số hợp lệ và một mẫu số hợp lệ, chúng sẽ tự động được chuẩn hóa cho bạn miễn là chúng có một ước số chung

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
2

Cả hai độ lớn được đơn giản hóa bởi ước số chung lớn nhất (GCD) của chúng, lần lượt là ba và mười hai. Quá trình chuẩn hóa cũng tính đến dấu trừ khi bạn xác định phân số âm

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
3

Cho dù bạn đặt dấu trừ trước hàm tạo hay trước một trong hai đối số, để thống nhất, Python sẽ luôn kết hợp dấu của một phân số với tử số của nó. Hiện có một cách để vô hiệu hóa hành vi này, nhưng nó không có giấy tờ và có thể bị xóa trong tương lai

Thông thường, bạn sẽ định nghĩa phân số là thương của hai số nguyên. Bất cứ khi nào bạn chỉ cung cấp một số nguyên, Python sẽ biến số đó thành một phân số không chính xác bằng cách giả sử mẫu số là

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
407

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
5

Ngược lại, nếu bạn bỏ qua cả hai đối số, tử số sẽ là

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
408

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
7

Tuy nhiên, không phải lúc nào bạn cũng phải cung cấp số nguyên cho tử số và mẫu số. Tài liệu nói rằng chúng có thể là bất kỳ số hữu tỷ nào, kể cả các phân số khác

>>>

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)

Trong mỗi trường hợp, kết quả là bạn sẽ nhận được một phân số, mặc dù đôi khi chúng biểu thị các giá trị số nguyên như 9 và 1. Sau này, bạn sẽ thấy cách chuyển đổi phân số sang các loại dữ liệu khác

Điều gì xảy ra nếu bạn cung cấp cho hàm tạo

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 một đối số duy nhất cũng là một phân số?

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False

Bạn đang nhận được cùng một giá trị, nhưng đó là một bản sao khác biệt của phần đầu vào. Đó là bởi vì việc gọi hàm tạo luôn tạo ra một thể hiện mới, trùng khớp với thực tế là phân số là bất biến, giống như các kiểu số khác trong Python

Loại bỏ các quảng cáo

Số dấu phẩy động và số thập phân

Cho đến nay, bạn chỉ sử dụng số hữu tỷ để tạo phân số. Xét cho cùng, phiên bản hai đối số của hàm tạo

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 yêu cầu cả hai số đều là trường hợp của
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
8. Tuy nhiên, đó không phải là trường hợp của hàm tạo một đối số, nó sẽ vui vẻ chấp nhận bất kỳ số thực nào và thậm chí cả một giá trị không phải là số, chẳng hạn như một chuỗi

Hai ví dụ điển hình về kiểu dữ liệu số thực trong Python là

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 và
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
413. Mặc dù chỉ cái sau mới có thể biểu thị chính xác các số hữu tỷ, nhưng cả hai đều có thể xấp xỉ các số vô tỷ tốt. Liên quan đến điều này, nếu bạn đang thắc mắc, thì
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 tương tự như
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 về mặt này vì nó là hậu duệ của
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
416

______20 có phải là số thực không?Hiển thị/Ẩn

Không giống như

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 hoặc
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9, lớp
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 không được đăng ký chính thức như một lớp con của
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
421 mặc dù đã triển khai các phương thức của nó

>>>

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
5

Đó là cố ý vì các số dấu phẩy động thập phân không chơi tốt với các đối tác nhị phân của chúng

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
40

Mặt khác, thay thế

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 bằng một
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 tương đương sẽ mang lại kết quả
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 trong ví dụ trên

Trước Python 3. 2, bạn chỉ có thể tạo các phân số từ các số thực bằng các phương thức của lớp

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
425 và
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
426. Mặc dù không được dùng nữa, nhưng ngày nay chúng trở nên dư thừa vì hàm tạo
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 có thể lấy trực tiếp cả hai loại dữ liệu làm đối số

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
41

Cho dù bạn tạo đối tượng

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 từ đối tượng
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 hay
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0, giá trị của chúng đều giống nhau. Bạn đã thấy một phân số được tạo từ một giá trị dấu phẩy động trước đây

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
42

Kết quả là cùng một số được biểu thị bằng ký hiệu phân số. Tuy nhiên, mã này hoạt động như mong đợi chỉ do trùng hợp ngẫu nhiên. Trong hầu hết các trường hợp, bạn sẽ không nhận được giá trị như mong muốn do lỗi biểu diễn ảnh hưởng đến số

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1, cho dù chúng có hợp lý hay không

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
43

Ái chà. Điều gì đã xảy ra ở đây?

Hãy phá vỡ nó trong chuyển động chậm. Số trước đó, có thể được biểu thị bằng 0. 75 hoặc ¾, cũng có thể được biểu thị bằng tổng của ½ và ¼, là lũy thừa âm của 2 có biểu diễn nhị phân chính xác. Mặt khác, số ⅒ chỉ có thể được tính gần đúng bằng cách mở rộng lặp lại không kết thúc các chữ số nhị phân

Con số hợp lý trăn

Vì chuỗi nhị phân cuối cùng phải kết thúc do bộ nhớ hữu hạn nên phần đuôi của nó sẽ bị làm tròn. Theo mặc định, Python chỉ hiển thị các chữ số có nghĩa nhất được xác định trong

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
432, nhưng bạn có thể định dạng một số dấu phẩy động với một số chữ số tùy ý nếu bạn muốn

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
44

Khi bạn chuyển một số

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 hoặc một số
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 cho phương thức khởi tạo
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9, nó sẽ gọi phương thức
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
436 của chúng để thu được một bộ gồm hai số nguyên bất khả quy có tỷ lệ cho phép mở rộng thập phân chính xác giống như đối số đầu vào. Hai số này sau đó được gán cho tử số và mẫu số của phân số mới của bạn

Ghi chú. Kể từ Python 3. 8,

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 cũng triển khai
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
436 để bổ sung cho các kiểu số khác. Ví dụ, nó có thể giúp chuyển đổi phân số của bạn thành một bộ

Bây giờ, bạn có thể ghép nối hai con số lớn này đến từ đâu

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
45

Nếu bạn rút máy tính bỏ túi ra và bấm những con số này vào, thì bạn sẽ nhận được 0. 1 là kết quả của phép chia. Tuy nhiên, nếu bạn chia chúng bằng tay hoặc sử dụng một công cụ như WolframAlpha, thì bạn sẽ nhận được 55 chữ số thập phân mà bạn đã thấy trước đó

Có một cách để tìm các giá trị gần đúng của phân số của bạn có nhiều giá trị thực tế hơn. Ví dụ, bạn có thể sử dụng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
439, bạn sẽ tìm hiểu thêm về điều này sau trong hướng dẫn này

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
46

Tuy nhiên, điều này có thể không phải lúc nào cũng cho bạn kết quả gần đúng nhất. Điểm mấu chốt là bạn không bao giờ nên cố gắng tạo các phân số trực tiếp từ các số thực, chẳng hạn như

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 nếu bạn muốn tránh các lỗi làm tròn có thể xảy ra. Ngay cả lớp
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 cũng có thể dễ bị như vậy nếu bạn không đủ cẩn thận

Dù sao, phân số cho phép bạn truyền đạt ký hiệu thập phân một cách chính xác nhất bằng một chuỗi trong hàm tạo của chúng

Loại bỏ các quảng cáo

Dây

Có hai định dạng chuỗi mà hàm tạo

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 chấp nhận, tương ứng với ký hiệu thập phân và phân số

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
47

Cả hai ký hiệu có thể tùy ý có dấu cộng (

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
443) hoặc dấu trừ (
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
444), trong khi số thập phân có thể bao gồm thêm số mũ trong trường hợp bạn muốn sử dụng ký hiệu khoa học

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
48

Sự khác biệt duy nhất giữa hai kết quả là một âm tính và một dương tính

Khi bạn sử dụng ký hiệu phân số, bạn không thể sử dụng các ký tự khoảng trắng xung quanh ký tự gạch chéo (

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
402)

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
49

Để biết chính xác chuỗi nào hợp lệ hay không, bạn có thể khám phá biểu thức chính quy trong mã nguồn của mô-đun. Hãy nhớ tạo các phân số từ một chuỗi hoặc một đối tượng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 được khởi tạo chính xác thay vì giá trị
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 để bạn có thể duy trì độ chính xác tối đa

Bây giờ bạn đã tạo được một vài phân số, bạn có thể tự hỏi chúng có thể làm gì cho bạn ngoài nhóm hai số. Đó là một câu hỏi tuyệt vời

Kiểm tra một phân số Python

Lớp cơ sở trừu tượng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
8 định nghĩa hai thuộc tính chỉ đọc để truy cập tử số và mẫu số của một phân số

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
00

Vì phân số là bất biến nên bạn không thể thay đổi trạng thái bên trong của chúng

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
01

Nếu bạn thử gán một giá trị mới cho một trong các thuộc tính của phân số thì bạn sẽ gặp lỗi. Trên thực tế, bạn phải tạo một phân số mới bất cứ khi nào bạn muốn sửa đổi một phân số. Ví dụ: để đảo ngược phân số của bạn, bạn có thể gọi

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
436 để lấy một bộ và sau đó sử dụng cú pháp cắt để đảo ngược các phần tử của nó

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
02

Toán tử ngôi sao một ngôi (

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
450) giải nén bộ dữ liệu bị đảo ngược của bạn và chuyển các phần tử của nó tới hàm tạo
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9

Một phương pháp hữu ích khác đi kèm với mọi phân số cho phép bạn tìm gần đúng hữu tỷ nhất với một số được cho trong ký hiệu thập phân. Đó là phương pháp

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
439 mà bạn đã đề cập trước đó trong hướng dẫn này. Bạn có thể tùy ý yêu cầu mẫu số lớn nhất cho phép tính gần đúng của mình

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
03

Ước tính ban đầu có thể không thuận tiện nhất để sử dụng, nhưng nó trung thực nhất. Phương pháp này cũng có thể giúp bạn khôi phục một số hữu tỷ được lưu trữ dưới dạng kiểu dữ liệu dấu phẩy động. Hãy nhớ rằng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 có thể không đại diện chính xác cho tất cả các số hữu tỷ, ngay cả khi chúng có các khai triển thập phân có tận cùng

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
04

Bạn sẽ nhận thấy một kết quả khác trên dòng được đánh dấu so với khối mã trước đó, mặc dù đối tượng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 trông giống như chuỗi ký tự mà bạn đã chuyển cho hàm tạo trước đó. Sau đó, bạn sẽ khám phá một ví dụ về cách sử dụng
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
439 để tìm các giá trị gần đúng của các số vô tỷ

Loại bỏ các quảng cáo

Chuyển đổi phân số Python sang các loại dữ liệu khác

Bạn đã học cách tạo phân số từ các kiểu dữ liệu sau

  • >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    456
  • >>> one_third = Fraction(1, 3)
    
    >>> Fraction(one_third, 3)
    Fraction(1, 9)
    
    >>> Fraction(3, one_third)
    Fraction(9, 1)
    
    >>> Fraction(one_third, one_third)
    Fraction(1, 1)
    
    53
  • >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    1
  • >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    413
  • >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    460

Còn ngược lại thì sao?

Số dấu phẩy động và số nguyên

Chuyển đổi giữa các kiểu dữ liệu gốc trong Python thường liên quan đến việc gọi một trong các hàm tích hợp sẵn, chẳng hạn như

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
462 hoặc
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
463 trên một đối tượng. Các chuyển đổi này hoạt động miễn là đối tượng triển khai các phương thức đặc biệt tương ứng, chẳng hạn như
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
464 hoặc
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
465. Các phân số tình cờ chỉ kế thừa cái sau từ lớp cơ sở trừu tượng
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
8

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
05

Bạn không được gọi trực tiếp các phương thức đặc biệt trên các đối tượng, nhưng nó hữu ích cho mục đích trình diễn. Tại đây, bạn sẽ nhận thấy rằng các phân số chỉ triển khai

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
465 chứ không phải
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
464

Khi bạn điều tra mã nguồn, bạn sẽ nhận thấy rằng phương pháp

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
465 chia tử số của một phân số cho mẫu số của nó một cách thuận tiện để nhận được một số dấu phẩy động

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
06

Hãy nhớ rằng việc chuyển phiên bản

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 thành phiên bản
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 có thể sẽ dẫn đến chuyển đổi bị mất, nghĩa là bạn có thể nhận được một con số hơi sai

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
07

Mặc dù phân số không cung cấp khả năng triển khai chuyển đổi số nguyên, nhưng tất cả các số thực đều có thể bị cắt bớt, đây là phương án dự phòng cho hàm

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
462

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
08

Bạn sẽ khám phá ra một vài phương pháp liên quan khác trong phần về làm tròn phân số sau này

số thập phân

Nếu bạn thử tạo một số

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 từ một phiên bản
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9, thì bạn sẽ nhanh chóng phát hiện ra rằng việc chuyển đổi trực tiếp như vậy là không thể

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
09

Khi bạn thử, bạn nhận được một

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
404. Tuy nhiên, vì một phân số đại diện cho một phép chia, nên bạn có thể bỏ qua giới hạn đó bằng cách chỉ bọc một trong các số bằng
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 và chia chúng theo cách thủ công

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
20

Không giống như

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 nhưng tương tự như
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9, kiểu dữ liệu
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 không có lỗi biểu diễn dấu phẩy động. Vì vậy, khi bạn chuyển đổi một số hữu tỷ không thể biểu diễn chính xác ở dạng dấu phẩy động nhị phân, bạn sẽ giữ được độ chính xác của số đó

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
21

Đồng thời, các số hữu tỷ với phần mở rộng thập phân lặp lại không kết thúc sẽ dẫn đến mất độ chính xác khi chuyển đổi từ ký hiệu phân số sang thập phân

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
22

Đó là bởi vì có vô số phần ba trong phần mở rộng thập phân của một phần ba, hoặc

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
480, trong khi loại
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 có độ chính xác cố định. Theo mặc định, nó chỉ lưu trữ hai mươi tám chữ số thập phân. Bạn có thể điều chỉnh nó nếu muốn, nhưng nó sẽ là hữu hạn

Loại bỏ các quảng cáo

Dây

Biểu diễn chuỗi của phân số tiết lộ giá trị của chúng bằng cách sử dụng ký hiệu phân số quen thuộc, trong khi biểu diễn chính tắc của chúng xuất ra một đoạn mã Python bao gồm lệnh gọi hàm tạo

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
23

Cho dù bạn sử dụng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
483 hay
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
484, kết quả là một chuỗi, nhưng nội dung của chúng khác nhau

Không giống như các loại số khác, phân số không hỗ trợ định dạng chuỗi trong Python

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
24

Nếu bạn thử, thì bạn sẽ nhận được một

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
404. Đó có thể là một vấn đề nếu bạn muốn tham khảo một phiên bản
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 trong mẫu chuỗi để điền vào chỗ dành sẵn, chẳng hạn. Mặt khác, bạn có thể nhanh chóng khắc phục điều này bằng cách chuyển đổi phân số thành số dấu phẩy động, đặc biệt là khi bạn không cần quan tâm đến độ chính xác trong trường hợp như vậy

Nếu bạn đang làm việc trong Jupyter Notebook, thì bạn có thể muốn hiển thị các công thức LaTeX dựa trên các phân số của mình thay vì biểu diễn văn bản thông thường của chúng. Để làm điều đó, bạn phải vá kiểu dữ liệu

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 bằng cách thêm một phương thức mới,
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
488, mà Jupyter Notebook nhận ra

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
25

Nó bọc một phần đánh dấu LaTeX trong một đối tượng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
489 và gửi nó đến màn hình phong phú của sổ ghi chép của bạn, màn hình này có thể hiển thị đánh dấu bằng thư viện MathJax

Con số hợp lý trăn

Lần tới khi bạn đánh giá một ô sổ ghi chép có chứa phiên bản

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9, nó sẽ vẽ một công thức toán học tuyệt đẹp thay vì in văn bản

Thực hiện phép tính số hữu tỷ trên phân số

Như đã đề cập trước đó, bạn có thể sử dụng phân số trong các biểu thức số học bao gồm các loại số khác. Phân số sẽ tương tác với hầu hết các loại số ngoại trừ

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
413, có bộ quy tắc riêng. Ngoài ra, kiểu dữ liệu của toán hạng khác, bất kể nó nằm bên trái hay bên phải phân số của bạn, sẽ xác định loại kết quả của phép toán số học của bạn

Phép cộng

Bạn có thể cộng hai hay nhiều phân số mà không cần nghĩ đến việc rút gọn chúng về mẫu số chung

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
26

Kết quả là một phân số mới là tổng của tất cả các phân số đầu vào. Điều tương tự cũng xảy ra khi bạn cộng các số nguyên và phân số

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
27

Tuy nhiên, ngay sau khi bạn bắt đầu trộn các phân số với các số không hữu tỷ—nghĩa là các số không phải là lớp con của

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
492—thì phân số của bạn sẽ được chuyển đổi thành loại đó trước khi được thêm vào

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
28

Bạn nhận được kết quả tương tự cho dù bạn có sử dụng rõ ràng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
463 hay không. Chuyển đổi đó có thể dẫn đến mất độ chính xác vì phân số của bạn cũng như kết quả hiện được lưu trữ trong biểu diễn dấu phẩy động. Dù là con số 0. 4 có vẻ đúng, nó không hoàn toàn bằng phân số 4/10

Loại bỏ các quảng cáo

phép trừ

Trừ phân số không khác gì cộng chúng. Python sẽ tìm ra mẫu số chung cho bạn

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
29

Lần này, độ chính xác bị mất đáng kể đến mức có thể nhìn thấy trong nháy mắt. Lưu ý một dòng dài các số 0 theo sau là một chữ số

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
494 ở cuối phần mở rộng thập phân. Đó là kết quả của việc làm tròn một giá trị mà nếu không sẽ yêu cầu vô số chữ số nhị phân

Phép nhân

Khi bạn nhân hai phân số, tử số và mẫu số sẽ được nhân thành phần tử và phân số kết quả sẽ tự động bị giảm nếu cần

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
30

Một lần nữa, tùy thuộc vào loại toán hạng khác, bạn sẽ có một loại dữ liệu khác trong kết quả

Phân công

Có hai toán tử chia trong Python và phân số hỗ trợ cả hai

  1. chia thật.
    >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    402
  2. Phân chia tầng.
    >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    496

Phép chia thực dẫn đến một phân số khác, trong khi phép chia sàn luôn trả về một số nguyên với phần phân số bị cắt bớt

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
31

Lưu ý rằng kết quả của phép chia sàn không phải lúc nào cũng là số nguyên. Kết quả có thể là

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 tùy thuộc vào loại dữ liệu bạn sử dụng cùng với phân số. Phân số cũng hỗ trợ toán tử modulo (
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
498) cũng như hàm
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
499, có thể giúp tạo các phân số hỗn hợp từ các phân số không chính xác

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
32

Thay vì tạo một chuỗi như trong kết quả ở trên, bạn có thể cập nhật hàm để trả về một bộ bao gồm toàn bộ phần và phần còn lại phân số. Hãy tiếp tục và thử sửa đổi giá trị trả về của hàm để thấy sự khác biệt

lũy thừa

Bạn có thể nâng phân số lên lũy thừa bằng toán tử lũy thừa nhị phân (

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
000) hoặc hàm
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
001 tích hợp. Bạn cũng có thể sử dụng chính các phân số dưới dạng số mũ. Quay lại trình thông dịch Python của bạn ngay bây giờ và bắt đầu khám phá cách nâng phân số lên lũy thừa

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
33

Bạn sẽ nhận thấy rằng bạn có thể sử dụng cả giá trị số mũ dương và âm. Khi số mũ không phải là số

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
8, phân số của bạn sẽ tự động được chuyển đổi thành
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 trước khi tiếp tục

Mọi thứ trở nên phức tạp hơn khi số mũ là một thể hiện của

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9. Vì các lũy thừa phân số thường tạo ra các số vô tỷ, nên cả hai toán hạng đều được chuyển đổi thành
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 trừ khi cơ số và số mũ là số nguyên

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
34

Lần duy nhất bạn nhận được kết quả là một phân số là khi mẫu số của số mũ bằng một và bạn đang đưa ra một ví dụ về

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9

Loại bỏ các quảng cáo

Làm tròn phân số Python

Có rất nhiều chiến lược để làm tròn số trong Python và thậm chí nhiều hơn nữa trong toán học. Bạn có thể sử dụng cùng một bộ hàm cấp mô-đun và toàn cục được tích hợp sẵn cho phân số và số thập phân. Chúng sẽ cho phép bạn gán một số nguyên cho một phân số hoặc tạo một phân số mới tương ứng với ít chữ số thập phân hơn

Bạn đã học về phương pháp làm tròn thô khi bạn chuyển đổi phân số thành

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
53, phương pháp này đã cắt bớt phần phân số chỉ để lại toàn bộ phần, nếu có

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
35

Trong trường hợp này, gọi

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
462 tương đương với gọi
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
009, làm tròn phân số dương xuống và phân số âm lên. Hai hoạt động này được gọi là sàn và trần, tương ứng. Bạn có thể sử dụng cả hai trực tiếp nếu bạn muốn

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
36

So sánh kết quả của

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
010 và
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
011 với các cuộc gọi trước đó của bạn tới
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
009. Mỗi hàm có một xu hướng làm tròn khác nhau, điều này có thể ảnh hưởng đến các thuộc tính thống kê của tập dữ liệu được làm tròn của bạn. May mắn thay, có một chiến lược gọi là làm tròn một nửa thành chẵn, ít sai lệch hơn so với cắt bớt, sàn hoặc trần

Về cơ bản, nó làm tròn phân số của bạn thành số nguyên gần nhất trong khi ưu tiên số chẵn gần nhất cho các nửa cách đều nhau. Bạn có thể gọi

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
013 để tận dụng chiến lược này

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
37

Lưu ý cách các phân số đó được làm tròn lên hoặc xuống tùy thuộc vào vị trí của số chẵn gần nhất? . Mặt khác, hướng làm tròn dựa trên khoảng cách ngắn nhất đến một số nguyên bất kể số đó có chẵn hay không

Bạn có thể tùy chọn cung cấp hàm

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
013 với tham số thứ hai, cho biết bạn muốn giữ lại bao nhiêu vị trí thập phân. Khi bạn làm như vậy, bạn sẽ luôn nhận được một số
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 thay vì một số nguyên, ngay cả khi bạn yêu cầu các chữ số bằng không

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
38

Tuy nhiên, hãy lưu ý sự khác biệt giữa cách gọi

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
016 và
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
017, cách gọi này mang lại cùng một giá trị nhưng sử dụng kiểu dữ liệu khác

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
39

Khi bạn bỏ qua đối số thứ hai,

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
013 sẽ trả về số nguyên gần nhất. Nếu không, bạn sẽ nhận được một phân số rút gọn có mẫu số ban đầu là lũy thừa 10 tương ứng với số chữ số thập phân mà bạn yêu cầu

So sánh phân số trong Python

Trong thực tế, việc so sánh các số được viết bằng ký hiệu phân số có thể khó hơn so với so sánh các số được viết bằng ký hiệu thập phân vì ký hiệu phân số bao gồm hai giá trị thay vì chỉ một. Để hiểu những con số đó, bạn thường rút gọn chúng thành mẫu số chung và chỉ so sánh tử số của chúng. Ví dụ: hãy thử sắp xếp các phân số sau theo thứ tự tăng dần theo giá trị của chúng

  • 2/3
  • 5/8
  • 13/8

Nó không thuận tiện như với ký hiệu thập phân. Mọi thứ thậm chí còn tồi tệ hơn với các ký hiệu hỗn hợp. Tuy nhiên, khi bạn viết lại các phân số đó bằng mẫu số chung, việc sắp xếp chúng trở nên đơn giản

  • 208/312
  • 195/312
  • 192/312

Ước chung lớn nhất của 3, 8, 13 là 1. Điều này có nghĩa là mẫu số chung nhỏ nhất của cả ba phân số là tích của chúng, 312. Khi bạn đã chuyển đổi tất cả các phân số để sử dụng mẫu số chung nhỏ nhất của chúng, bạn có thể bỏ qua mẫu số và tập trung vào việc so sánh các tử số

Trong Python, điều này hoạt động ngầm khi bạn so sánh và sắp xếp các đối tượng

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
50

Python có thể nhanh chóng sắp xếp các đối tượng

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 bằng hàm
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
021 tích hợp. Thật hữu ích, tất cả các toán tử so sánh đều hoạt động như dự kiến. Bạn thậm chí có thể sử dụng chúng với các loại số khác, ngoại trừ số phức

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
51

Các toán tử so sánh hoạt động với số thực và số thập phân, nhưng bạn gặp lỗi khi thử với số phức

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
022. Điều này liên quan đến thực tế là các số phức không xác định quan hệ thứ tự tự nhiên, vì vậy bạn không thể so sánh chúng với bất kỳ thứ gì—kể cả phân số

Loại bỏ các quảng cáo

Lựa chọn giữa >>> one_third = Fraction(1, 3) >>> Fraction(one_third, 3) Fraction(1, 9) >>> Fraction(3, one_third) Fraction(9, 1) >>> Fraction(one_third, one_third) Fraction(1, 1) 9, >>> Fraction(one_third) == one_third True >>> Fraction(one_third) is one_third False 0 và >>> Fraction(one_third) == one_third True >>> Fraction(one_third) is one_third False 025

Nếu bạn chỉ cần chọn một điều cần nhớ khi đọc hướng dẫn này, thì đó sẽ là khi chọn

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 thay vì
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 và
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1. Tất cả các loại số này đều có trường hợp sử dụng, vì vậy thật tốt khi hiểu điểm mạnh và điểm yếu của chúng. Trong phần này, bạn sẽ có một cái nhìn ngắn gọn về cách các số được thể hiện trong mỗi một trong ba loại dữ liệu này

Dấu phẩy động nhị phân. >>> Fraction(one_third) == one_third True >>> Fraction(one_third) is one_third False 1

Kiểu dữ liệu

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 phải là lựa chọn mặc định của bạn để biểu thị số thực trong hầu hết các trường hợp. Ví dụ: nó phù hợp trong khoa học, kỹ thuật và đồ họa máy tính, trong đó tốc độ thực thi quan trọng hơn độ chính xác. Hầu như không có chương trình nào yêu cầu độ chính xác cao hơn bạn có thể nhận được với dấu phẩy động

Ghi chú. Nếu bạn chỉ cần sử dụng số nguyên, thì

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
53 sẽ là kiểu dữ liệu hiệu quả hơn về tốc độ và bộ nhớ để sử dụng

Tốc độ vô song của số học dấu phẩy động bắt nguồn từ việc triển khai nó trong phần cứng chứ không phải phần mềm. Hầu như tất cả các bộ đồng xử lý toán học đều tuân theo tiêu chuẩn IEEE 754, tiêu chuẩn này mô tả cách biểu diễn các số ở dạng dấu phẩy động nhị phân. Như bạn đoán, nhược điểm của việc sử dụng hệ thống nhị phân là lỗi đại diện nổi tiếng

Tuy nhiên, trừ khi bạn có lý do cụ thể để sử dụng một loại số khác, bạn chỉ nên sử dụng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 hoặc
>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
53 nếu có thể

Dấu phẩy động thập phân và dấu phẩy động. >>> Fraction(one_third) == one_third True >>> Fraction(one_third) is one_third False 0

Đôi khi việc sử dụng hệ thống nhị phân không cung cấp đủ độ chính xác cho các số thực. Một ví dụ đáng chú ý là tính toán tài chính, liên quan đến việc xử lý các số rất lớn và rất nhỏ cùng một lúc. Họ cũng có xu hướng lặp đi lặp lại cùng một phép tính số học, điều này có thể tích lũy một lỗi làm tròn đáng kể

Bạn có thể lưu trữ các số thực bằng cách sử dụng số học dấu phẩy động thập phân để giảm thiểu những vấn đề này và loại bỏ lỗi biểu diễn nhị phân. Nó tương tự như

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 vì nó di chuyển dấu thập phân xung quanh để phù hợp với cường độ lớn hơn hoặc nhỏ hơn. Tuy nhiên, nó hoạt động trong hệ thập phân thay vì trong hệ nhị phân

Một chiến lược khác để tăng độ chính xác của số là số học điểm cố định, phân bổ một số chữ số cụ thể cho phần mở rộng thập phân. Ví dụ: độ chính xác lên đến bốn chữ số thập phân sẽ yêu cầu lưu trữ phân số dưới dạng số nguyên được chia tỷ lệ theo hệ số 10.000. Để khôi phục các phân số ban đầu, chúng sẽ được thu nhỏ lại cho phù hợp

Kiểu dữ liệu

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
413 của Python là sự kết hợp của các biểu diễn dấu phẩy động thập phân và dấu phẩy động dưới mui xe. Nó cũng tuân theo hai tiêu chuẩn này

  1. Đặc tả số học thập phân chung (IBM)
  2. Số học dấu phẩy động độc lập với cơ số (IEEE 854-1987)

Chúng được mô phỏng trong phần mềm thay vì phần cứng, khiến loại dữ liệu này kém hiệu quả hơn về mặt thời gian và không gian so với

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1. Mặt khác, nó có thể biểu thị các số với độ chính xác tùy ý nhưng hữu hạn, bạn có thể tự do điều chỉnh. Lưu ý rằng bạn vẫn có thể gặp lỗi làm tròn số nếu một phép tính số học vượt quá số chữ số thập phân tối đa

Tuy nhiên, bộ đệm an toàn được cung cấp bởi độ chính xác cố định hôm nay có thể không đủ vào ngày mai. Hãy xem xét siêu lạm phát hoặc xử lý nhiều loại tiền tệ có tỷ giá rất khác nhau, chẳng hạn như Bitcoin (0. 000029 BTC) và Rial Iran (42.105. 00 VNĐ). Nếu bạn muốn độ chính xác vô hạn, hãy sử dụng

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9

Số hữu tỷ chính xác vô hạn. >>> one_third = Fraction(1, 3) >>> Fraction(one_third, 3) Fraction(1, 9) >>> Fraction(3, one_third) Fraction(9, 1) >>> Fraction(one_third, one_third) Fraction(1, 1) 9

Cả hai loại

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 và
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 đều có một vài điểm tương đồng. Chúng giải quyết lỗi biểu diễn nhị phân, chúng được triển khai trong phần mềm và bạn có thể sử dụng chúng cho các ứng dụng tiền tệ. Tuy nhiên, mục đích sử dụng chính của phân số là để biểu diễn các số hữu tỷ, vì vậy chúng có thể không thuận tiện cho việc lưu trữ tiền hơn so với số thập phân

Ghi chú. Mặc dù kiểu dữ liệu

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 được triển khai bằng Python thuần túy, nhưng hầu hết các bản phân phối Python đều gửi một thư viện được liên kết động đã biên dịch cho loại
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0. Nếu nó không có sẵn cho nền tảng của bạn, thì Python cũng sẽ quay trở lại triển khai Python thuần túy. Tuy nhiên, ngay cả phiên bản đã biên dịch cũng không tận dụng được phần cứng nhiều như
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1.

Có hai lợi thế khi sử dụng

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 so với
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0. Cái đầu tiên là độ chính xác vô hạn chỉ giới hạn bởi bộ nhớ khả dụng của bạn. Điều này cho phép bạn biểu diễn các số hữu tỷ với phần mở rộng thập phân định kỳ và không kết thúc mà không làm mất thông tin

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
52

Nhân 1/3 với 3 cho bạn chính xác 1 trong ký hiệu phân số, nhưng kết quả được làm tròn trong ký hiệu thập phân. Nó có hai mươi tám chữ số thập phân, là độ chính xác mặc định của loại

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0

Xem lại một lợi ích khác của phân số, lợi ích mà bạn đã bắt đầu tìm hiểu trước đó. Không giống như

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0, các phân số có thể tương tác với các số dấu phẩy động nhị phân

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
53

Khi bạn trộn các phân số với số float, kết quả là bạn sẽ nhận được một số dấu phẩy động. Mặt khác, nếu bạn cố trộn các phân số với kiểu dữ liệu

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0, thì bạn sẽ gặp phải một
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
404

Loại bỏ các quảng cáo

Nghiên cứu một phân số Python trong hành động

Trong phần này, bạn sẽ xem qua một số ví dụ thú vị và thực tế về cách sử dụng kiểu dữ liệu

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 trong Python. Bạn có thể ngạc nhiên về mức độ tiện dụng của các phân số và đồng thời chúng bị định giá thấp như thế nào. Hãy sẵn sàng để lặn ngay trong

Xấp xỉ số vô tỉ

Số vô tỷ đóng một vai trò quan trọng trong toán học, đó là lý do tại sao chúng xuất hiện một cách tiếp tuyến với nhiều trường con như số học, giải tích và hình học. Một số trong những người nổi tiếng nhất mà bạn có thể đã nghe nói trước đây là

  • Căn bậc hai của hai (√2)
  • Hằng số Archimedes (π)
  • Tỷ lệ vàng (φ)
  • Số Euler (e)

Trong lịch sử toán học, số pi (π) đặc biệt thú vị, dẫn đến nhiều nỗ lực tìm kiếm các xấp xỉ chính xác cho nó

Mặc dù các nhà triết học cổ đại đã phải nỗ lực rất nhiều, nhưng ngày nay bạn có thể sử dụng Python để tìm các ước tính khá tốt về số pi bằng các phương pháp Monte Carlo, chẳng hạn như kim Buffon hoặc phương pháp tương tự. Tuy nhiên, chỉ cần có một xấp xỉ sơ bộ ở dạng phân số thuận tiện là đủ trong hầu hết các bài toán hàng ngày. Sau đây là cách bạn có thể xác định thương của hai số nguyên để dần dần đưa ra các xấp xỉ tốt hơn cho một số vô tỷ

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
54

Hàm chấp nhận một số vô tỷ, chuyển đổi nó thành một phân số và tìm một phân số khác có ít chữ số thập phân hơn. Bộ Python ngăn tạo ra các giá trị trùng lặp bằng cách giữ dữ liệu lịch sử và trình vòng lặp

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
053 của mô-đun
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
4 đếm đến vô cùng

Bây giờ bạn có thể sử dụng chức năng này để tìm mười xấp xỉ phân số đầu tiên của số pi

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
55

Tốt đẹp. Số hữu tỉ 22/7 đã khá gần, điều này cho thấy rằng số pi có thể được tính gần đúng từ rất sớm và xét cho cùng thì không phải là số vô tỉ đặc biệt. Trình lặp

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
054 dừng phép lặp vô hạn sau khi nhận được mười giá trị được yêu cầu. Hãy tiếp tục và chơi với ví dụ này bằng cách tăng số lượng kết quả hoặc tìm các giá trị gần đúng của các số vô tỷ khác

Nhận tỷ lệ khung hình của màn hình

Tỷ lệ khung hình của hình ảnh hoặc màn hình là thương số giữa chiều rộng và chiều cao của nó để biểu thị tỷ lệ một cách thuận tiện. Nó thường được sử dụng trong phim và phương tiện kỹ thuật số, trong khi các đạo diễn phim muốn tận dụng tỷ lệ khung hình như một thước đo nghệ thuật. Nếu bạn đã từng săn lùng một chiếc điện thoại thông minh mới, thì thông số kỹ thuật có thể đã đề cập đến tỷ lệ màn hình chẳng hạn như 16. 9 chẳng hạn

Bạn có thể tìm ra tỷ lệ khung hình của màn hình máy tính bằng cách đo chiều rộng và chiều cao của nó bằng Tkinter, đi kèm với bản phân phối Python chính thức

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
56

Lưu ý rằng nếu bạn kết nối nhiều màn hình thì mã này có thể không hoạt động như mong đợi

Tính tỷ lệ khung hình là vấn đề tạo ra một phân số sẽ tự giảm

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
57

của bạn đi. Màn hình có 16. 9 độ phân giải. Tuy nhiên, nếu bạn đang sử dụng máy tính xách tay có kích thước màn hình nhỏ hơn, thì phân số của bạn có thể không hoạt động lúc đầu và bạn sẽ cần phải giới hạn mẫu số của nó cho phù hợp

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
58

Hãy nhớ rằng nếu bạn đang xử lý màn hình dọc của thiết bị di động, bạn nên hoán đổi kích thước để kích thước đầu tiên lớn hơn kích thước sau. Bạn có thể gói gọn logic này trong một chức năng có thể tái sử dụng

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
59

Điều này sẽ đảm bảo tỷ lệ khung hình nhất quán bất kể thứ tự của các đối số

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
70

Cho dù bạn đang xem các phép đo của màn hình ngang hay dọc, tỷ lệ khung hình đều giống nhau

Cho đến nay, chiều rộng và chiều cao là số nguyên, nhưng còn giá trị phân số thì sao? . 8mm x 14. 8mm. Phân số bị nghẹt đối với số thập phân và dấu phẩy động, nhưng bạn có thể biến chúng thành xấp xỉ hợp lý

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
71

Trong trường hợp này, tỷ lệ khung hình chính xác là 1. 5 hoặc 3. 2, nhưng nhiều máy ảnh sử dụng chiều rộng dài hơn một chút cho cảm biến của chúng, tỷ lệ này là 1. 555… hoặc 14. 9. Khi bạn làm phép toán, bạn sẽ phát hiện ra rằng đó là giá trị trung bình cộng của định dạng rộng (16. 9) và hệ thống bốn phần ba (4. 3), đây là một sự thỏa hiệp để cho phép bạn hiển thị hình ảnh tốt ở cả hai định dạng phổ biến này

Tính toán giá trị phơi sáng của ảnh

Định dạng tiêu chuẩn để nhúng siêu dữ liệu vào hình ảnh kỹ thuật số, Exif (Định dạng tệp hình ảnh có thể thay đổi), sử dụng các tỷ lệ để lưu trữ nhiều giá trị. Một số tỷ lệ quan trọng nhất mô tả độ phơi sáng của ảnh của bạn

  • Giá trị khẩu độ
  • Thời gian phơi sáng
  • Xu hướng phơi sáng
  • Độ dài tiêu cự
  • F-Dừng
  • Tốc độ màn trập

Tốc độ màn trập thường đồng nghĩa với thời gian phơi sáng, nhưng nó được lưu trữ dưới dạng một phân số trong siêu dữ liệu bằng hệ thống APEX dựa trên thang logarit. Điều đó có nghĩa là máy ảnh sẽ lấy nghịch đảo thời gian phơi sáng của bạn và sau đó tính logarit cơ số 2 của nó. Vì vậy, ví dụ: 1/200 của thời gian phơi sáng thứ hai sẽ được ghi là 7643856/1000000 vào tệp. Đây là cách bạn có thể tính toán nó

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
72

Bạn có thể sử dụng phân số Python để khôi phục thời gian phơi sáng ban đầu nếu bạn đọc siêu dữ liệu này theo cách thủ công mà không cần sự trợ giúp của bất kỳ thư viện bên ngoài nào

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
73

Khi bạn kết hợp các mảnh ghép riêng lẻ—tức là khẩu độ, tốc độ cửa trập và độ nhạy sáng ISO—bạn sẽ có thể tính toán một giá trị phơi sáng (EV) duy nhất, giá trị này mô tả lượng ánh sáng thu được trung bình. Sau đó, bạn có thể sử dụng nó để lấy giá trị trung bình nhật ký của độ chói trong cảnh được chụp, điều này rất có giá trị trong quá trình xử lý hậu kỳ và áp dụng các hiệu ứng đặc biệt

Công thức tính giá trị phơi sáng như sau

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
74

Hãy nhớ rằng nó không tính đến các yếu tố khác như độ lệch phơi sáng hoặc đèn flash mà máy ảnh của bạn có thể áp dụng. Dù sao, hãy thử với một số giá trị mẫu

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
75

Bạn có thể sử dụng phân số hoặc các loại số khác cho các giá trị đầu vào. Trong trường hợp này, giá trị phơi sáng vào khoảng +13, tương đối sáng. Bức ảnh được chụp ngoài trời vào một ngày nắng, mặc dù trong bóng râm

Giải quyết vấn đề tạo ra sự thay đổi

Bạn có thể sử dụng phân số để giải quyết vấn đề tạo ra sự thay đổi kinh điển của khoa học máy tính mà bạn có thể gặp phải khi phỏng vấn xin việc. Nó yêu cầu số xu tối thiểu để có được một số tiền nhất định. Ví dụ: nếu bạn xem xét các đồng đô la Mỹ phổ biến nhất, thì bạn có thể đại diện cho 2 đô la. 67 as ten quarters (10 × $0. 25), một xu (1 × $0. 10), một niken (1 × $0. 05) và hai đồng xu (2 × $0. 01)

Phân số có thể là một công cụ thuận tiện để đại diện cho tiền xu trong ví hoặc máy tính tiền. Bạn có thể xác định tiền xu của đô la Mỹ theo cách sau

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
76

Một số trong số chúng sẽ tự động giảm bớt, nhưng không sao vì bạn sẽ định dạng chúng bằng ký hiệu thập phân. Bạn có thể sử dụng những đồng xu này để tính tổng giá trị ví của mình

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
77

Số tiền trong ví của bạn là $2. 67, nhưng nó có tới 18 xu. Có thể sử dụng ít tiền hơn cho cùng một số tiền. Một cách tiếp cận vấn đề tạo ra thay đổi là sử dụng thuật toán tham lam, chẳng hạn như thuật toán này

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
78

Thuật toán cố gắng tìm một đồng xu có mệnh giá cao nhất không lớn hơn số tiền còn lại. Mặc dù nó tương đối đơn giản để thực hiện, nhưng nó có thể không đưa ra giải pháp tối ưu trong tất cả các hệ thống tiền xu. Đây là một ví dụ cho các đồng xu của đô la Mỹ

>>>

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
79

Sử dụng các số hữu tỷ là bắt buộc để tìm giải pháp vì các giá trị dấu phẩy động sẽ không cắt được. Vì

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
055 là hàm tạo ra các đồng tiền có thể lặp lại, bạn có thể sử dụng
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
056 để nhóm chúng

Bạn có thể sửa đổi vấn đề này bằng cách hỏi một câu hỏi hơi khác. Chẳng hạn, bộ tiền tối ưu sẽ là bao nhiêu với tổng giá, tiền của khách hàng và tiền của người bán có sẵn trong máy tính tiền?

Sản xuất và mở rộng phân số liên tục

Khi bắt đầu hướng dẫn này, bạn đã biết rằng các số vô tỷ có thể được biểu diễn dưới dạng các phân số liên tục vô hạn. Các phân số như vậy sẽ cần một lượng bộ nhớ vô hạn để tồn tại, nhưng bạn có thể chọn thời điểm ngừng tạo các hệ số của chúng để có được giá trị gần đúng hợp lý

Hàm tạo sau đây sẽ mang lại các hệ số của số đã cho vô tận theo kiểu được đánh giá lười biếng

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
0

Hàm cắt bớt số và tiếp tục biểu thị phân số còn lại dưới dạng nghịch đảo được phản hồi làm đầu vào. Để loại bỏ mã trùng lặp, nó sử dụng biểu thức gán trên dòng 3, thường được gọi là toán tử hải mã được giới thiệu trong Python 3. 8

Thật thú vị, bạn cũng có thể tạo các phân số liên tục cho các số hữu tỷ

>>>

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
1

Số 42 chỉ có một hệ số và không có phần phân số. Ngược lại, 3/4 không có phần nguyên và phân số tiếp theo gồm 1 trên 1 + 1/3

Con số hợp lý trăn

Như thường lệ, bạn nên coi chừng lỗi biểu diễn dấu phẩy động có thể xuất hiện khi bạn chuyển sang

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1

>>>

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
2

Trong khi bạn có thể đại diện cho 0. 75 ở dạng nhị phân một cách trung thực, đối ứng của nó có khai triển thập phân không kết thúc mặc dù là một số hữu tỷ. Khi bạn xem qua phần còn lại của các hệ số, cuối cùng bạn sẽ đạt được độ lớn này ở mẫu số đại diện cho một giá trị nhỏ không đáng kể. Đó là lỗi gần đúng của bạn

Bạn có thể loại bỏ lỗi này bằng cách thay thế số thực bằng phân số Python

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
3

Thay đổi nhỏ này cho phép bạn tạo các hệ số của các phân số liên tục tương ứng với các số thập phân một cách đáng tin cậy. Mặt khác, bạn có thể kết thúc trong một vòng lặp vô hạn ngay cả khi chấm dứt mở rộng thập phân

Được rồi, hãy làm điều gì đó thú vị hơn và tạo ra các hệ số của các số vô tỷ với các khai triển thập phân của chúng bị cắt ở vị trí thập phân thứ năm mươi. Vì mục đích chính xác, hãy xác định chúng là các trường hợp

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0

>>>

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
4

Bây giờ, bạn có thể kiểm tra một vài hệ số đầu tiên của các phân số liên tục của chúng bằng cách sử dụng trình vòng lặp

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
054 quen thuộc

>>>

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
5

Bốn hệ số đầu tiên của pi đưa ra một xấp xỉ tốt đáng ngạc nhiên, theo sau là phần còn lại không đáng kể. Tuy nhiên, các phân số liên tục của hai hằng số khác trông rất đặc biệt. Họ lặp đi lặp lại cùng một con số cho đến vô tận. Biết được điều này, bạn có thể tính gần đúng chúng bằng cách mở rộng các hệ số đó về dạng thập phân của chúng

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
6

Thật tiện lợi khi định nghĩa hàm này theo cách đệ quy để nó có thể gọi chính nó trong các danh sách hệ số nhỏ hơn liên tiếp. Trong trường hợp cơ sở, chỉ có một số nguyên, đó là giá trị gần đúng nhất có thể. Nếu có hai hoặc nhiều hơn, thì kết quả là tổng của hệ số đầu tiên theo sau là một nghịch đảo của các hệ số còn lại được mở rộng

Bạn có thể xác minh xem cả hai chức năng có hoạt động như mong đợi hay không bằng cách gọi chúng trên các giá trị trả về ngược lại của chúng

>>>

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
7

Hoàn hảo. Nếu bạn cung cấp kết quả của

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
060 đến
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
061, thì bạn sẽ lấy lại giá trị ban đầu mà bạn có khi bắt đầu. Tuy nhiên, trong một số trường hợp, bạn có thể cần chuyển đổi phân số mở rộng thành loại
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
0 thay vì
>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 để có độ chính xác cao hơn

Sự kết luận

Bạn có thể chưa bao giờ nghĩ về cách máy tính lưu trữ các phân số trước khi đọc hướng dẫn này. Rốt cuộc, có lẽ người bạn cũ

>>> Fraction(one_third) == one_third
True

>>> Fraction(one_third) is one_third
False
1 tốt bụng của bạn có thể xử lý chúng tốt. Tuy nhiên, lịch sử đã chỉ ra rằng quan niệm sai lầm này cuối cùng có thể dẫn đến những thất bại thảm hại có thể tiêu tốn rất nhiều tiền.

Sử dụng

>>> one_third = Fraction(1, 3)

>>> Fraction(one_third, 3)
Fraction(1, 9)

>>> Fraction(3, one_third)
Fraction(9, 1)

>>> Fraction(one_third, one_third)
Fraction(1, 1)
9 của Python là một cách để tránh những thảm họa như vậy. Bạn đã thấy những ưu và nhược điểm của ký hiệu phân số, các ứng dụng thực tế của nó và các phương pháp sử dụng nó trong Python. Giờ đây, bạn có thể đưa ra lựa chọn sáng suốt về loại số nào phù hợp nhất trong trường hợp sử dụng của mình

Trong hướng dẫn này, bạn đã học cách

  • Chuyển đổi giữa ký hiệu thập phân và phân số
  • Thực hiện phép tính số hữu tỉ
  • Xấp xỉ số vô tỉ
  • Biểu diễn phân số chính xác với độ chính xác vô hạn
  • Biết khi nào nên chọn
    >>> one_third = Fraction(1, 3)
    
    >>> Fraction(one_third, 3)
    Fraction(1, 9)
    
    >>> Fraction(3, one_third)
    Fraction(9, 1)
    
    >>> Fraction(one_third, one_third)
    Fraction(1, 1)
    
    9 thay vì
    >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    0 hoặc
    >>> Fraction(one_third) == one_third
    True
    
    >>> Fraction(one_third) is one_third
    False
    
    1

Đánh dấu là đã hoàn thành

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Con số hợp lý trăn

Gửi cho tôi thủ thuật Python »

Giới thiệu về Bartosz Zaczyński

Con số hợp lý trăn
Con số hợp lý trăn

Bartosz là người hướng dẫn bootcamp, tác giả và lập trình viên đa ngôn ngữ yêu thích Python. Anh ấy giúp sinh viên của mình tiếp cận công nghệ phần mềm bằng cách chia sẻ kinh nghiệm thương mại hơn một thập kỷ trong ngành CNTT

» Thông tin thêm về Bartosz


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Con số hợp lý trăn

Aldren

Con số hợp lý trăn

David

Con số hợp lý trăn

Geir Arne

Con số hợp lý trăn

Martin

Con số hợp lý trăn

Sadie

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Con số hợp lý trăn

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi