Con số hợp lý trăn
69 Show
70 71 72 73 74 75 Mô-đun 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
Phần lớn hướng dẫn này đề cập đến mô-đun 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 3 tích hợp sẵn của Python, mô-đun 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àyTiề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
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 9 trong PythonLoại bỏ các quảng cáoPhâ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 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ế
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ỷ 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 PythonCá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 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ácPython's 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 8 đã đại diện cho một lớp cơ sở trừu tượng trong mô-đun 9. Mô-đun 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ọcNhập phân cấp cho các số trong Python 9 là một phân lớp trực tiếp và cụ thể của 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ư 53 và 54 cũng xuất phát từ 8, nhưng chúng cụ thể hơnVớ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áoTạo một phân số Python từ các loại dữ liệu khác nhauKhông giống như 53 hoặc 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ọcGhi 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 9. Đó là thứ duy nhất bạn cần nhập từ mô-đun 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>>> 2Khi 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 8 hoặc hậu duệ của nóLưu ý rằng bạn phải 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 ( 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àysố hữu tỷKhi bạn gọi hàm tạo 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>>> 4Thay vào đó, bạn nhận được một 404. Mặc dù 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àoGhi 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 >>> 0Python tăng 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>>> 2Cả 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 >>> 3Cho 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à 407>>> 5Ngược lại, nếu bạn bỏ qua cả hai đối số, tử số sẽ là 408>>> 7Tuy 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 >>>
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 9 một đối số duy nhất cũng là một phân số? >>>
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áoSố dấu phẩy động và số thập phânCho đế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 9 yêu cầu cả hai số đều là trường hợp của 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ỗiHai ví dụ điển hình về kiểu dữ liệu số thực trong Python là 1 và 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ì 9 tương tự như 0 về mặt này vì nó là hậu duệ của 416______20 có phải là số thực không?Hiển thị/Ẩn Không giống như 1 hoặc 9, lớp 0 không được đăng ký chính thức như một lớp con của 421 mặc dù đã triển khai các phương thức của nó>>> 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 >>> 40Mặt khác, thay thế 0 bằng một 9 tương đương sẽ mang lại kết quả 1 trong ví dụ trênTrướ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 425 và 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 9 có thể lấy trực tiếp cả hai loại dữ liệu làm đối số>>> 41Cho dù bạn tạo đối tượng 9 từ đối tượng 1 hay 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>>> 42Kế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ố 1, cho dù chúng có hợp lý hay không>>> 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 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 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>>> 44Khi bạn chuyển một số 1 hoặc một số 0 cho phương thức khởi tạo 9, nó sẽ gọi phương thức 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ạnGhi chú. Kể từ Python 3. 8, 9 cũng triển khai 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 >>> 45Nế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 439, bạn sẽ tìm hiểu thêm về điều này sau trong hướng dẫn này>>> 46Tuy 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ư 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 0 cũng có thể dễ bị như vậy nếu bạn không đủ cẩn thậnDù 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áoDâyCó hai định dạng chuỗi mà hàm tạo 9 chấp nhận, tương ứng với ký hiệu thập phân và phân số>>> 47Cả hai ký hiệu có thể tùy ý có dấu cộng ( 443) hoặc dấu trừ ( 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>>> 48Sự 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 ( 402)>>> 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 0 được khởi tạo chính xác thay vì giá trị 1 để bạn có thể duy trì độ chính xác tối đaBâ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ố PythonLớp cơ sở trừu tượng 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ố>>> 00Vì 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 >>> 01Nế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 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ó>>> 02Toán tử ngôi sao một ngôi ( 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 9Mộ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 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>>> 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 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>>> 04Bạ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 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 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áoChuyển đổi phân số Python sang các loại dữ liệu khácBạn đã học cách tạo phân số từ các kiểu dữ liệu sau
Còn ngược lại thì sao? Số dấu phẩy động và số nguyênChuyể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ư 462 hoặc 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ư 464 hoặc 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 8>>> 05Bạ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 465 chứ không phải 464Khi bạn điều tra mã nguồn, bạn sẽ nhận thấy rằng phương pháp 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>>> 06Hãy nhớ rằng việc chuyển phiên bản 9 thành phiên bản 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>>> 07Mặ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 462>>> 08Bạ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ânNếu bạn thử tạo một số 0 từ một phiên bản 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ể>>> 09Khi bạn thử, bạn nhận được một 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 0 và chia chúng theo cách thủ công>>> 20Không giống như 1 nhưng tương tự như 9, kiểu dữ liệu 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ố đó>>> 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 >>> 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 480, trong khi loại 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ạnLoại bỏ các quảng cáoDâyBiể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 9>>> 23Cho dù bạn sử dụng 483 hay 484, kết quả là một chuỗi, nhưng nội dung của chúng khác nhauKhô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 >>> 24Nếu bạn thử, thì bạn sẽ nhận được một 404. Đó có thể là một vấn đề nếu bạn muốn tham khảo một phiên bản 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ậyNế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 9 bằng cách thêm một phương thức mới, 488, mà Jupyter Notebook nhận ra 25Nó bọc một phần đánh dấu LaTeX trong một đối tượng 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 MathJaxLần tới khi bạn đánh giá một ô sổ ghi chép có chứa phiên bản 9, nó sẽ vẽ một công thức toán học tuyệt đẹp thay vì in văn bảnThự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ừ 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ạnPhép cộngBạ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 >>> 26Kế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ố >>> 27Tuy 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 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>>> 28Bạn nhận được kết quả tương tự cho dù bạn có sử dụng rõ ràng 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/10Loại bỏ các quảng cáophé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 >>> 29Lầ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ố 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ânPhép nhânKhi 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 >>> 30Mộ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ôngCó hai toán tử chia trong Python và phân số hỗ trợ cả hai
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 >>> 31Lư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à 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 ( 498) cũng như hàm 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>>> 32Thay 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ừaBạ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 ( 000) hoặc hàm 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>>> 33Bạ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ố 8, phân số của bạn sẽ tự động được chuyển đổi thành 1 trước khi tiếp tụcMọi thứ trở nên phức tạp hơn khi số mũ là một thể hiện của 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 1 trừ khi cơ số và số mũ là số nguyên>>> 34Lầ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ề 9Làm tròn phân số PythonCó 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 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ó>>> 35Trong trường hợp này, gọi 462 tương đương với gọi 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>>> 36So sánh kết quả của 010 và 011 với các cuộc gọi trước đó của bạn tới 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ầnVề 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 013 để tận dụng chiến lược này>>> 37Lư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 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ố 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>>> 38Tuy nhiên, hãy lưu ý sự khác biệt giữa cách gọi 016 và 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>>> 39Khi bạn bỏ qua đối số thứ hai, 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ầuSo sánh phân số trong PythonTrong 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
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
Ướ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 9>>> 50Python có thể nhanh chóng sắp xếp các đối tượng 9 bằng hàm 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>>> 51Cá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 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áoLự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 025Nế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 9 thay vì 0 và 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àyDấu phẩy động nhị phân. >>> Fraction(one_third) == one_third True >>> Fraction(one_third) is one_third False 1Kiểu dữ liệu 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 độngGhi chú. Nếu bạn chỉ cần sử dụng số nguyên, thì 53 sẽ là kiểu dữ liệu hiệu quả hơn về tốc độ và bộ nhớ để sử dụngTố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 1 hoặc 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ư 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ânMộ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 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
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 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 đaTuy 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 9Số 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) 9Cả hai loại 9 và 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ânGhi chú. Mặc dù kiểu dữ liệu 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 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ư 1.Có hai lợi thế khi sử dụng 9 so với 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>>> 52Nhâ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 0Xem 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ư 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>>> 53Khi 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 0, thì bạn sẽ gặp phải một 404Loại bỏ các quảng cáoNghiên cứu một phân số Python trong hành độngTrong 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 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 trongXấ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à
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ỷ 54Hà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 053 của mô-đun 4 đếm đến vô cùngBâ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 >>> 55Tố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 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ácNhận tỷ lệ khung hình của màn hìnhTỷ 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 >>> 56Lư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 >>> 57củ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 >>> 58Hã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 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ố >>> 70Cho 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ý >>> 71Trong 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
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ó >>> 72Bạ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 >>> 73Khi 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 74Hã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 >>> 75Bạ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 đổiBạ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 76Mộ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 >>> 77Số 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 78Thuậ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ỹ >>> 79Sử 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ì 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 056 để nhóm chúngBạ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ụcKhi 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 0Hà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ỷ >>> 1Số 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 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 1>>> 2Trong 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 3Thay đổ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 0>>> 4Bâ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 054 quen thuộc>>> 5Bố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 6Thậ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 >>> 7Hoàn hảo. Nếu bạn cung cấp kết quả của 060 đến 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 0 thay vì 1 để có độ chính xác cao hơnSự kết luậnBạ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ũ 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 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ìnhTrong hướng dẫn này, bạn đã học cách
Đá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 Gửi cho tôi thủ thuật Python » Giới thiệu về Bartosz Zaczyński 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ề BartoszMỗ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à Aldren David Geir Arne Martin 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 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 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ẻ EmailBà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 |