Hướng dẫn modulo in python example - mô-đun trong ví dụ python
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: Python Modulo: Sử dụng toán tử % This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Python Modulo: Using the % Operator Show
Python hỗ trợ một loạt các toán tử số học mà bạn có thể sử dụng khi làm việc với các số trong mã của mình. Một trong những toán tử này là toán tử modulo ( 9), trả về phần còn lại của việc chia hai số.modulo operator ( 9), which returns the remainder of dividing two numbers.Trong hướng dẫn này, bạn sẽ học:
Toán tử modulo Python đôi khi có thể bị bỏ qua. Nhưng có một sự hiểu biết tốt về nhà điều hành này sẽ cung cấp cho bạn một công cụ vô giá trong vành đai công cụ Python của bạn. Modulo trong toán họcThuật ngữ modulo xuất phát từ một nhánh của toán học gọi là số học mô -đun. Số học mô -đun xử lý số học số nguyên trên một dòng số tròn có một tập hợp số cố định. Tất cả các hoạt động số học được thực hiện trên dòng số này sẽ bao quanh khi chúng đạt đến một số nhất định gọi là mô đun.modulo comes from a branch of mathematics called modular arithmetic. Modular arithmetic deals with integer arithmetic on a circular number line that has a fixed set of numbers. All arithmetic operations performed on this number line will wrap around when they reach a certain number called the modulus. Một ví dụ kinh điển về mô-đun trong số học mô-đun là đồng hồ mười hai giờ. Đồng hồ mười hai giờ có một tập hợp các giá trị cố định, từ 1 đến 12. Khi đếm trên đồng hồ mười hai giờ Modulo 12, đôi khi rút ngắn thành Mod Mod 12. Toán tử modulo được sử dụng khi bạn muốn so sánh một số với mô đun và nhận số tương đương bị ràng buộc với phạm vi của mô đun. Ví dụ: giả sử bạn muốn xác định thời gian là chín giờ sau 8:00 sáng trên đồng hồ mười hai giờ, bạn không thể thêm 9 đến 8 vì bạn sẽ nhận được 17. Bạn cần lấy kết quả, 17 và sử dụng 1 để có được giá trị tương đương của nó trong bối cảnh mười hai giờ:
2 Trả về 3. Điều này có nghĩa là chín giờ trước 8:00 sáng là 5:00 chiều. Bạn đã xác định điều này bằng cách lấy số 4 và áp dụng nó vào bối cảnh 5.Bây giờ, nếu bạn nghĩ về nó, 4 và 3 tương đương trong bối cảnh 5. Nếu bạn nhìn vào bàn tay giờ lúc 5:00 và 17:00, nó sẽ ở cùng một vị trí. Số học mô -đun có một phương trình để mô tả mối quan hệ này:Phương trình này đọc được 9 và 0 là modulo đồng dạng 1. Điều này có nghĩa là 9 và 0 tương đương trong 4 vì chúng có cùng phần còn lại khi chia cho 1. Trong phương trình trên, 1 là mô đun cho cả 9 và 0. Sử dụng các giá trị 4 và 3 từ trước, phương trình sẽ trông như thế này:modulus for both 9 and 0. Using the values 4 and 3 from before, the equation would look like this:Điều này đọc được ____ ____74 và 3 là modulo đồng dạng 3. 4 và 3 có cùng phần còn lại, 3, khi chia cho 3. Vì vậy, trong 5, các số 4 và 3 là tương đương.Bạn có thể xác nhận điều này bằng cách sử dụng bộ phận:
Cả hai hoạt động đều có cùng phần còn lại, 3, vì vậy chúng có thể tương đương với modulo 3.Bây giờ, điều này có vẻ như rất nhiều toán học cho một toán tử Python, nhưng việc có kiến thức này sẽ chuẩn bị cho bạn sử dụng toán tử modulo trong các ví dụ sau trong hướng dẫn này. Trong phần tiếp theo, bạn sẽ xem xét những điều cơ bản của việc sử dụng toán tử modulo Python với các loại số 03 và 04.Nhà điều hành Modulo PythonToán tử modulo, giống như các toán tử số học khác, có thể được sử dụng với các loại số 03 và 04. Như bạn sẽ thấy sau này, nó cũng có thể được sử dụng với các loại khác như 07, 08 và các lớp học của riêng bạn.Toán tử modulo với 17 / 12 = 1 R 5 5 / 12 = 0 R 5 03Hầu hết thời gian bạn sẽ sử dụng toán tử modulo với số nguyên. Toán tử modulo, khi được sử dụng với hai số nguyên dương, sẽ trả về phần còn lại của bộ phận Euclide tiêu chuẩn: >>>
Hãy cẩn thận! Giống như với toán tử phân chia ( 10), Python sẽ trả lại 11 nếu bạn cố gắng sử dụng toán tử modulo với ước số 12:>>>
Hãy cẩn thận! Giống như với toán tử phân chia ( 10), Python sẽ trả lại 11 nếu bạn cố gắng sử dụng toán tử modulo với ước số 12:
Tiếp theo, bạn sẽ xem xét sử dụng toán tử modulo với 17 / 12 = 1 R 5 5 / 12 = 0 R 5 04.Toán tử modulo với 04>>>
Hãy cẩn thận! Giống như với toán tử phân chia ( 10), Python sẽ trả lại 11 nếu bạn cố gắng sử dụng toán tử modulo với ước số 12:>>>
Các tài liệu Python chính thức đề xuất sử dụng 07 trên toán tử modulo Python khi làm việc với các giá trị 04 vì cách 07 tính toán kết quả của hoạt động modulo. Nếu bạn sử dụng một toán hạng âm, thì bạn có thể thấy các kết quả khác nhau giữa 24 và 25. Bạn có thể khám phá bằng cách sử dụng toán tử modulo với các toán hạng tiêu cực chi tiết hơn trong phần tiếp theo.Cũng giống như các toán tử số học khác, toán tử modulo và 07 có thể gặp phải các vấn đề làm tròn và chính xác khi xử lý số học dấu phẩy động:>>>
Nếu duy trì độ chính xác dấu phẩy động là quan trọng đối với ứng dụng của bạn, thì bạn có thể sử dụng toán tử modulo với 08. Bạn sẽ nhìn vào điều này sau trong hướng dẫn này.Toán tử modulo có toán hạng âmTất cả các hoạt động modulo mà bạn đã thấy cho đến thời điểm này đã sử dụng hai toán hạng tích cực và trả về kết quả dự đoán. Khi một toán hạng tiêu cực được giới thiệu, mọi thứ trở nên phức tạp hơn. Hóa ra, cách máy tính xác định kết quả của hoạt động modulo với toán hạng âm để lại sự mơ hồ về việc liệu phần còn lại có nên lấy dấu cổ tức (số được chia) hoặc dấu hiệu của ước số (số mà cổ tức được chia). Các ngôn ngữ lập trình khác nhau xử lý điều này khác nhau.dividend (the number being divided) or the sign of the divisor (the number by which the dividend is divided). Different programming languages handle this differently. Ví dụ, trong JavaScript, phần còn lại sẽ lấy dấu của cổ tức: Phần còn lại trong ví dụ này, 28, là tích cực vì nó có dấu hiệu của cổ tức, 29. Trong Python và các ngôn ngữ khác, phần còn lại sẽ lấy dấu hiệu của ước số:Ở đây bạn có thể thấy rằng phần còn lại, 30, có dấu hiệu của ước số, 31.Bạn có thể tự hỏi tại sao phần còn lại trong JavaScript là 28 và phần còn lại trong Python là 30. Điều này có liên quan đến cách các ngôn ngữ khác nhau xác định kết quả của hoạt động modulo. Các ngôn ngữ trong đó phần còn lại lấy dấu của cổ tức Sử dụng phương trình sau để xác định phần còn lại:Có ba biến phương trình này:
37 Trong phương trình này có nghĩa là nó sử dụng phân chia bị cắt ngắn, sẽ luôn làm tròn một số âm về 0. Để làm rõ hơn, hãy xem các bước của hoạt động modulo bên dưới sử dụng 29 làm cổ tức và 31 làm ước số:truncated division, which will always round a negative number toward zero. For more clarification, see the steps of the modulo operation below using 29 as the dividend and 31 as the divisor:
Ở đây bạn có thể thấy làm thế nào một ngôn ngữ như JavaScript có được phần còn lại 28. Python và các ngôn ngữ khác trong đó phần còn lại lấy dấu hiệu của ước số sử dụng phương trình sau: 41 Trong phương trình này có nghĩa là nó sử dụng phân chia sàn. Với số lượng tích cực, phân chia sàn sẽ trả về kết quả tương tự như bộ phận bị cắt ngắn. Nhưng với số âm, phân chia sàn sẽ làm tròn kết quả, cách xa số không:floor division. With positive numbers, floor division will return the same result as truncated division. But with a negative number, floor division will round the result down, away from zero:
Ở đây bạn có thể thấy rằng kết quả là 30.Bây giờ bạn đã hiểu sự khác biệt trong phần còn lại đến từ đâu, bạn có thể tự hỏi tại sao điều này quan trọng nếu bạn chỉ sử dụng Python. Vâng, hóa ra, không phải tất cả các hoạt động modulo trong Python đều giống nhau. Mặc dù modulo được sử dụng với các loại 03 và 04 sẽ lấy dấu hiệu của ước số, các loại khác sẽ không.Bạn có thể thấy một ví dụ về điều này khi bạn so sánh kết quả của 45 và 46:>>>
07 có dấu hiệu của cổ tức bằng cách sử dụng bộ phận bị cắt cụt, trong khi 04 sử dụng dấu hiệu của ước số. Sau đó trong hướng dẫn này, bạn sẽ thấy một loại Python khác sử dụng dấu hiệu của cổ tức, 08.Nhà điều hành Modulo và 17 / 12 = 1 R 5 5 / 12 = 0 R 5 50Python có chức năng tích hợp 50, sử dụng nội bộ toán tử modulo. 50 lấy hai tham số và trả về một tuple chứa kết quả phân chia sàn và modulo bằng các tham số được cung cấp.Dưới đây là một ví dụ về việc sử dụng 50 với 54 và 3:>>> 0Bạn có thể thấy rằng 56 trả về tuple 57. 58 là kết quả của bộ phận sàn 54 và 3. 28 là kết quả của 54 modulo 3.Dưới đây là một ví dụ trong đó tham số thứ hai là số âm. Như đã thảo luận trong phần trước, khi toán tử modulo được sử dụng với 03, phần còn lại sẽ lấy dấu hiệu của ước số:>>> 1Bây giờ, bạn đã có cơ hội nhìn thấy toán tử modulo được sử dụng trong một số kịch bản, điều quan trọng là phải xem Python xác định mức độ ưu tiên của toán tử modulo khi được sử dụng với các toán tử số học khác. Nhà điều hành Modulo ưu tiênGiống như các toán tử Python khác, có các quy tắc cụ thể cho toán tử modulo xác định ưu tiên của nó khi đánh giá các biểu thức. Toán tử Modulo ( 9) có cùng mức độ ưu tiên như phép nhân ( 66), bộ phận ( 10) và các toán tử phân chia sàn ( 68).Hãy xem một ví dụ về toán tử modulo ưu tiên bên dưới: Có thể bạn quan tâm>>> 2Cả hai toán tử nhân và modulo đều có cùng mức độ ưu tiên, vì vậy Python sẽ đánh giá chúng từ trái sang phải. Dưới đây là các bước cho hoạt động trên:
Nếu bạn muốn ghi đè lên mức độ ưu tiên của các toán tử khác, thì bạn có thể sử dụng dấu ngoặc đơn để bao quanh hoạt động bạn muốn được đánh giá trước: >>> 3Cả hai toán tử nhân và modulo đều có cùng mức độ ưu tiên, vì vậy Python sẽ đánh giá chúng từ trái sang phải. Dưới đây là các bước cho hoạt động trên: 17 / 12 = 1 R 5 5 / 12 = 0 R 5 69 được đánh giá, dẫn đến 17 / 12 = 1 R 5 5 / 12 = 0 R 5 70. 71 được đánh giá, dẫn đến 72.17 / 12 = 1 R 5 5 / 12 = 0 R 5 72 được đánh giá, dẫn đến 17 / 12 = 1 R 5 5 / 12 = 0 R 5 74.Nếu bạn muốn ghi đè lên mức độ ưu tiên của các toán tử khác, thì bạn có thể sử dụng dấu ngoặc đơn để bao quanh hoạt động bạn muốn được đánh giá trước: Trong ví dụ này, 75 được đánh giá đầu tiên, tiếp theo là 69 và cuối cùng là 77, tương đương với 78. 4Nhà điều hành Modulo Python trong thực tế Bây giờ, bạn đã trải qua những điều cơ bản của toán tử modulo Python, bạn sẽ xem xét một số ví dụ về việc sử dụng nó để giải quyết các vấn đề lập trình trong thế giới thực. Đôi khi, có thể khó xác định khi nào nên sử dụng toán tử modulo trong mã của bạn. Các ví dụ dưới đây sẽ cung cấp cho bạn một ý tưởng về nhiều cách nó có thể được sử dụng. 5Cách kiểm tra xem một số chẵn hay lẻ 6Trong phần này, bạn sẽ thấy cách bạn có thể sử dụng toán tử modulo để xác định xem một số chẵn hay số lẻ. Sử dụng toán tử modulo với mô đun là 28, bạn có thể kiểm tra bất kỳ số nào để xem nó có chia đều cho 28 không. Nếu nó chia đều, thì đó là một số chẵn.Hãy xem 81 trong đó kiểm tra xem liệu tham số 82 có chẵn không:>>> 7Cả hai toán tử nhân và modulo đều có cùng mức độ ưu tiên, vì vậy Python sẽ đánh giá chúng từ trái sang phải. Dưới đây là các bước cho hoạt động trên: 69 được đánh giá, dẫn đến 70.>>> 8Cả hai toán tử nhân và modulo đều có cùng mức độ ưu tiên, vì vậy Python sẽ đánh giá chúng từ trái sang phải. Dưới đây là các bước cho hoạt động trên: 69 được đánh giá, dẫn đến 70.17 / 12 = 1 R 5 5 / 12 = 0 R 5 71 được đánh giá, dẫn đến 17 / 12 = 1 R 5 5 / 12 = 0 R 5 72. 72 được đánh giá, dẫn đến 74.Nếu bạn muốn ghi đè lên mức độ ưu tiên của các toán tử khác, thì bạn có thể sử dụng dấu ngoặc đơn để bao quanh hoạt động bạn muốn được đánh giá trước: 9Trong ví dụ này, 75 được đánh giá đầu tiên, tiếp theo là 69 và cuối cùng là 77, tương đương với 78.Nhà điều hành Modulo Python trong thực tế >>> 0Bây giờ, bạn đã trải qua những điều cơ bản của toán tử modulo Python, bạn sẽ xem xét một số ví dụ về việc sử dụng nó để giải quyết các vấn đề lập trình trong thế giới thực. Đôi khi, có thể khó xác định khi nào nên sử dụng toán tử modulo trong mã của bạn. Các ví dụ dưới đây sẽ cung cấp cho bạn một ý tưởng về nhiều cách nó có thể được sử dụng. >>> 1Cách kiểm tra xem một số chẵn hay lẻ 2Tiếp theo, bên trong vòng lặp, hàm gọi 22 để xuất 14 vào hàng hiện tại. Tham số 24 cho 22 là một chuỗi trống ( 26) do đó, nó đã giành được đầu ra một dòng mới ở cuối chuỗi. Một chuỗi F được truyền đến 22, sử dụng cú pháp định dạng đầu ra chuỗi mà Python cung cấp: 3Không cần đi vào quá nhiều chi tiết, cú pháp 28 bảo 22 làm như sau:
Bây giờ tên đã được in ra hàng, hãy xem phần chính của 04: 4Mã này lấy lần lặp hiện tại 15 và, sử dụng toán tử modulo, so sánh nó với 06. Nếu kết quả bằng 12, thì nó có thể chạy mã dành riêng cho khoảng thời gian. Trong trường hợp này, hàm gọi 22 để thêm một dòng mới, bắt đầu một hàng mới.Mã trên chỉ là một ví dụ. Sử dụng mẫu 37 cho phép bạn chạy mã khác nhau trong các khoảng thời gian cụ thể trong các vòng lặp của bạn. Trong phần tiếp theo, bạn sẽ đưa khái niệm này đi xa hơn một chút và nhìn vào việc lặp lại theo chu kỳ.Cách tạo phép lặp theo chu kỳLặp lại theo chu kỳ mô tả một loại lặp sẽ đặt lại một khi nó đến một điểm nhất định. Nói chung, loại lặp này được sử dụng để hạn chế chỉ số của phép lặp ở một phạm vi nhất định. describes a type of iteration that will reset once it gets to a certain point. Generally, this type of iteration is used to restrict the index of the iteration to a certain range. Bạn có thể sử dụng toán tử modulo để tạo vòng lặp theo chu kỳ. Hãy xem một ví dụ bằng thư viện 38 để vẽ hình dạng: 5Mã trên sử dụng một vòng lặp vô hạn để vẽ hình dạng sao lặp lại. Sau sáu lần lặp lại, nó thay đổi màu của bút. Kích thước bút tăng theo từng lần lặp cho đến khi 39 được đặt lại về 12. Nếu bạn chạy mã, thì bạn sẽ nhận được một cái gì đó tương tự như thế này:Các phần quan trọng của mã này được tô sáng dưới đây: 6Mỗi lần thông qua vòng lặp, 39 được cập nhật dựa trên kết quả của 42. Giá trị 39 mới này được sử dụng để tăng 44 với mỗi lần lặp. Khi 39 đạt 3, 42 sẽ bằng 12 và 39 sẽ đặt lại về 12.Bạn có thể thấy các bước của lần lặp dưới đây để làm rõ hơn: 7Khi 39 được đặt lại về 12, 53 thay đổi thành màu ngẫu nhiên mới như được thấy dưới đây: 8Mã trong phần này sử dụng 54 làm mô đun, nhưng bạn có thể đặt nó thành bất kỳ số nào để điều chỉnh số lần vòng lặp sẽ lặp lại trước khi đặt lại giá trị 39.Cách chuyển đổi các đơn vịTrong phần này, bạn sẽ xem xét cách bạn có thể sử dụng toán tử modulo để chuyển đổi các đơn vị. Các ví dụ sau đây lấy các đơn vị nhỏ hơn và chuyển đổi chúng thành các đơn vị lớn hơn mà không cần sử dụng số thập phân. Toán tử modulo được sử dụng để xác định bất kỳ phần còn lại nào có thể tồn tại khi đơn vị nhỏ hơn không chia hết bởi đơn vị lớn hơn. Trong ví dụ đầu tiên này, bạn sẽ chuyển đổi inch thành chân. Toán tử modulo được sử dụng để có được các inch còn lại mà don đều chia thành đôi chân. Nhà điều hành phân chia sàn ( 68) được sử dụng để có được tổng số chân được làm tròn xuống: 9Ở đây, một ví dụ về chức năng đang sử dụng: >>> 0Như bạn có thể thấy từ đầu ra, 57 trả về 54, đó là những inch còn lại mà weren chia đều thành chân. Kết quả của 59 là 54, đó là tổng số feet mà các inch được chia đều.Bạn có thể đưa điều này thêm một chút trong ví dụ tiếp theo này. 61 mất một số nguyên, 62, đại diện cho một số phút và xuất ra khoảng thời gian tính theo ngày, giờ và phút: 1Phá vỡ điều này, bạn có thể thấy rằng chức năng thực hiện như sau:
Bạn có thể thấy cách nó hoạt động dưới đây: >>> 2Như bạn có thể thấy từ đầu ra, 57 trả về 54, đó là những inch còn lại mà weren chia đều thành chân. Kết quả của 59 là 54, đó là tổng số feet mà các inch được chia đều.Bạn có thể đưa điều này thêm một chút trong ví dụ tiếp theo này. 61 mất một số nguyên, 62, đại diện cho một số phút và xuất ra khoảng thời gian tính theo ngày, giờ và phút:Phá vỡ điều này, bạn có thể thấy rằng chức năng thực hiện như sau:Trong ví dụ tiếp theo này, bạn sẽ xem cách bạn có thể sử dụng toán tử modulo Python để kiểm tra xem một số có phải là số nguyên tố không. Một số nguyên tố là bất kỳ số nào chỉ chứa hai yếu tố, 78 và chính nó. Một số ví dụ về số nguyên tố là 28, 11, 3, 58, 75, 76, 77, 78 và 79.prime number. A prime number is any number that contains only two factors, 78 and itself. Some examples of prime numbers are 28, 11, 3, 58, 75, 76, 77,
78, and 79.Mã bên dưới là triển khai để xác định tính nguyên thủy của một số bằng toán tử modulo: 3Mã này xác định 80, lấy tham số 82 và kiểm tra xem nó có phải là số nguyên tố không. Nếu có, thì một tin nhắn được hiển thị cho biết 82 là số nguyên tố. Nếu nó không phải là một số nguyên tố, thì một tin nhắn được hiển thị với tất cả các yếu tố của số.Trước khi bạn nhìn kỹ hơn vào chức năng, đây là kết quả sử dụng một số số khác nhau: >>> 4Đào vào mã, bạn có thể thấy nó bắt đầu bằng cách kiểm tra xem 82 có nhỏ hơn 28 không. Số nguyên tố chỉ có thể lớn hơn hoặc bằng 28. Nếu 82 nhỏ hơn 28, thì chức năng không cần phải tiếp tục. Nó sẽ 22 một tin nhắn và 89:
5Nếu 82 lớn hơn 28, thì hàm sẽ kiểm tra xem 82 là số nguyên tố. Để kiểm tra điều này, hàm đã lặp lại trên tất cả các số giữa 28 và căn bậc hai của 82 để xem liệu có phân chia đồng đều thành 82 không. Nếu một trong những con số phân chia đều, thì một yếu tố đã được tìm thấy và 82 có thể là một số nguyên tố.Ở đây, phần chính của chức năng: 6Có rất nhiều thứ để giải nén ở đây, vì vậy, hãy để thực hiện từng bước. Đầu tiên, danh sách 97 được tạo với các yếu tố ban đầu, 98. Danh sách này sẽ được sử dụng để lưu trữ bất kỳ yếu tố nào khác được tìm thấy:Tiếp theo, bắt đầu với 28, mã tăng 39 cho đến khi nó đạt đến căn bậc hai của 82. Tại mỗi lần lặp, nó so sánh 82 với 39 để xem nó có chia hết không. Mã chỉ cần kiểm tra và bao gồm cả căn bậc hai của 82 vì nó sẽ không chứa bất kỳ yếu tố nào trên: 7Thay vì cố gắng xác định căn bậc hai của 82, hàm sử dụng vòng 06 để xem 07. Miễn là 07, vòng lặp đã đạt đến căn bậc hai của 82.Bên trong vòng 06, toán tử modulo kiểm tra xem 82 có chia hết bởi 39: 8Nếu 82 chia đều cho 39, thì 39 là yếu tố của 82 và một bộ phận của các yếu tố được thêm vào danh sách 97.Khi vòng lặp 06 hoàn tất, mã sẽ kiểm tra xem liệu có bất kỳ yếu tố bổ sung nào được tìm thấy không: 9Nếu có nhiều hơn một tuple tồn tại trong danh sách 97, thì 82 có thể là một số nguyên tố. Đối với các số phi dự án, các yếu tố được in ra. Đối với các số nguyên tố, hàm in một thông báo cho biết 82 là số nguyên tố.Cách thực hiện mật mãToán tử modulo Python có thể được sử dụng để tạo mật mã. Một mật mã là một loại thuật toán để thực hiện mã hóa và giải mã trên đầu vào, thường là văn bản. Trong phần này, bạn sẽ nhìn vào hai mật mã, mật mã Caesar và mật mã Vigenère.Caesar cipher and the Vigenère cipher. Caesar Mật mãMật mã đầu tiên mà bạn sẽ nhìn vào là Mật mã Caesar, được đặt theo tên của Julius Caesar, người đã sử dụng nó để bí mật truyền đạt các tin nhắn. Nó có một mật mã thay thế sử dụng thay thế chữ cái để mã hóa một chuỗi văn bản. Mật mã Caesar hoạt động bằng cách lấy một lá thư để được mã hóa và chuyển nó một số vị trí nhất định sang trái hoặc phải trong bảng chữ cái. Bất kỳ chữ cái nào ở vị trí đó được sử dụng làm ký tự được mã hóa. Giá trị thay đổi này được áp dụng cho tất cả các ký tự trong chuỗi. Ví dụ: nếu sự thay đổi là 3, thì 23 sẽ chuyển năm chữ cái để trở thành 24, 25 sẽ trở thành 26, v.v. Dưới đây bạn có thể thấy quá trình mã hóa cho văn bản 27 với sự thay đổi 3:Mật mã kết quả là 29.Giải mã mật mã được thực hiện bằng cách đảo ngược sự thay đổi. Cả hai quá trình mã hóa và giải mã đều có thể được mô tả với các biểu thức sau, trong đó 30 là chỉ số của ký tự trong bảng chữ cái: 0Mật mã này sử dụng toán tử modulo để đảm bảo rằng, khi chuyển một chữ cái, chỉ mục sẽ quấn xung quanh nếu kết thúc của bảng chữ cái. Bây giờ bạn đã biết cách thức hoạt động của mật mã này, hãy xem một triển khai: 1Mã này xác định một hàm gọi là 31, có hai tham số bắt buộc và một tham số tùy chọn:
34 được bao gồm để có thể sử dụng một hàm duy nhất để xử lý cả mã hóa và giải mã. Việc triển khai này chỉ có thể xử lý các ký tự chữ cái, do đó, chức năng trước tiên kiểm tra rằng 32 là ký tự chữ cái trong mã hóa ASCII: 2Hàm sau đó xác định ba biến để lưu trữ các ký tự 38 ASCII, các ký tự ____339 ASCII và kết quả mã hóa hoặc giải mã: 3Tiếp theo, nếu chức năng được sử dụng để giải mã 32, thì nó sẽ nhân 33 bằng 30 để làm cho nó thay đổi ngược: 4Cuối cùng, 31 vòng lặp trên các ký tự riêng lẻ trong 32 và thực hiện các hành động sau cho mỗi 45:
Sau khi vòng lặp kết thúc lặp lại giá trị 32, 54 được trả về: 5Đây là mã đầy đủ một lần nữa: 1Bây giờ hãy chạy mã trong Python Repling bằng văn bản 57 với sự thay đổi 58:>>> 7Kết quả được mã hóa là 59. Sử dụng văn bản được mã hóa này, bạn có thể chạy giải mã để lấy văn bản gốc:>>> 8Kết quả được mã hóa là 59. Sử dụng văn bản được mã hóa này, bạn có thể chạy giải mã để lấy văn bản gốc:Mật mã Caesar rất vui khi chơi xung quanh để giới thiệu về mật mã. Mặc dù mật mã Caesar hiếm khi được sử dụng một mình, nhưng nó là cơ sở cho các mật mã thay thế phức tạp hơn. Trong phần tiếp theo, bạn sẽ nhìn vào một trong những con cháu của Caesar Mật mã, mật mã Vigenère.Vigenère mật mã Mật mã Vigenère là một mật mã thay thế polyalphabetic. Để thực hiện mã hóa của nó, nó sử dụng một mật mã Caesar khác nhau cho mỗi chữ cái của văn bản đầu vào. Mật mã Vigenère sử dụng từ khóa để xác định mật mã Caesar nào nên được sử dụng để tìm chữ cái mật mã. Bạn có thể thấy một ví dụ về quá trình mã hóa trong hình ảnh sau. Trong ví dụ này, văn bản đầu vào 27 được mã hóa bằng từ khóa 61:Đối với mỗi chữ cái của văn bản đầu vào, 27, một chữ cái từ từ khóa 61 được sử dụng để xác định cột mật mã Caesar nào nên được chọn. Nếu từ khóa ngắn hơn văn bản đầu vào, như trường hợp với 61, thì các chữ cái của từ khóa được lặp lại cho đến khi tất cả các chữ cái của văn bản đầu vào đã được mã hóa. 9Dưới đây là một triển khai của mật mã Vigenère. Như bạn thấy, toán tử modulo được sử dụng hai lần trong hàm: 0Bạn có thể nhận thấy rằng chữ ký cho 65 khá giống với 31 từ phần trước:Sự khác biệt chính là, thay vì tham số 33, 65 có tham số 69, là từ khóa được sử dụng trong quá trình mã hóa và giải mã. Một điểm khác biệt khác là việc bổ sung 70. Dựa trên việc triển khai này, 65 chỉ có thể chấp nhận văn bản đầu vào là tất cả các chữ hoa. 1Giống như 31, 65 lặp lại trên mỗi chữ cái của văn bản đầu vào để mã hóa hoặc giải mã nó: 2Trong mã trên, bạn có thể thấy chức năng sử dụng đầu tiên của toán tử modulo: Ở đây, giá trị 74 được xác định dựa trên một chỉ mục được trả về từ 75. Chỉ mục này được sử dụng để chọn một chữ cái từ chuỗi 69, chẳng hạn như 77 từ 61.Toán tử modulo cho phép bạn sử dụng bất kỳ từ khóa độ dài nào bất kể độ dài của 32 sẽ được mã hóa. Khi chỉ mục 39, chỉ mục của ký tự hiện đang được mã hóa, bằng độ dài của từ khóa, nó sẽ bắt đầu lại từ đầu từ khóa.
Sử dụng 30 và 84 để lấy chỉ mục cho ký tự được mã hóa hoặc giải mã. 3Hãy xem các bước này trong mã bên dưới: Sau khi 15 được xác định, bạn tìm thấy chức năng sử dụng thứ hai của toán tử modulo: 4 91 đảm bảo rằng 15 của nhân vật không vượt quá 93, do đó đảm bảo nó ở bên trong bảng chữ cái. Với chỉ số này, ký tự được mã hóa hoặc giải mã được chọn từ 39 và được thêm vào 95.Tại đây, mã đầy đủ của mật mã Vigenère một lần nữa: 9Bây giờ hãy tiếp tục và chạy nó trong Python Repls: >>> 6Tốt đẹp! Bây giờ bạn có một mật mã Vigenère hoạt động để mã hóa các chuỗi văn bản. Nhà điều hành Modulo Python sử dụng nâng caoTrong phần cuối cùng này, bạn sẽ đưa kiến thức toán tử modulo của mình lên cấp độ tiếp theo bằng cách sử dụng nó với 08. Bạn cũng sẽ xem xét cách bạn có thể thêm 0 vào các lớp tùy chỉnh của mình để chúng có thể được sử dụng với toán tử modulo.Sử dụng toán tử modulo Python với 17 / 12 = 1 R 5 5 / 12 = 0 R 5 08Trước đó trong hướng dẫn này, bạn đã thấy cách bạn có thể sử dụng toán tử modulo với các loại số như 03 và 04 cũng như với 07. Bạn cũng có thể sử dụng toán tử modulo với 02 từ mô -đun 03. Bạn sử dụng 08 khi bạn muốn kiểm soát riêng biệt độ chính xác của các hoạt động số học dấu phẩy động.Dưới đây là một số ví dụ về việc sử dụng toàn bộ số nguyên với 08 và toán tử modulo:>>> 7Tốt đẹp! Bây giờ bạn có một mật mã Vigenère hoạt động để mã hóa các chuỗi văn bản. >>> 8Tốt đẹp! Bây giờ bạn có một mật mã Vigenère hoạt động để mã hóa các chuỗi văn bản. Nhà điều hành Modulo Python sử dụng nâng cao
>>> 9Tốt đẹp! Bây giờ bạn có một mật mã Vigenère hoạt động để mã hóa các chuỗi văn bản. >>> 0Tốt đẹp! Bây giờ bạn có một mật mã Vigenère hoạt động để mã hóa các chuỗi văn bản. Nhà điều hành Modulo Python sử dụng nâng cao Trong phần cuối cùng này, bạn sẽ đưa kiến thức toán tử modulo của mình lên cấp độ tiếp theo bằng cách sử dụng nó với 17 / 12 = 1 R 5 5 / 12 = 0 R 5 08. Bạn cũng sẽ xem xét cách bạn có thể thêm r = 8 - (-3 * trunc(8/-3)) r = 8 - (-3 * trunc(-2.666666666667)) r = 8 - (-3 * -2) # Rounded toward 0 r = 8 - 6 r = 2 0 vào các lớp tùy chỉnh của mình để chúng có thể được sử dụng với toán tử modulo.Sử dụng toán tử modulo Python với 08Trước đó trong hướng dẫn này, bạn đã thấy cách bạn có thể sử dụng toán tử modulo với các loại số như 03 và 04 cũng như với 07. Bạn cũng có thể sử dụng toán tử modulo với 02 từ mô -đun 03. Bạn sử dụng 08 khi bạn muốn kiểm soát riêng biệt độ chính xác của các hoạt động số học dấu phẩy động. 1Dưới đây là một số ví dụ về việc sử dụng toàn bộ số nguyên với 08 và toán tử modulo:Dưới đây là một số số điểm nổi được sử dụng với 08 và toán tử modulo: 2Tất cả các hoạt động của modulo với 08 trả về kết quả giống nhau như các loại số khác, ngoại trừ khi một trong các toán hạng là âm. Không giống như 03 và 04, nhưng như 07, 08 sử dụng dấu hiệu của cổ tức cho kết quả. 3Hãy xem các ví dụ dưới đây so sánh kết quả của việc sử dụng toán tử modulo với các giá trị tiêu chuẩn 03 và 04 và với 08:>>> 4Tốt đẹp! Bây giờ bạn có một mật mã Vigenère hoạt động để mã hóa các chuỗi văn bản. Nhà điều hành Modulo Python sử dụng nâng cao 5Trong phần cuối cùng này, bạn sẽ đưa kiến thức toán tử modulo của mình lên cấp độ tiếp theo bằng cách sử dụng nó với 08. Bạn cũng sẽ xem xét cách bạn có thể thêm 0 vào các lớp tùy chỉnh của mình để chúng có thể được sử dụng với toán tử modulo.Sử dụng toán tử modulo Python với 08 6Trước đó trong hướng dẫn này, bạn đã thấy cách bạn có thể sử dụng toán tử modulo với các loại số như 03 và 04 cũng như với 07. Bạn cũng có thể sử dụng toán tử modulo với 02 từ mô -đun 03. Bạn sử dụng 08 khi bạn muốn kiểm soát riêng biệt độ chính xác của các hoạt động số học dấu phẩy động. 7Dưới đây là một số ví dụ về việc sử dụng toàn bộ số nguyên với 08 và toán tử modulo:>>> 8Tốt đẹp! Bây giờ bạn có một mật mã Vigenère hoạt động để mã hóa các chuỗi văn bản. Nhà điều hành Modulo Python sử dụng nâng caoTrong phần cuối cùng này, bạn sẽ đưa kiến thức toán tử modulo của mình lên cấp độ tiếp theo bằng cách sử dụng nó với 08. Bạn cũng sẽ xem xét cách bạn có thể thêm 0 vào các lớp tùy chỉnh của mình để chúng có thể được sử dụng với toán tử modulo.Trong hướng dẫn này, bạn đã học được cách:
Với kiến thức mà bạn đã đạt được trong hướng dẫn này, giờ đây bạn có thể bắt đầu sử dụng toán tử modulo trong mã của riêng bạn với thành công lớn.Happy Pythoning! Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự.Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: Python Modulo: Sử dụng toán tử % This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Python Modulo: Using the % Operator |