Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Trong chương trình này, chúng tôi sẽ đọc hai số nguyên từ người dùng và tìm phần còn lại mà không sử dụng toán tử mô đun "%"

Chương trình/Mã nguồn

Mã nguồn để tìm phần còn lại mà không sử dụng toán tử mô đun '%' được cung cấp bên dưới. Chương trình đã cho được biên dịch và thực thi thành công

// Java program to find the remainder 
// without using the % operator

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner X = new Scanner(System.in);

    int num1 = 0;
    int num2 = 0;
    int rem = 0;

    System.out.printf("Enter first number: ");
    num1 = X.nextInt();

    System.out.printf("Enter second number: ");
    num2 = X.nextInt();

    rem = num1 - (num1 / num2) * num2;

    System.out.printf("Remainder is: %d", rem);
  }
}

đầu ra

Enter first number: 21
Enter second number: 4
Remainder is: 1

Giải trình

Trong chương trình trên, chúng tôi đã nhập "java. sử dụng. Scanner" để đọc đầu vào từ người dùng. Và, đã tạo một lớp công khai Chính. Nó chứa một phương thức tĩnh main(). Phương thức main() là điểm vào của chương trình. Ở đây, chúng tôi đọc hai số nguyên từ người dùng. Sau đó, chúng tôi tìm phần còn lại mà không sử dụng toán tử "%"

#bao gồm
chủ yếu()
{
int n,i,k;
float j,rem,a=9,b=10,c=1;
printf(“nhập số bị chia và số bị chia”);
scanf("%d%d",&n,&i);
j=(phao)n/i;
rem=(i-n/i)*i;
k =((j-n/i)*i);
if(rem>k && rem(float)k+(a/b))
ram=k+1;
khác nếu(rem>k && rem<(float)k+(c/b))
ram=k;
printf(“phần dư=%f”,rem);
getch();
}

Python hỗ trợ nhiều loại 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 (

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
0), trả về phần còn lại của phép chia hai số

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

  • Làm thế nào modulo hoạt động trong toán học
  • Cách sử dụng toán tử modulo Python với các kiểu số khác nhau
  • Cách Python tính toán kết quả của phép toán modulo
  • Cách ghi đè
    >>> 13.3 % 1.1
    0.09999999999999964
    
    >>> import math
    >>> math.fmod(13.3, 1.1)
    0.09999999999999964
    
    1 trong các lớp của bạn để sử dụng chúng với toán tử modulo
  • Cách sử dụng toán tử modulo Python để giải quyết các vấn đề trong thế giới thực

Toán tử modulo Python đôi khi có thể bị bỏ qua. Nhưng hiểu rõ về toán tử 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

Tiền thưởng miễn phí. Nhấp vào đây để nhận Bảng cheat Python và tìm hiểu kiến ​​thức cơ bản về Python 3, như làm việc với các kiểu dữ liệu, từ điển, danh sách và hàm Python

Modulo trong Toán học

Thuật ngữ modulo xuất phát từ một nhánh toán học gọi là số học modulo. Số học mô-đun xử lý số học số nguyên trên trục số tròn có một bộ số cố định. Tất cả các phép toán 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 được gọi là mô đun

Một ví dụ cổ điển về modulo trong số học modulo là đồng hồ mười hai giờ. Đồng hồ mười hai giờ có một bộ giá trị cố định, từ 1 đến 12. Khi đếm trên đồng hồ mười hai giờ, bạn đếm đến mô đun 12 rồi quay lại 1. Đồng hồ mười hai giờ có thể được phân loại là “modulo 12”, đôi khi được rút ngắn thành “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à lấy số tương đương bị ràng buộc trong phạm vi của mô đun

Ví dụ: giả sử bạn muốn xác định sau 8 giờ sẽ là mấy giờ. 00 một. m. Trên đồng hồ mười hai giờ, bạn không thể cộng 9 với 8 một cách đơn giản vì bạn sẽ nhận được 17. Bạn cần lấy kết quả, 17 và sử dụng

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
2 để nhận giá trị tương đương trong ngữ cảnh mười hai giờ

8 o'clock + 9 = 17 o'clock
17 mod 12 = 5

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
3 trả lại
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4. Điều này có nghĩa là chín giờ qua 8. 00 một. m. là 5. 00 giờ. m. Bạn xác định điều này bằng cách lấy số
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
5 và áp dụng nó vào ngữ cảnh
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
6

Bây giờ, nếu bạn nghĩ về nó,

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
5 và
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4 là tương đương trong ngữ cảnh
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
6. Nếu bạn nhìn vào kim giờ ở vị trí 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

a ≡ b (mod n)

Phương trình này viết “

8 % -3 = 2
0 và
8 % -3 = 2
1 đồng dư theo modulo
8 % -3 = 2
2. ” Điều này có nghĩa là
8 % -3 = 2
0 và
8 % -3 = 2
1 bằng nhau trong
8 % -3 = 2
5 vì chúng có cùng số dư khi chia cho
8 % -3 = 2
2. Trong phương trình trên,
8 % -3 = 2
2 là mô đun của cả
8 % -3 = 2
0 và
8 % -3 = 2
1. Sử dụng các giá trị
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
5 và
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4 từ trước đó, phương trình sẽ như thế này

17 ≡ 5 (mod 12)

Điều này có nghĩa là “

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
5 và
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4 là đồng dư theo modulo
a ≡ b (mod n)
04. ”
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
5 và
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4 có cùng số dư,
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4, khi chia cho
a ≡ b (mod n)
04. Vì vậy, trong
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
6, các số
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
5 và
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4 là tương đương

Bạn có thể xác nhận điều này bằng cách sử dụng phép chia

17 / 12 = 1 R 5
5 / 12 = 0 R 5

Cả hai phép toán đều có cùng số dư,

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4, vì vậy chúng tương đương theo modulo
a ≡ b (mod n)
04

Bây giờ, điều này có vẻ giống như rất nhiều phép toán đối với toán tử Python, nhưng việc có kiến ​​thức này sẽ giúp bạn chuẩn bị để 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 kiến ​​thức cơ bản về cách sử dụng toán tử modulo Python với các loại số

a ≡ b (mod n)
14 và
a ≡ b (mod n)
15

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

Khái niệm cơ bản về toán tử Modulo của Python

Toá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 kiểu số và. 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ư

a ≡ b (mod n)
18,
a ≡ b (mod n)
19 và các lớp của riêng bạn

Toán Tử Modulo Với a ≡ b (mod n) 14

Hầ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 phép chia Euclide tiêu chuẩn

>>>

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10

Hãy cẩn thận. Cũng giống như với toán tử chia (

a ≡ b (mod n)
21), Python sẽ trả về một giá trị
a ≡ b (mod n)
22 nếu bạn cố gắng sử dụng toán tử modulo với ước số là
a ≡ b (mod n)
23

>>>_______ 49 _______

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero

Tiếp theo, bạn sẽ xem cách sử dụng toán tử modulo với

a ≡ b (mod n)
15

Toán Tử Modulo Với a ≡ b (mod n) 15

Tương tự như

a ≡ b (mod n)
14, toán tử modulo được sử dụng với
a ≡ b (mod n)
15 sẽ trả về phần còn lại của phép chia, nhưng dưới dạng giá trị
a ≡ b (mod n)
15

>>>

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0

Một cách thay thế cho việc sử dụng

a ≡ b (mod n)
15 với toán tử modulo là sử dụng
a ≡ b (mod n)
18 để thực hiện các thao tác modulo trên các giá trị
a ≡ b (mod n)
15

>>>

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0

Các tài liệu chính thức của Python về toán tử modulo của Python khi làm việc với các giá trị

a ≡ b (mod n)
15 do cách mà
a ≡ b (mod n)
18 tính toán kết quả của phép toán modulo. Nếu bạn đang sử dụng toán hạng âm, thì bạn có thể thấy các kết quả khác nhau giữa
a ≡ b (mod n)
35 và
a ≡ b (mod n)
36. Bạn sẽ khám phá cách sử dụng toán tử modulo với toán hạng âm 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à

a ≡ b (mod n)
18 có thể gặp các vấn đề về làm tròn và độ chính xác khi xử lý số học dấu phẩy động

>>>

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964

Nếu việc duy trì độ chính xác của 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

a ≡ b (mod n)
19. Bạn sẽ nhìn vào cái này

Toán tử modulo với toán hạng âm

Tấ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 dương và trả về kết quả có thể dự đoán được. Khi một toán hạng âm được giới thiệu, mọi thứ trở nên phức tạp hơn

Hóa ra, cách mà máy tính xác định kết quả của phép toán modulo với toán hạng âm để lại sự mơ hồ về việc liệu phần còn lại sẽ lấy dấu của số bị chia (số bị chia) hay dấu của số chia (số bị chia). . Các ngôn ngữ lập trình khác nhau xử lý điều này khác nhau

Ví dụ, trong JavaScript, phần dư sẽ lấy dấu của số bị chia

8 % -3 = 2

Phần dư trong ví dụ này,

a ≡ b (mod n)
39, là số dương vì nó mang dấu của số bị chia,
a ≡ b (mod n)
40. Trong Python và các ngôn ngữ khác, phần còn lại sẽ lấy dấu của số chia

a ≡ b (mod n)
0

Ở đây bạn có thể thấy rằng phần còn lại,

a ≡ b (mod n)
41, lấy dấu của số chia,
a ≡ b (mod n)
42

Bạn có thể thắc mắc tại sao phần còn lại trong JavaScript là

a ≡ b (mod n)
39 và phần còn lại trong Python là
a ≡ b (mod n)
41. Điều này liên quan đến cách các ngôn ngữ khác nhau xác định kết quả của phép toán modulo. Các ngôn ngữ trong đó phần còn lại mang dấu hiệu của số bị chia sử dụng phương trình sau để xác định phần còn lại

a ≡ b (mod n)
1

Có ba biến phương trình này

  1. a ≡ b (mod n)
    
    45 là số còn lại
  2. 8 % -3 = 2
    
    0 là cổ tức
  3. 8 % -3 = 2
    
    2 là số chia

a ≡ b (mod n)
48 trong phương trình này có nghĩa là nó sử dụng phép chia cắt ngắn, phép chia này sẽ luôn làm tròn một số âm về 0. Để rõ hơn, hãy xem các bước của phép tính modulo bên dưới, sử dụng
a ≡ b (mod n)
40 làm số bị chia và
a ≡ b (mod n)
42 làm ước số

a ≡ b (mod n)
2

Tại đây, bạn có thể thấy cách một ngôn ngữ như JavaScript nhận được phần còn lại

a ≡ b (mod n)
39. Python và các ngôn ngữ khác trong đó phần còn lại lấy dấu của số chia sử dụng phương trình sau

a ≡ b (mod n)
3

a ≡ b (mod n)
52 trong phương trình này có nghĩa là nó sử dụng phép chia sàn. Với số dương, phép chia sàn sẽ trả về kết quả giống như phép chia cụt. Nhưng với số âm, phép chia sàn sẽ làm tròn kết quả xuống, cách xa số 0

a ≡ b (mod n)
4

Ở đây bạn có thể thấy rằng kết quả là

a ≡ b (mod n)
41

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 lại quan trọng nếu bạn chỉ sử dụng Python. Hóa ra, không phải tất cả các phép toán modulo trong Python đều giống nhau. Mặc dù modulo được sử dụng với các loại

a ≡ b (mod n)
14 và
a ≡ b (mod n)
15 sẽ lấy dấu của số chia, các loại khác sẽ không

Bạn có thể xem một ví dụ về điều này khi so sánh kết quả của

a ≡ b (mod n)
56 và
a ≡ b (mod n)
57

>>>

a ≡ b (mod n)
5

a ≡ b (mod n)
18 lấy dấu của số bị chia bằng cách sử dụng phép chia cắt ngắn, trong khi đó
a ≡ b (mod n)
15 sử dụng dấu của số chia. Ở phần sau của 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 số bị chia,
a ≡ b (mod n)
19

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

Toán tử Modulo và a ≡ b (mod n) 61

Python có chức năng tích hợp sẵn, sử dụng bên trong toán tử modulo.

a ≡ b (mod n)
61 nhận hai tham số và trả về một bộ dữ liệu chứa kết quả phân chia sàn và modulo bằng cách sử dụng các tham số được cung cấp

Dưới đây là một ví dụ về việc sử dụng

a ≡ b (mod n)
61 với
a ≡ b (mod n)
65 và
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4

>>>

a ≡ b (mod n)
6

Bạn có thể thấy rằng

a ≡ b (mod n)
67 trả về bộ dữ liệu
a ≡ b (mod n)
68.
a ≡ b (mod n)
69 là kết quả của sự phân chia tầng của
a ≡ b (mod n)
65 và
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4.
a ≡ b (mod n)
39 là kết quả của
a ≡ b (mod n)
65 modulo
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4

Dưới đây là một ví dụ trong đó tham số thứ hai là một số âm. Như đã thảo luận trong phần trước, khi toán tử modulo được sử dụng với một

a ≡ b (mod n)
14, phần còn lại sẽ lấy dấu của ước số

>>>

a ≡ b (mod n)
7

Bây giờ bạn đã có cơ hội thấy toán tử modulo được sử dụng trong một số trường hợp, điều quan trọng là hãy xem cách 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

Ưu tiên toán tử Modulo

Giố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. Toán tử modulo (

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
0) có cùng mức độ ưu tiên như toán tử nhân (
a ≡ b (mod n)
77), chia (
a ≡ b (mod n)
21) và chia sàn (
a ≡ b (mod n)
79)

Hãy xem một ví dụ về mức độ ưu tiên của toán tử modulo bên dưới

>>>

a ≡ b (mod n)
8

Cả 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. Sau đây là các bước thực hiện thao tác trên

  1. a ≡ b (mod n)
    
    80 được đánh giá, dẫn đến
    a ≡ b (mod n)
    
    81
  2. a ≡ b (mod n)
    
    82 được đánh giá, dẫn đến
    a ≡ b (mod n)
    
    83
  3. a ≡ b (mod n)
    
    83 được đánh giá, dẫn đến
    a ≡ b (mod n)
    
    85

Nếu bạn muốn ghi đè thứ tự ư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 thao tác mà bạn muốn được đánh giá trước

>>>

a ≡ b (mod n)
9

Trong ví dụ này,

a ≡ b (mod n)
86 được đánh giá đầu tiên, tiếp theo là
a ≡ b (mod n)
80 và cuối cùng là
a ≡ b (mod n)
88, bằng với
a ≡ b (mod n)
89

Toán tử Modulo Python trong thực tế

Bây giờ bạn đã tìm hiểu những kiến ​​thức cơ bản về toán tử modulo trong Python, bạn sẽ xem xét một số ví dụ về cách sử dụng toán tử này để 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ẽ cho bạn ý tưởng về nhiều cách nó có thể được sử dụng

Cách kiểm tra xem một số là chẵn hay lẻ

Trong 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ố là chẵn hay lẻ. Sử dụng toán tử modulo với modulo là

a ≡ b (mod n)
39, bạn có thể kiểm tra bất kỳ số nào để xem nó có chia hết cho
a ≡ b (mod n)
39 không. Nếu chia hết thì là số chẵn

Hãy xem

a ≡ b (mod n)
92 để kiểm tra xem tham số
a ≡ b (mod n)
93 có chẵn không

17 ≡ 5 (mod 12)
0

Ở đây

a ≡ b (mod n)
94 sẽ bằng
a ≡ b (mod n)
23 nếu
a ≡ b (mod n)
93 là chẵn và
a ≡ b (mod n)
89 nếu
a ≡ b (mod n)
93 là lẻ. Kiểm tra đối với
a ≡ b (mod n)
23 sẽ trả về giá trị Boolean của
17 ≡ 5 (mod 12)
00 hoặc
17 ≡ 5 (mod 12)
01 dựa trên việc
a ≡ b (mod n)
93 có chẵn hay không

Kiểm tra số lẻ hoàn toàn tương tự. Để kiểm tra một số lẻ, bạn đảo ngược kiểm tra đẳng thức

17 ≡ 5 (mod 12)
1

Hàm này sẽ trả về

17 ≡ 5 (mod 12)
00 nếu
a ≡ b (mod n)
94 không bằng
a ≡ b (mod n)
23, nghĩa là có một số dư chứng tỏ
a ≡ b (mod n)
93 là một số lẻ. Bây giờ, bạn có thể tự hỏi liệu bạn có thể sử dụng hàm sau để xác định xem
a ≡ b (mod n)
93 có phải là số lẻ không

17 ≡ 5 (mod 12)
2

Câu trả lời cho câu hỏi này là có và không. Về mặt kỹ thuật, hàm này sẽ hoạt động theo cách Python tính modulo với số nguyên. Điều đó nói rằng, bạn nên tránh so sánh kết quả của một phép toán modulo với

a ≡ b (mod n)
89 vì không phải tất cả các phép toán modulo trong Python sẽ trả về cùng một phần còn lại

Bạn có thể thấy tại sao trong các ví dụ sau

>>>

17 ≡ 5 (mod 12)
3

Trong ví dụ thứ hai, phần còn lại lấy dấu của ước số âm và trả về

a ≡ b (mod n)
41. Trong trường hợp này, kiểm tra Boolean
17 ≡ 5 (mod 12)
10 sẽ trả về
17 ≡ 5 (mod 12)
01

Tuy nhiên, nếu bạn so sánh phép toán modulo với

a ≡ b (mod n)
23, thì toán hạng nào âm không quan trọng. Kết quả sẽ luôn là
17 ≡ 5 (mod 12)
00 khi nó là một số chẵn

>>>

17 ≡ 5 (mod 12)
4

Nếu bạn cố gắng so sánh một phép toán modulo Python với

a ≡ b (mod n)
23, thì bạn sẽ không gặp bất kỳ vấn đề nào khi kiểm tra số chẵn và số lẻ hoặc bất kỳ bội số nào khác của một số trong mã của mình

Trong phần tiếp theo, bạn sẽ xem cách bạn có thể sử dụng toán tử modulo với các vòng lặp để kiểm soát luồng chương trình của mình

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

Cách chạy mã ở các khoảng thời gian cụ thể trong một vòng lặp

Với toán tử modulo của Python, bạn có thể chạy mã theo các khoảng thời gian cụ thể bên trong một vòng lặp. Điều này được thực hiện bằng cách thực hiện thao tác modulo với chỉ số hiện tại của vòng lặp và modulo. Số mô-đun xác định tần suất mã cụ thể theo khoảng thời gian sẽ chạy trong vòng lặp

Đây là một ví dụ

17 ≡ 5 (mod 12)
5

Mã này định nghĩa

17 ≡ 5 (mod 12)
15, có hai tham số.
17 ≡ 5 (mod 12)
16 là danh sách các tên nên được chia thành các hàng.
17 ≡ 5 (mod 12)
17 đặt mô-đun cho hoạt động, xác định hiệu quả số lượng tên nên có trong mỗi hàng.
17 ≡ 5 (mod 12)
15 sẽ lặp qua
17 ≡ 5 (mod 12)
16 và bắt đầu một hàng mới sau khi nó đạt giá trị
17 ≡ 5 (mod 12)
17

Trước khi chia nhỏ chức năng chi tiết hơn, hãy xem nó hoạt động

>>>

17 ≡ 5 (mod 12)
6

Như bạn có thể thấy, danh sách tên đã được chia thành ba hàng, với tối đa ba tên trong mỗi hàng.

17 ≡ 5 (mod 12)
17 mặc định là
17 ≡ 5 (mod 12)
22, nhưng bạn có thể chỉ định bất kỳ số nào

>>>

17 ≡ 5 (mod 12)
7

Bây giờ bạn đã thấy mã đang hoạt động, bạn có thể chia nhỏ những gì nó đang làm. Đầu tiên, nó sử dụng

17 ≡ 5 (mod 12)
23 để lặp lại trên
17 ≡ 5 (mod 12)
16, gán mục hiện tại trong danh sách là
17 ≡ 5 (mod 12)
25 và một giá trị đếm thành
17 ≡ 5 (mod 12)
26. Bạn có thể thấy rằng đối số tùy chọn
17 ≡ 5 (mod 12)
27 cho
17 ≡ 5 (mod 12)
23 được đặt thành
a ≡ b (mod n)
89. Điều này có nghĩa là số lượng
17 ≡ 5 (mod 12)
26 sẽ bắt đầu từ
a ≡ b (mod n)
89 thay vì
a ≡ b (mod n)
23

17 ≡ 5 (mod 12)
8

Tiếp theo, bên trong vòng lặp, hàm gọi

17 ≡ 5 (mod 12)
33 để xuất
17 ≡ 5 (mod 12)
25 ra hàng hiện tại. Tham số
17 ≡ 5 (mod 12)
35 cho
17 ≡ 5 (mod 12)
33 là một chuỗi rỗng (
17 ≡ 5 (mod 12)
37) vì vậy nó sẽ không xuất một dòng mới ở cuối chuỗi. Chuỗi f được chuyển đến
17 ≡ 5 (mod 12)
33, sử dụng chuỗi mà Python cung cấp

17 ≡ 5 (mod 12)
9

Không đi vào quá nhiều chi tiết, cú pháp

17 ≡ 5 (mod 12)
39 yêu cầu
17 ≡ 5 (mod 12)
33 thực hiện các thao tác sau

  • Xuất ra ít nhất
    17 ≡ 5 (mod 12)
    
    41 ký tự, ngay cả khi chuỗi ngắn hơn 15 ký tự
  • Căn giữa chuỗi
  • Điền vào bất kỳ khoảng trống nào ở bên phải hoặc bên trái của chuỗi bằng ký tự gạch nối (
    17 ≡ 5 (mod 12)
    
    42)

Bây giờ tên đã được in ra hàng, hãy xem phần chính của

17 ≡ 5 (mod 12)
15

17 / 12 = 1 R 5
5 / 12 = 0 R 5
0

Mã này thực hiện phép lặp hiện tại

17 ≡ 5 (mod 12)
26 và sử dụng toán tử modulo, so sánh nó với
17 ≡ 5 (mod 12)
17. Nếu kết quả bằng
a ≡ b (mod n)
23, thì nó có thể chạy mã theo khoảng thời gian cụ thể. Trong trường hợp này, hàm gọi
17 ≡ 5 (mod 12)
33 để thêm một dòng mới, bắt đầu một hàng mới

Đoạn mã trên chỉ là một ví dụ. Sử dụng mẫu

17 ≡ 5 (mod 12)
48 cho phép bạn chạy các mã khác nhau ở các khoảng thời gian cụ thể trong các vòng lặp của mình. Trong phần tiếp theo, bạn sẽ hiểu khái niệm này xa hơn một chút và xem xét phép lặp tuần hoàn

Cách tạo vòng lặp tuần hoàn

Lặp lại theo chu kỳ mô tả một loại lặp lại sẽ đặt lại khi đến một điểm nhất định. Nói chung, kiểu lặp này được sử dụng để hạn chế chỉ mục của phép lặp trong một phạm vi nhất định

Bạn có thể sử dụng toán tử modulo để tạo phép lặp tuần hoàn. Hãy xem một ví dụ sử dụng thư viện

17 ≡ 5 (mod 12)
49 để vẽ hình

17 / 12 = 1 R 5
5 / 12 = 0 R 5
1

Đoạn mã trên sử dụng vòng lặp vô hạn để vẽ hình ngôi sao lặp lại. Sau mỗi sáu lần lặp, nó thay đổi màu bút. Kích thước bút tăng lên với mỗi lần lặp lại cho đến khi

17 ≡ 5 (mod 12)
50 được đặt lại thành
a ≡ b (mod n)
23. 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

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Các phần quan trọng của mã này được đánh dấu bên dưới

17 / 12 = 1 R 5
5 / 12 = 0 R 5
2

Mỗi lần qua vòng lặp,

17 ≡ 5 (mod 12)
50 được cập nhật dựa trên kết quả của
17 ≡ 5 (mod 12)
53. Giá trị
17 ≡ 5 (mod 12)
50 mới này được sử dụng để tăng
17 ≡ 5 (mod 12)
55 với mỗi lần lặp lại. Khi
17 ≡ 5 (mod 12)
50 đạt tới
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4,
17 ≡ 5 (mod 12)
53 sẽ bằng với
a ≡ b (mod n)
23 và
17 ≡ 5 (mod 12)
50 sẽ đặt lại thành
a ≡ b (mod n)
23

Bạn có thể xem các bước lặp bên dưới để rõ hơn

17 / 12 = 1 R 5
5 / 12 = 0 R 5
3

Khi

17 ≡ 5 (mod 12)
50 được đặt lại thành
a ≡ b (mod n)
23, thì
17 ≡ 5 (mod 12)
64 sẽ chuyển sang màu ngẫu nhiên mới như bên dưới

17 / 12 = 1 R 5
5 / 12 = 0 R 5
4

Mã trong phần này sử dụng

17 ≡ 5 (mod 12)
65 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ị
17 ≡ 5 (mod 12)
50

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

Cách chuyển đổi đơn vị

Trong phần này, bạn sẽ xem cách bạn có thể sử dụng toán tử modulo để chuyển đổi đơn vị. Các ví dụ sau 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 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 cho đơn vị lớn hơn

Trong ví dụ đầu tiên này, bạn sẽ chuyển đổi inch thành feet. Toán tử modulo được sử dụng để lấy các inch còn lại không chia đều thành các feet. Toán tử chia tầng (

a ≡ b (mod n)
79) được sử dụng để lấy tổng số feet làm tròn xuống

17 / 12 = 1 R 5
5 / 12 = 0 R 5
5

Đây là một ví dụ về chức năng được sử dụng

>>>

17 / 12 = 1 R 5
5 / 12 = 0 R 5
6

Như bạn có thể thấy từ kết quả,

17 ≡ 5 (mod 12)
68 trả về
17 ≡ 5 (mod 12)
65, là số inch còn lại không được chia đều cho feet. Kết quả của
17 ≡ 5 (mod 12)
70 là
a ≡ b (mod n)
65, là tổng số feet mà các inch được chia đều

Bạn có thể làm điều này xa hơn một chút trong ví dụ tiếp theo này.

17 ≡ 5 (mod 12)
72 lấy một số nguyên,
17 ≡ 5 (mod 12)
73, đại diện cho một số phút và xuất ra khoảng thời gian tính bằng ngày, giờ và phút

17 / 12 = 1 R 5
5 / 12 = 0 R 5
7

Phá vỡ điều này, bạn có thể thấy rằng chức năng thực hiện như sau

  1. Xác định tổng số ngày chia đều với
    17 ≡ 5 (mod 12)
    
    74, trong đó
    17 ≡ 5 (mod 12)
    
    75 là số phút trong một ngày
  2. Tính toán bất kỳ
    17 ≡ 5 (mod 12)
    
    76 nào còn lại với
    17 ≡ 5 (mod 12)
    
    77
  3. Sử dụng
    17 ≡ 5 (mod 12)
    
    76 để lấy số chia hết cho số
    17 ≡ 5 (mod 12)
    
    79 và bất kỳ số dư nào cho số
    17 ≡ 5 (mod 12)
    
    80

Bạn có thể xem cách nó hoạt động dưới đây

>>>

17 / 12 = 1 R 5
5 / 12 = 0 R 5
8

Mặc dù các ví dụ trên chỉ giải quyết việc chuyển đổi inch sang feet và phút sang ngày, nhưng bạn có thể sử dụng bất kỳ loại đơn vị nào có toán tử modulo để chuyển đổi một đơn vị nhỏ hơn thành đơn vị lớn hơn

Ghi chú. Cả hai ví dụ trên có thể được sửa đổi để sử dụng

a ≡ b (mod n)
61 để làm cho mã ngắn gọn hơn. Nếu bạn còn nhớ,
a ≡ b (mod n)
61 trả về một bộ dữ liệu chứa kết quả của phép chia sàn và modulo bằng cách sử dụng các tham số được cung cấp

Dưới đây, các toán tử chia tầng và modulo đã được thay thế bằng

a ≡ b (mod n)
61

17 / 12 = 1 R 5
5 / 12 = 0 R 5
9

Như bạn có thể thấy,

17 ≡ 5 (mod 12)
84 trả về một bộ, được giải nén thành
17 ≡ 5 (mod 12)
85 và
17 ≡ 5 (mod 12)
86

Nếu bạn thử chức năng cập nhật này, thì bạn sẽ nhận được kết quả giống như trước đây

>>>

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
0

Bạn nhận được kết quả tương tự, nhưng bây giờ mã ngắn gọn hơn. Bạn cũng có thể cập nhật

17 ≡ 5 (mod 12)
72

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
1

Sử dụng

a ≡ b (mod n)
61, hàm dễ đọc hơn phiên bản trước và trả về kết quả tương tự

>>>

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
2

Việc sử dụng

a ≡ b (mod n)
61 không cần thiết cho mọi trường hợp, nhưng nó có ý nghĩa ở đây vì tính toán chuyển đổi đơn vị sử dụng cả phép chia sàn và modulo

Bây giờ bạn đã biết cách sử dụng toán tử modulo để chuyển đổi đơn vị, trong phần tiếp theo, bạn sẽ xem cách bạn có thể sử dụng toán tử modulo để kiểm tra các số nguyên tố

Cách để Xác định xem một số có phải là số nguyên tố hay không

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ố hay không. Số nguyên tố là số chỉ chứa hai ước là

a ≡ b (mod n)
89 và chính nó. Một số ví dụ về số nguyên tố là
a ≡ b (mod n)
39,
17 ≡ 5 (mod 12)
22,
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4,
a ≡ b (mod n)
69,
17 ≡ 5 (mod 12)
95,
17 ≡ 5 (mod 12)
96,
17 ≡ 5 (mod 12)
97,
17 ≡ 5 (mod 12)
98 và
17 ≡ 5 (mod 12)
99

Đoạn mã dưới đây là một triển khai để xác định tính nguyên tố của một số bằng cách sử dụng toán tử modulo

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
3

Mã này định nghĩa

17 / 12 = 1 R 5
5 / 12 = 0 R 5
00, lấy tham số
a ≡ b (mod n)
93 và kiểm tra xem đó có phải là số nguyên tố không. Nếu đúng như vậy, thì một thông báo sẽ hiển thị cho biết rằng
a ≡ b (mod n)
93 là một số nguyên tố. Nếu nó không phải là số nguyên tố, thì một thông báo sẽ được hiển thị với tất cả các thừa số của số đó

Ghi chú. Đoạn mã trên không phải là cách hiệu quả nhất để kiểm tra các số nguyên tố. Nếu bạn muốn tìm hiểu sâu hơn, thì hãy xem Sàng của Eratosthenes và Sàng của Atkin để biết ví dụ về các thuật toán hiệu quả hơn để tìm số nguyên tố

Trước khi bạn xem xét kỹ hơn về chức năng, đây là kết quả sử dụng một số số khác nhau

>>>

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
4

Đi sâu vào mã, bạn có thể thấy nó bắt đầu bằng cách kiểm tra xem

a ≡ b (mod n)
93 có nhỏ hơn
a ≡ b (mod n)
39 không. Số nguyên tố chỉ có thể lớn hơn hoặc bằng
a ≡ b (mod n)
39. Nếu
a ≡ b (mod n)
93 nhỏ hơn
a ≡ b (mod n)
39 thì hàm không cần tiếp tục. Nó sẽ
17 ≡ 5 (mod 12)
33 một tin nhắn và
17 / 12 = 1 R 5
5 / 12 = 0 R 5
09

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
5

Nếu

a ≡ b (mod n)
93 lớn hơn
a ≡ b (mod n)
39, thì hàm sẽ kiểm tra xem
a ≡ b (mod n)
93 có phải là số nguyên tố không. Để kiểm tra điều này, hàm lặp lại trên tất cả các số giữa
a ≡ b (mod n)
39 và căn bậc hai của
a ≡ b (mod n)
93 để xem liệu có bất kỳ số nào chia đều cho
a ≡ b (mod n)
93. Nếu một trong các số chia hết thì đã tìm được thừa số và
a ≡ b (mod n)
93 không thể là số nguyên tố

Đây là phần chính của chức năng

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
6

Có rất nhiều thứ để giải nén ở đây, vì vậy hãy thực hiện từng bước một

Đầu tiên, một danh sách

17 / 12 = 1 R 5
5 / 12 = 0 R 5
17 được tạo với các thừa số ban đầu,
17 / 12 = 1 R 5
5 / 12 = 0 R 5
18. 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

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
7

Tiếp theo, bắt đầu với

a ≡ b (mod n)
39, mã tăng dần
17 ≡ 5 (mod 12)
50 cho đến khi đạt đến căn bậc hai của
a ≡ b (mod n)
93. Tại mỗi lần lặp, nó so sánh
a ≡ b (mod n)
93 với
17 ≡ 5 (mod 12)
50 để xem nó có chia hết không. Mã chỉ cần kiểm tra đến và bao gồm căn bậc hai của
a ≡ b (mod n)
93 vì nó sẽ không chứa bất kỳ thừa số nào ở trên này

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
8

Thay vì cố gắng xác định căn bậc hai của

a ≡ b (mod n)
93, hàm sử dụng vòng lặp
17 / 12 = 1 R 5
5 / 12 = 0 R 5
26 để xem liệu
17 / 12 = 1 R 5
5 / 12 = 0 R 5
27. Miễn là
17 / 12 = 1 R 5
5 / 12 = 0 R 5
27, vòng lặp chưa đạt đến căn bậc hai của
a ≡ b (mod n)
93

Bên trong vòng lặp

17 / 12 = 1 R 5
5 / 12 = 0 R 5
26, toán tử modulo kiểm tra xem
a ≡ b (mod n)
93 có chia hết cho
17 ≡ 5 (mod 12)
50 không

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
9

Nếu

a ≡ b (mod n)
93 chia hết cho
17 ≡ 5 (mod 12)
50, thì
17 ≡ 5 (mod 12)
50 là thừa số của
a ≡ b (mod n)
93 và một bộ các thừa số được thêm vào danh sách
17 / 12 = 1 R 5
5 / 12 = 0 R 5
17

Khi vòng lặp

17 / 12 = 1 R 5
5 / 12 = 0 R 5
26 hoàn tất, mã sẽ kiểm tra xem có tìm thấy yếu tố bổ sung nào không

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
0

Nếu có nhiều hơn một bộ trong danh sách

17 / 12 = 1 R 5
5 / 12 = 0 R 5
17, thì
a ≡ b (mod n)
93 không thể là số nguyên tố. Đối với các số không nguyên tố, các thừa số được in ra. Đối với số nguyên tố, hàm in ra thông báo cho biết
a ≡ b (mod n)
93 là số nguyên tố

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

Cách triển khai mật mã

Toán tử modulo Python có thể được sử dụng để tạo mật mã. 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ẽ xem xét hai loại mật mã, mật mã Caesar và mật mã Vigenère

Mật mã Caesar

Mật mã đầu tiên mà bạn sẽ xem xét là mật mã Caesar, được đặt theo tên của Julius Caesar, người đã sử dụng nó để bí mật liên lạc các thông điệp. Đó là 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 chữ cái cần mã hóa và dịch chuyển nó sang trái hoặc phải một số vị trí nhất định 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 tương tự 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à

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4, thì
17 / 12 = 1 R 5
5 / 12 = 0 R 5
43 sẽ thay đổi năm chữ cái để trở thành
17 / 12 = 1 R 5
5 / 12 = 0 R 5
44,
17 / 12 = 1 R 5
5 / 12 = 0 R 5
45 sẽ trở thành
17 / 12 = 1 R 5
5 / 12 = 0 R 5
46, v.v. Dưới đây, bạn có thể thấy quy trình mã hóa cho văn bản
17 / 12 = 1 R 5
5 / 12 = 0 R 5
47 với độ dịch chuyển là
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
4

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Mật mã kết quả là

17 / 12 = 1 R 5
5 / 12 = 0 R 5
49

Giải mã mật mã được thực hiện bằng cách đảo ngược sự thay đổi. Cả quá trình mã hóa và giải mã có thể được mô tả bằng các biểu thức sau, trong đó

17 / 12 = 1 R 5
5 / 12 = 0 R 5
50 là chỉ mục của ký tự trong bảng chữ cái

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
1

Mật mã này sử dụng toán tử modulo để đảm bảo rằng, khi dịch chuyển một chữ cái, chỉ mục sẽ bao quanh nếu đến cuối 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 cách triển khai

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
2

Mã này định nghĩa một hàm có tên là

17 / 12 = 1 R 5
5 / 12 = 0 R 5
51, có hai tham số bắt buộc và một tham số tùy chọn

  • 17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    52 là văn bản sẽ được mã hóa hoặc giải mã
  • 17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    53 là số vị trí để dịch chuyển từng chữ cái
  • 17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    54 là Boolean để đặt nếu
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    52 nên được giải mã

17 / 12 = 1 R 5
5 / 12 = 0 R 5
54 được bao gồm để có thể sử dụng một chức năng 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 đó, trước tiên, hàm sẽ kiểm tra xem
17 / 12 = 1 R 5
5 / 12 = 0 R 5
52 có phải là ký tự chữ cái trong bảng mã ASCII không

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
3

Sau đó, hàm xác định ba biến để lưu trữ

17 / 12 = 1 R 5
5 / 12 = 0 R 5
58 ký tự ASCII,
17 / 12 = 1 R 5
5 / 12 = 0 R 5
59 ký tự ASCII và kết quả mã hóa hoặc giải mã

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
4

Tiếp theo, nếu hàm đang được sử dụng để giải mã

17 / 12 = 1 R 5
5 / 12 = 0 R 5
52, thì hàm này sẽ nhân
17 / 12 = 1 R 5
5 / 12 = 0 R 5
53 với
a ≡ b (mod n)
41 để dịch chuyển ngược lại

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
5

Cuối cùng,

17 / 12 = 1 R 5
5 / 12 = 0 R 5
51 lặp lại các ký tự riêng lẻ trong
17 / 12 = 1 R 5
5 / 12 = 0 R 5
52 và thực hiện các hành động sau cho từng ký tự
17 / 12 = 1 R 5
5 / 12 = 0 R 5
65

  1. Kiểm tra xem
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    65 là chữ thường hay chữ hoa
  2. Lấy
    17 ≡ 5 (mod 12)
    
    26 của
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    65 trong danh sách
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    58 hoặc
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    59 ASCII
  3. Thêm một
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    53 vào
    17 ≡ 5 (mod 12)
    
    26 này để xác định chỉ mục của ký tự mật mã sẽ sử dụng
  4. Sử dụng
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    73 để đảm bảo ca làm việc sẽ quay trở lại đầu bảng chữ cái
  5. Nối ký tự mật mã vào chuỗi
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    74

Sau khi vòng lặp hoàn thành việc lặp qua giá trị

17 / 12 = 1 R 5
5 / 12 = 0 R 5
52, giá trị
17 / 12 = 1 R 5
5 / 12 = 0 R 5
74 được trả về

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
6

Đây là mã đầy đủ một lần nữa

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
2

Bây giờ hãy chạy mã trong Python REPL bằng cách sử dụng văn bản

17 / 12 = 1 R 5
5 / 12 = 0 R 5
77 với độ dịch chuyển là
17 / 12 = 1 R 5
5 / 12 = 0 R 5
78

>>>

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
8

Kết quả được mã hóa là

17 / 12 = 1 R 5
5 / 12 = 0 R 5
79. 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

>>>

>>> 22 % 0
ZeroDivisionError: integer division or modulo by zero
9

Mật mã Caesar rất thú vị để chơi xung quanh phần giới thiệu về mật mã. Mặc dù mật mã Caesar hiếm khi được sử dụng riêng, 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ẽ xem xét một trong những hậu duệ của mật mã Caesar, mật mã Vigenère

Mật mã Vigenère

Mật mã Vigenère là một mật mã thay thế đa bảng chữ cái. Để thực hiện mã hóa, nó sử dụng một mật mã Caesar khác cho mỗi chữ cái của văn bản đầu vào. Mật mã Vigenère sử dụng một từ khóa để xác định nên sử dụng mật mã Caesar nào để tìm chữ cái mật mã

Bạn có thể xem 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

17 / 12 = 1 R 5
5 / 12 = 0 R 5
47 được mã hóa bằng từ khóa
17 / 12 = 1 R 5
5 / 12 = 0 R 5
81

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Đối với mỗi chữ cái của văn bản đầu vào,

17 / 12 = 1 R 5
5 / 12 = 0 R 5
47, một chữ cái từ từ khóa
17 / 12 = 1 R 5
5 / 12 = 0 R 5
81 được sử dụng để xác định cột mật mã Caesar nào sẽ được chọn. Nếu từ khóa ngắn hơn văn bản đầu vào, như trường hợp của
17 / 12 = 1 R 5
5 / 12 = 0 R 5
81, thì các chữ cái của từ khóa sẽ đượ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

Dưới đây là một triển khai của mật mã Vigenère. Như bạn sẽ thấy, toán tử modulo được sử dụng hai lần trong hàm

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
0

Bạn có thể nhận thấy rằng chữ ký của

17 / 12 = 1 R 5
5 / 12 = 0 R 5
85 khá giống với
17 / 12 = 1 R 5
5 / 12 = 0 R 5
51 ở phần trước

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
1

Sự khác biệt chính là, thay vì tham số

17 / 12 = 1 R 5
5 / 12 = 0 R 5
53,
17 / 12 = 1 R 5
5 / 12 = 0 R 5
85 lấy tham số
17 / 12 = 1 R 5
5 / 12 = 0 R 5
89, 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 nữa là việc bổ sung
17 / 12 = 1 R 5
5 / 12 = 0 R 5
90. Dựa trên triển khai này,
17 / 12 = 1 R 5
5 / 12 = 0 R 5
85 chỉ có thể chấp nhận văn bản đầu vào là chữ hoa

Giống như

17 / 12 = 1 R 5
5 / 12 = 0 R 5
51,
17 / 12 = 1 R 5
5 / 12 = 0 R 5
85 lặp lại từng chữ cái của văn bản đầu vào để mã hóa hoặc giải mã nó

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
2

Trong đoạn mã trên, bạn có thể thấy lần đầu tiên hàm sử dụng toán tử modulo

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
3

Ở đây, giá trị

17 / 12 = 1 R 5
5 / 12 = 0 R 5
94 được xác định dựa trên một chỉ mục được trả về từ
17 / 12 = 1 R 5
5 / 12 = 0 R 5
95. Chỉ mục này được sử dụng để chọn một chữ cái từ chuỗi
17 / 12 = 1 R 5
5 / 12 = 0 R 5
89, chẳng hạn như
17 / 12 = 1 R 5
5 / 12 = 0 R 5
97 từ
17 / 12 = 1 R 5
5 / 12 = 0 R 5
81

Toán tử modulo cho phép bạn sử dụng bất kỳ từ khóa có độ dài nào bất kể độ dài của

17 / 12 = 1 R 5
5 / 12 = 0 R 5
52 được mã hóa. Khi chỉ số
17 ≡ 5 (mod 12)
50, chỉ số của ký tự hiện đang được mã hóa, bằng với độ dài của từ khóa, nó sẽ bắt đầu lại từ đầu của từ khóa

Đối với mỗi chữ cái của văn bản đầu vào, một số bước xác định cách mã hóa hoặc giải mã nó

  1. Xác định
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    50 dựa trên chỉ số của
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    65 bên trong
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    59
  2. Xác định
    >>> 15 % 4
    3
    
    >>> 17 % 12
    5
    
    >>> 240 % 13
    6
    
    >>> 10 % 16
    10
    
    04 dựa trên chỉ số của
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    94 bên trong
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    59
  3. Sử dụng
    17 / 12 = 1 R 5
    5 / 12 = 0 R 5
    
    50 và
    >>> 15 % 4
    3
    
    >>> 17 % 12
    5
    
    >>> 240 % 13
    6
    
    >>> 10 % 16
    10
    
    04 để lấy chỉ mục cho ký tự được mã hóa hoặc giải mã

Hãy xem các bước này trong đoạn mã dưới đây

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
4

Bạn có thể thấy rằng các chỉ số để giải mã và mã hóa được tính khác nhau. Đó là lý do tại sao

17 / 12 = 1 R 5
5 / 12 = 0 R 5
54 được sử dụng trong chức năng này. Bằng cách này, bạn có thể sử dụng chức năng cho cả mã hóa và giải mã

Sau khi xác định được

17 ≡ 5 (mod 12)
26, bạn thấy cách sử dụng toán tử modulo thứ hai của hàm

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
5

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
11 đảm bảo rằng
17 ≡ 5 (mod 12)
26 của ký tự không vượt quá
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
13, do đó đảm bảo rằng nó nằm trong bảng chữ cái. Với chỉ mục này, ký tự được mã hóa hoặc giải mã được chọn từ
17 / 12 = 1 R 5
5 / 12 = 0 R 5
59 và được thêm vào
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
15

Đây là mã đầy đủ của mật mã Vigenère một lần nữa

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
0

Bây giờ hãy tiếp tục và chạy nó trong Python REPL

>>>

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
7

Đẹp. Bây giờ bạn có một mật mã Vigenère đang hoạt động để mã hóa các chuỗi văn bản

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

Sử dụng nâng cao Toán tử Modulo trong Python

Trong phần cuối cùng này, bạn sẽ nâng kiến ​​thức về toán tử modulo của mình lên một tầm cao mới bằng cách sử dụng nó với

a ≡ b (mod n)
19. Bạn cũng sẽ xem cách bạn có thể thêm
>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
1 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 của Python với a ≡ b (mod n) 19

Trướ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ư

a ≡ b (mod n)
14 và
a ≡ b (mod n)
15 cũng như với
a ≡ b (mod n)
18. Bạn cũng có thể sử dụng toán tử modulo với từ mô-đun
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
23. Bạn sử dụng
a ≡ b (mod n)
19 khi bạn muốn kiểm soát rời rạc độ chính xác của các phép toán số học dấu chấm động

Dưới đây là một số ví dụ về việc sử dụng số nguyên nguyên với

a ≡ b (mod n)
19 và toán tử modulo

>>>

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
8

Dưới đây là một số số dấu phẩy động được sử dụng với

a ≡ b (mod n)
19 và toán tử modulo

>>>

>>> 12.5 % 5.5
1.5

>>> 17.0 % 12.0
5.0
9

Tất cả các hoạt động modulo với ____13_______19 đều trả về kết quả giống như các loại số khác, ngoại trừ khi một trong các toán hạng là số âm. Không giống như

a ≡ b (mod n)
14 và
a ≡ b (mod n)
15, nhưng giống như
a ≡ b (mod n)
18,
a ≡ b (mod n)
19 sử dụng dấu hiệu của số bị chia cho kết quả

Hãy xem các ví dụ bên dưới 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

a ≡ b (mod n)
14 và
a ≡ b (mod n)
15 và với
a ≡ b (mod n)
19

>>>

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
0

So với

a ≡ b (mod n)
18 thì
a ≡ b (mod n)
19 sẽ có cùng dấu, nhưng độ chính xác sẽ khác

>>>

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
1

Như bạn có thể thấy từ các ví dụ trên, làm việc với

a ≡ b (mod n)
19 và toán tử modulo cũng tương tự như làm việc với các kiểu số khác. Bạn chỉ cần lưu ý cách xác định dấu của kết quả khi làm việc với toán hạng âm

Trong phần tiếp theo, bạn sẽ xem cách bạn có thể ghi đè toán tử modulo trong các lớp của mình để tùy chỉnh hành vi của nó

Sử dụng toán tử Modulo Python với các lớp tùy chỉnh

Mô hình dữ liệu Python cho phép bạn ghi đè các phương thức tích hợp sẵn trong đối tượng Python để tùy chỉnh hành vi của nó. Trong phần này, bạn sẽ xem cách ghi đè

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
1 để bạn có thể sử dụng toán tử modulo với các lớp của riêng mình

Trong ví dụ này, bạn sẽ làm việc với lớp

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39. Lớp này sẽ theo dõi lượng thời gian học sinh đã học. Đây là lớp
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39 ban đầu

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
2

Lớp

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39 được khởi tạo với tham số
17 ≡ 5 (mod 12)
25 và bắt đầu với một danh sách trống,
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
43, danh sách này sẽ chứa danh sách các số nguyên biểu thị số phút học mỗi phiên. Ngoài ra còn có
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
44, lấy tham số
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
45 là danh sách các buổi học để thêm vào
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
43

Bây giờ, nếu bạn còn nhớ từ phần trên,

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
47 đã sử dụng toán tử modulo Python để chuyển đổi
17 ≡ 5 (mod 12)
73 thành ngày, giờ và phút. Bây giờ, bạn sẽ triển khai một phiên bản sửa đổi của phương thức đó để xem cách bạn có thể sử dụng lớp tùy chỉnh của mình với toán tử modulo

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
3

Bạn có thể sử dụng chức năng này với lớp

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39 để hiển thị tổng số giờ mà một
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39 đã học. Kết hợp với lớp
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39 ở trên, mã sẽ như thế này

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
4

Nếu bạn tải mô-đun này trong Python REPL, thì bạn có thể sử dụng nó như thế này

>>>

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
5

Đoạn mã trên in ra tổng số giờ

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
52 đã học. Phiên bản mã này hoạt động, nhưng nó yêu cầu thêm bước tính tổng
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
43 để có được
17 ≡ 5 (mod 12)
73 trước khi gọi
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
55

Đây là cách bạn có thể sửa đổi lớp

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39 để đơn giản hóa mã

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
6

Bằng cách ghi đè

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
1 và
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
58, bạn có thể sử dụng một thể hiện
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39 với toán tử modulo. Tính toán
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
60 của
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
43 cũng được bao gồm trong lớp
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39

Với những sửa đổi này, bạn có thể sử dụng phiên bản

>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
39 trực tiếp trong
>>> 15 % 4
3

>>> 17 % 12
5

>>> 240 % 13
6

>>> 10 % 16
10
55. Vì
17 ≡ 5 (mod 12)
73 không còn cần thiết nữa, bạn có thể xóa nó

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
7

Đây là mã đầy đủ sau khi sửa đổi

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
8

Bây giờ, gọi mã trong Python REPL, bạn có thể thấy nó ngắn gọn hơn nhiều

>>>

>>> import math
>>> math.fmod(12.5, 5.5)
1.5

>>> math.fmod(8.5, 2.5)
1.0
9

Bằng cách ghi đè

>>> 13.3 % 1.1
0.09999999999999964

>>> import math
>>> math.fmod(13.3, 1.1)
0.09999999999999964
1, bạn cho phép các lớp tùy chỉnh của mình hoạt động giống các kiểu số tích hợp sẵn của Python hơn

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

Phần kết luận

Thoạt nhìn, toán tử modulo Python có thể không thu hút sự chú ý của bạn. Tuy nhiên, như bạn đã thấy, có rất nhiều điều đối với nhà điều hành khiêm tốn này. Từ việc kiểm tra các số chẵn đến mã hóa văn bản bằng mật mã, bạn đã thấy nhiều cách sử dụng khác nhau cho toán tử modulo

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

  • Sử dụng toán tử modulo với
    a ≡ b (mod n)
    
    14,
    a ≡ b (mod n)
    
    15,
    a ≡ b (mod n)
    
    18,
    a ≡ b (mod n)
    
    61 và
    a ≡ b (mod n)
    
    19
  • Tính toán kết quả của một hoạt động modulo
  • Giải quyết các vấn đề trong thế giới thực bằng cách sử dụng toán tử modulo
  • Ghi đè
    >>> 13.3 % 1.1
    0.09999999999999964
    
    >>> import math
    >>> math.fmod(13.3, 1.1)
    0.09999999999999964
    
    1 trong các lớp của riêng bạn để sử dụng chúng với toán tử modulo

Với kiến ​​thức bạn đã thu đượ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 mình một cách thành công. Python hạnh phúc

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

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Mô-đun Python. Sử dụng Toán tử %

🐍 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

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

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

Giới thiệu về Jason Van Schooneveld

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?
Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Jason là một nhà phát triển phần mềm có trụ sở tại Đài Bắc. Khi anh ấy không mày mò về điện tử hoặc xây dựng ứng dụng web Django, bạn có thể thấy anh ấy đi bộ đường dài trên những ngọn núi ở Đài Loan hoặc học tiếng Trung.

» Thông tin thêm về Jason


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à

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Aldren

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Geir Arne

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Jim

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Joanna

Làm thế nào để bạn tìm thấy phần còn lại trong python mà không cần mô-đun?

Gia-cốp

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 »

Chuyên gia 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. 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

Toán tử còn lại trong Python là gì?

Toán tử mô đun, đôi khi còn được gọi là toán tử số dư hoặc toán tử số dư số nguyên hoạt động trên số nguyên (và biểu thức số nguyên) và cho kết quả là số dư khi toán hạng thứ nhất được chia cho toán hạng thứ hai. Trong Python, toán tử mô đun là dấu phần trăm ( % ) . Cú pháp giống như đối với các toán tử khác.

Để tìm số dư ta dùng lệnh gì?

Lấy phần còn lại bằng cách sử dụng toán tử % . Các biểu thức dùng trong chương trình tính thương và số dư. thương = số bị chia/số bị chia; . Chương trình sẽ ném ra một ArithmeticException. / bằng 0 khi chia cho 0.

Là mod giống như phần còn lại?

Cả hai đều khá giống nhau . Sự khác biệt là REMAINDER sử dụng ROUND trong phép tính của nó và MOD sử dụng hàm FLOOR. TRÒN có thể đi lên hoặc đi xuống, nhưng SÀN luôn luôn đi xuống. Sự khác biệt chính là khi bạn sử dụng số âm.