Phép chia và phép chia tầng trong Python là gì?

Sự khác biệt là đây. Phép chia thông thường, /, sẽ thực hiện nhiệm vụ chia cho T. Phép chia sàn, //, sẽ cho bạn biết số lần một số khớp với số khác mà không có bất kỳ dấu thập phân hay phần dư nào. Thí dụ. 24/13 = 1. 867. 24//13 = 1

/ → Phép chia dấu phẩy động

// → Phân tầng

Hãy xem một số ví dụ trong cả Python 2. 7 và trong Python 3. 5

Trăn 2. 7. 10 so với. Trăn 3. 5

print (2/3)  ----> 0                   Python 2.7
print (2/3)  ----> 0.6666666666666666  Python 3.5

Trăn 2. 7. 10 so với. Trăn 3. 5

print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5

Bây giờ nếu bạn muốn có (bằng Python 2. 7) đầu ra giống như trong Python 3. 5, bạn có thể làm như sau

Trăn 2. 7. 10

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7

Trong khi không có bất kỳ sự khác biệt nào giữa phân chia tầng trong cả Python 2. 7 và trong Python 3. 5

138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5

Phép chia cho phép bạn chia hai số và trả về một thương số, i. e. , số đầu tiên hoặc số ở bên trái được chia cho số hoặc số thứ hai ở bên phải và trả về thương.  

Có hai loại toán tử chia.  

(i) Phân chia nổi.  

Thương số trả về bởi toán tử này luôn là một số float, bất kể hai số có phải là số nguyên hay không. Ví dụ

>>>5/5
1.0
>>>10/2
5.0
>>>-10/2
-5.0
>>>20.0/2
10.0

(ii) Phép chia số nguyên (Phép chia tầng).  

Thương số được trả về bởi toán tử này phụ thuộc vào đối số được truyền. Nếu bất kỳ số nào ở dạng float, nó sẽ trả về đầu ra ở dạng float. Nó còn được gọi là Phép chia sàn bởi vì, nếu bất kỳ số nào âm, thì đầu ra sẽ được chia sàn. Ví dụ

>>>5//5
1
>>>3//2
1
>>>10//3
3

Hãy xem xét các câu lệnh dưới đây trong Python

Python3




print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
11

print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
12

print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
13
print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
14____115
>>>5//5
1
>>>3//2
1
>>>10//3
3
0
>>>5//5
1
>>>3//2
1
>>>10//3
3
0
>>>5//5
1
>>>3//2
1
>>>10//3
3
2
>>>5//5
1
>>>3//2
1
>>>10//3
3
3

print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
13
print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
14____56
print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
15
>>>5//5
1
>>>3//2
1
>>>10//3
3
0
>>>5//5
1
>>>3//2
1
>>>10//3
3
0
>>>5//5
1
>>>3//2
1
>>>10//3
3
2
>>>5//5
1
>>>3//2
1
>>>10//3
3
3

đầu ra

print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
5

Đầu ra đầu tiên là tốt, nhưng đầu ra thứ hai có thể ngạc nhiên nếu chúng ta đến với thế giới Java/C++. Trong Python, toán tử “//” hoạt động như phép chia sàn cho các đối số số nguyên và số float. Tuy nhiên, toán tử chia '/' luôn trả về giá trị float

Ghi chú. Toán tử “//” được sử dụng để trả về giá trị số nguyên gần nhất nhỏ hơn hoặc bằng một biểu thức hoặc giá trị đã chỉ định. Vì vậy, từ đoạn mã trên, 5//2 trả về 2. Bạn biết rằng 5/2 là 2. 5 và số nguyên gần nhất nhỏ hơn hoặc bằng là 2[5//2]. (nó nghịch đảo với toán bình thường, trong toán bình thường giá trị là 3)

Thí dụ

Python3




print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
52

print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
53

print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
13
print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
14____156____50
>>>5//5
1
>>>3//2
1
>>>10//3
3
2
>>>5//5
1
>>>3//2
1
>>>10//3
3
3

print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
13
print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
14____56
print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5
56
>>>5//5
1
>>>3//2
1
>>>10//3
3
0
>>>5//5
1
>>>3//2
1
>>>10//3
3
2
>>>5//5
1
>>>3//2
1
>>>10//3
3
3

Đầu ra

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
7

Toán tử chia tầng thực sự là “//”. Nó trả về giá trị sàn cho cả đối số số nguyên và dấu phẩy động

Trong hướng dẫn này, bạn sẽ học cách thực hiện phân chia tầng trong Python. Bạn sẽ sử dụng toán tử // của Python, hàm sàn từ mô-đun toán học của Python, v.v. – với các ví dụ về mã

Chúng ta sẽ bắt đầu với phần tổng quan về các toán tử số học trong Python và tìm hiểu cách thức hoạt động của toán tử chia tầng //. Sau đó, chúng ta sẽ học cách sử dụng các phương thức tương đương khác bao gồm các hàm từ mô-đun toán học và toán tử để thực hiện phép chia tầng

Bắt đầu nào…

Toán tử số học trong Python

Trong Python, bạn có thể sử dụng các toán tử số học để thực hiện các phép toán số học đơn giản trên các số của kiểu dữ liệu

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
86 và
from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
87. Các toán tử này hoạt động trên toán hạng (các số) và trả về kết quả của phép toán

Arithmetic-Operators-in-Python

Bảng dưới đây tóm tắt các toán tử số học trong Python và cách chúng hoạt động

Toán tửCú phápResultAddition(+)
from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
88Trả về tổng của
from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
89 và
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
20Phép trừ (-)
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
21Trả về hiệu giữa
from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
89 và
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
20Phép nhân (*)
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
24Trả về tích của
from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
89 và
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
20Lũy thừa (**)
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
27Trả về kết quả của
from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
89 được nâng lên lũy thừa của
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
20;

Hãy lấy một vài ví dụ sử dụng các toán tử số học này. Bạn có thể thử các ví dụ này trong REPL Python hoặc trong trình chỉnh sửa Python trực tuyến của Geekflare

>>>5//5
1
>>>3//2
1
>>>10//3
3
3

Trong ví dụ này,

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
89 là 18 và
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
20 là 5. Phép chia
>>>5/5
1.0
>>>10/2
5.0
>>>-10/2
-5.0
>>>20.0/2
10.0
42 trả về kết quả có cả phần phân số

Số 5 đi vào 18 ba lần để lại phần còn lại của ba. Do đó, phép chia sàn,

>>>5/5
1.0
>>>10/2
5.0
>>>-10/2
-5.0
>>>20.0/2
10.0
45, cho thương số 3, trong khi toán tử modulo cho phần dư – cũng là 3 trong trường hợp này

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
8

Điều này sẽ cung cấp cho bạn ý tưởng về cách hoạt động của phép chia, phép chia tầng và modulo. Tiếp theo, chúng ta sẽ tìm hiểu chi tiết về toán tử chia tầng

⚠️ Trong Python 2, phép chia (/) cắt ngắn kết quả thành số nguyên gần nhất—tương tự như phép chia sàn trong Python 3. Hướng dẫn này thảo luận về cách hoạt động của thao tác phân chia tầng trong Python 3. x

Phân chia tầng sử dụng toán tử //

Floor-Division-Using-the-Operator

Xét một phép toán chia với số bị chia và số chia. Trong

>>>5/5
1.0
>>>10/2
5.0
>>>-10/2
-5.0
>>>20.0/2
10.0
42,
from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
89 là số bị chia và
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
20 là số chia. Để thực hiện phép chia tầng của
from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
89 và
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
20, hãy sử dụng
>>>5/5
1.0
>>>10/2
5.0
>>>-10/2
-5.0
>>>20.0/2
10.0
45

Toán tử chia sàn (//) trả về thương của phép chia—dưới dạng số nguyên hoặc số dấu phẩy động—tùy thuộc vào kiểu dữ liệu của toán hạng

Toán tử chia tầng không đảm bảo đáp án luôn là số nguyên. Nếu số bị chia (

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
89) hoặc số chia (
138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
20) là số thực thì kết quả của
>>>5/5
1.0
>>>10/2
5.0
>>>-10/2
-5.0
>>>20.0/2
10.0
45 là số thực. Đây là vài ví dụ

138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5
2

Nếu bạn cần kết quả là một số nguyên, thì bạn cần chuyển nó thành một số nguyên một cách rõ ràng bằng cách sử dụng hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
94

>>>5/5
1.0
>>>10/2
5.0
>>>-10/2
-5.0
>>>20.0/2
10.0
4

Điều gì xảy ra dưới mui xe?

Khi bạn sử dụng toán tử chia tầng //, phương thức đặc biệt (còn gọi là phương thức dunder)

>>>5//5
1
>>>3//2
1
>>>10//3
3
95 được gọi. Do đó, bạn cũng có thể sử dụng phương thức
>>>5//5
1
>>>3//2
1
>>>10//3
3
95 trên bất kỳ số nguyên hoặc số dấu phẩy động nào, như minh họa bên dưới

>>>5//5
1
>>>3//2
1
>>>10//3
3
3

Phân chia tầng Sử dụng toán tử. floordiv()

Floor-Division-Using-operator.floordiv

💡 Để thực hiện phép chia tầng trong Python, bạn cũng có thể sử dụng hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
97 trong module
>>>5//5
1
>>>3//2
1
>>>10//3
3
98

Mô-đun toán tử của Python chứa các định nghĩa về các hàm hiệu quả có thể thực hiện tất cả các phép tính số học. Do đó, để thực hiện phép chia tầng, bạn cũng có thể sử dụng hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
97 từ mô-đun toán tử – thay vì toán tử //

Sử dụng hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
97 từ mô-đun toán tử tương đương với việc sử dụng toán tử chia tầng

>>>5//5
1
>>>3//2
1
>>>10//3
3
9

Phân chia tầng Sử dụng toán học. tầng lầu()

Chức năng sàn hoạt động như thế nào?

Trong toán học, hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
91 lấy bất kỳ số thực nào
>>>5//5
1
>>>3//2
1
>>>10//3
3
92 làm đầu vào và trả về một số nguyên (kết quả). Kết quả này là số nguyên lớn nhất nhỏ hơn hoặc bằng số thực x

Để hiểu rõ hơn về điều này, chúng ta hãy lấy một vài ví dụ và hình dung những con số này trên một dòng số

ví dụ 1. Xét số 2. 3. Số nguyên lớn nhất nhỏ hơn hoặc bằng 2. 3 là 2; . 3) sẽ trả lại 2

python-floordivision-tutorial-ex1

ví dụ 2. Bạn cũng có thể áp dụng định nghĩa tương tự khi làm việc với số âm. Xét số -1. 7. Số nguyên lớn nhất nhỏ hơn hoặc bằng -1. 7 là -2; . 7) sẽ trả về -2

python-floordivision-tutorial-ex2

Hãy xác minh các kết quả trên bằng cách sử dụng hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
91 từ mô-đun toán học

>>>5//5
1
>>>3//2
1
>>>10//3
3
9

Để thực hiện phép chia tầng, bạn có thể gọi hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
91 với đối số là
>>>5/5
1.0
>>>10/2
5.0
>>>-10/2
-5.0
>>>20.0/2
10.0
42. Khi nó cắt bớt hoặc làm tròn kết quả xuống số nguyên gần nhất, nó tương đương với phép toán chia sàn

Bạn có thể nhập hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
91 một cách rõ ràng từ mô-đun
>>>5//5
1
>>>3//2
1
>>>10//3
3
97, như được hiển thị

>>>5//5
1
>>>3//2
1
>>>10//3
3
7

Ngoài ra, bạn cũng có thể chỉ nhập mô-đun

>>>5//5
1
>>>3//2
1
>>>10//3
3
97 và sau đó truy cập hàm
>>>5//5
1
>>>3//2
1
>>>10//3
3
91 bằng cách sử dụng
>>>5//5
1
>>>3//2
1
>>>10//3
3
70

>>>5//5
1
>>>3//2
1
>>>10//3
3
1

Không giống như hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
97 từ mô-đun toán tử và toán tử chia tầng //, sử dụng
>>>5//5
1
>>>3//2
1
>>>10//3
3
72 đảm bảo rằng kết quả là một số nguyên. Phương pháp này làm cho mã có thể đọc được và loại bỏ bước ép kiểu

>>>5//5
1
>>>3//2
1
>>>10//3
3
4

Ví dụ về phân chia tầng trong Python

Examples-of-Floor-Division-in-Python

Hãy kết thúc cuộc thảo luận của chúng ta bằng một ví dụ thực tế. Tìm kiếm nhị phân. ✅

📑 Tìm kiếm nhị phân là thuật toán tìm kiếm hiệu quả cho phép bạn tìm kiếm phần tử đích thông qua các mảng đã sắp xếp trong thời gian O(log n), trong đó n là kích thước của mảng

Thuật toán này hoạt động bằng cách chia khoảng thời gian tìm kiếm thành một nửa ở mỗi bước. Điều này được thực hiện tùy thuộc vào việc điểm giữa của khoảng có khớp với mục tiêu hay không (tìm kiếm kết thúc khi tìm thấy kết quả khớp. ) hoặc nhỏ hơn hoặc lớn hơn mục tiêu. Vì kích thước của mảng giảm đi một nửa ở mỗi bước, điểm giữa không phải lúc nào cũng ước tính thành một số nguyên

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
80

Xem xét việc triển khai thuật toán tìm kiếm nhị phân sau đây. Hàm

>>>5//5
1
>>>3//2
1
>>>10//3
3
73 nhận vào một số (
>>>5//5
1
>>>3//2
1
>>>10//3
3
74) và một danh sách (
>>>5//5
1
>>>3//2
1
>>>10//3
3
75) và tìm kiếm sự xuất hiện của
>>>5//5
1
>>>3//2
1
>>>10//3
3
74 trong
>>>5//5
1
>>>3//2
1
>>>10//3
3
75

  • Nếu tìm thấy
    >>>5//5
    1
    >>>3//2
    1
    >>>10//3
    3
    74, hàm trả về chỉ mục tại đó
    >>>5//5
    1
    >>>3//2
    1
    >>>10//3
    3
    74 xảy ra
  • Khác, nó trả về
    >>>5//5
    1
    >>>3//2
    1
    >>>10//3
    3
    10
from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
81

Việc triển khai này đúng về mặt chức năng ngoại trừ việc chúng tôi chưa tính đến việc

>>>5//5
1
>>>3//2
1
>>>10//3
3
11 không đánh giá thành một số nguyên khi tiến hành tìm kiếm

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
82

Nếu chúng ta gọi hàm, chúng ta gặp phải một thông báo

>>>5//5
1
>>>3//2
1
>>>10//3
3
12 cho biết rằng các chỉ số danh sách phải là số nguyên hoặc lát, không phải là số float

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
83

Chúng tôi sửa đổi định nghĩa hàm để sử dụng toán tử chia tầng

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
84

Hàm trả về chỉ mục mà mục 7 được tìm thấy, là chỉ mục một

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7
85

Phần kết luận

Tôi hy vọng hướng dẫn này đã giúp bạn hiểu cách thực hiện phân chia tầng trong Python. Dưới đây là tóm tắt các phương pháp khác nhau mà bạn đã học

Hai loại phân chia trong Python là gì?

Trong Python, có hai kiểu phân chia. phép chia số nguyên và phép chia số thực .

Phép chia trong Python là gì?

Trong Python, có hai loại toán tử chia. /. Chia số bên trái cho số bên phải và trả về một giá trị dấu phẩy động. //. Chia số bên trái cho số bên phải, làm tròn câu trả lời và trả về một số nguyên

Phân tầng dùng để làm gì?

Phép chia tầng là phép chia bình thường, ngoại trừ nó trả về số nguyên lớn nhất có thể. Số nguyên này có thể nhỏ hơn đầu ra của phép chia thông thường hoặc bằng nó. Hàm sàn được biểu thị bằng ký hiệu ⌊ ⌋ theo thuật ngữ toán học

Python chia theo modulo hoặc tầng là gì?

Ký hiệu % trong Python được gọi là Toán tử Modulo. Nó trả về phần còn lại của phép chia toán hạng bên trái cho toán hạng bên phải . Nó được sử dụng để lấy phần còn lại của một vấn đề chia. Toán tử modulo được coi là một phép toán số học, cùng với + , - , / , * , ** , //.