Phép chia số nguyên có nhanh hơn python không?

Khi bắt đầu học Python 3, tôi đã từng bối rối về ngữ nghĩa của phép chia hai số nguyên. Kết quả có phải là giá trị float hay số nguyên không?

Lý do cho sự nhầm lẫn của tôi là một lỗi Java khó chịu mà tôi đã từng tìm thấy trong mã của mình. Mã được cho là thực hiện phép chia đơn giản của hai số nguyên để trả về một giá trị tham số giữa 0 và 1. Nhưng Java sử dụng phép chia số nguyên, tôi. e. , nó bỏ qua phần còn lại. Do đó, giá trị luôn là 0 hoặc 1, nhưng không có gì ở giữa. Tôi đã mất nhiều ngày để tìm ra điều đó

Tiết kiệm thời gian gỡ lỗi cho bạn bằng cách ghi nhớ quy tắc sau một lần và mãi mãi

Toán tử dấu gạch chéo ngược kép

x = 30 // 11
print[x]
# 2
0 thực hiện phép chia số nguyên và toán tử dấu gạch chéo ngược đơn
x = 30 // 11
print[x]
# 2
1 thực hiện phép chia float. Một ví dụ cho phép chia số nguyên là
x = 30 // 11
print[x]
# 2
2. Một ví dụ cho phép chia float là
x = 30 // 11
print[x]
# 2
3

>>> # Python 3
>>> 40//11
3
>>> 40/11
3.6363636363636362

Bộ phận Python Deep Dive


Xem video này trên YouTube

Phép chia số nguyên hoạt động như thế nào trong Python?

Phép chia số nguyên gồm hai bước

  1. Thực hiện phép chia float bình thường
    x = 30 // 11
    print[x]
    # 2
    4
  2. Làm tròn số float kết quả xuống số nguyên tiếp theo

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

x = 30 // 11
print[x]
# 2

Phân chia số nguyên Python 2 vs 3

Trăn 2. x chia hai số nguyên bằng cách sử dụng phép chia số nguyên, còn được gọi là phép chia sàn vì nó áp dụng hàm sàn sau phép chia thông thường để "làm tròn số", do đó, nó đánh giá biểu thức

x = 30 // 11
print[x]
# 2
5 thành
x = 30 // 11
print[x]
# 2
0. Trong Python 3, phép chia số nguyên được thực hiện bằng cách sử dụng dấu gạch chéo kép phía trước
x = 30 // 11
print[x]
# 2
1 ước tính thành
x = 30 // 11
print[x]
# 2
0. Dấu gạch chéo đơn phía trước để phân chia tầng “/” không được dùng trong Python 2. 2+ và Python3

Đây là mã để chia số nguyên trong Python 2 bằng cách sử dụng toán tử dấu gạch chéo trước duy nhất

x = 30 // 11
print[x]
# 2
1

# Python 2
print[10/3]
# 3

Và đây là mã để chia số nguyên trong Python 3 bằng cách sử dụng toán tử dấu gạch chéo ngược kép

x = 30 // 11
print[x]
# 2
0

# Python 3
print[10//3]
# 3

Shell tương tác + Câu đố

Bạn có thể dùng thử trong trình bao Python tương tác của chúng tôi

Tập thể dục. Đầu ra của đoạn mã này là gì?

Mặc dù câu đố có vẻ đơn giản nhưng hơn 20% người dùng Finxter không thể giải được. Bạn có thể kiểm tra xem mình đã giải đúng chưa tại đây. Kiểm tra kỹ năng của bạn bây giờ

toán tử số học

Các toán tử số học là các phím tắt cú pháp để thực hiện các phép toán cơ bản trên các số

Toán tửTênMô tảVí dụ+Phép cộngTính tổng của hai toán hạng
x = 30 // 11
print[x]
# 2
5--Phép trừTrừ toán hạng thứ hai từ toán hạng thứ nhất
x = 30 // 11
print[x]
# 2
6*Phép nhânNhân toán hạng thứ nhất với toán hạng thứ hai
x = 30 // 11
print[x]
# 2
7/Phép chiaChia toán hạng thứ nhất cho toán hạng thứ hai
x = 30 // 11
print[x]
# 2
8%ModuloTính phần dư khi chia toán hạng thứ nhất cho toán hạng thứ hai
x = 30 // 11
print[x]
# 2
9//Số nguyên

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Có một toán tử lũy thừa tích hợp **, có thể lấy số nguyên, dấu phẩy động hoặc số phức. Điều này chiếm vị trí thích hợp của nó theo thứ tự hoạt động

Phân chia tầng và Phân chia thực sự[sửa | sửa mã nguồn]. sửa nguồn]

Trong Trăn 3. x, toán tử dấu gạch chéo ["/"] thực hiện phép chia đúng cho tất cả các loại kể cả số nguyên và do đó, e. g.

x = 30 // 11
print[x]
# 2
8[1][2]. Kết quả là loại dấu phẩy động ngay cả khi cả hai đầu vào là số nguyên. 4/2 sinh 2. 0

Trong Trăn 3. x và 2 mới nhất. x, phép chia sàn cho cả đối số số nguyên và đối số dấu phẩy động được thực hiện bằng cách sử dụng toán tử dấu gạch chéo kép ["//"]. Đối với kết quả âm, điều này không giống phép chia số nguyên trong ngôn ngữ C vì -3 // 2 == -2 trong Python trong khi -3/2 == -1 trong C. C làm tròn kết quả âm về 0 trong khi Python về vô cực âm

Xin lưu ý rằng do những hạn chế của số học dấu phẩy động, lỗi làm tròn có thể gây ra kết quả không mong muốn. Ví dụ

x = 30 // 11
print[x]
# 2
4

Đối với Trăn 2. x, chia hai số nguyên hoặc số dài bằng toán tử dấu gạch chéo ["/"] sử dụng phép chia sàn [áp dụng hàm sàn sau khi chia] và cho kết quả là số nguyên hoặc số dài. Do đó, 5/2 == 2 và -3/2 == -2. Sử dụng "/" để thực hiện phép chia theo cách này không được dùng nữa; . 2 trở lên]. Chia cho hoặc thành một số dấu phẩy động sẽ khiến Python sử dụng phép chia thực. Do đó, để đảm bảo phân chia thực sự trong Python 2. x.

x = 30 // 11
print[x]
# 2
40

liên kết

Có thể tìm thấy mô đun [phần dư của phép chia hai toán hạng, thay vì thương số] bằng cách sử dụng toán tử % hoặc bằng hàm dựng sẵn divmod. Hàm divmod trả về một bộ chứa thương và số dư

Lưu ý rằng -10 % 7 bằng 4 trong khi bằng -3 trong ngôn ngữ C. Python tính phần còn lại là một sau khi chia sàn trong khi ngôn ngữ C tính phần còn lại sau khi chia số nguyên C, khác với phép chia sàn của Python trên số nguyên. Phép chia số nguyên trong C làm tròn kết quả âm về 0

liên kết

Không giống như một số ngôn ngữ khác, các biến có thể được phủ định trực tiếp

OperationMeansGreater than=Greater than or equal to==Equal to!=Not equal to

Số, chuỗi và các loại khác có thể được so sánh về đẳng thức/bất đẳng thức và thứ tự

x = 30 // 11
print[x]
# 2
6

Các toán tử

x = 30 // 11
print[x]
# 2
41 và
x = 30 // 11
print[x]
# 2
42 kiểm tra nhận dạng đối tượng và tương phản với == [bằng].
x = 30 // 11
print[x]
# 2
43 là đúng khi và chỉ khi x và y là tham chiếu đến cùng một đối tượng trong bộ nhớ.
x = 30 // 11
print[x]
# 2
44 mang lại giá trị chân lý nghịch đảo. Lưu ý rằng kiểm tra danh tính nghiêm ngặt hơn kiểm tra đẳng thức vì hai đối tượng riêng biệt có thể có cùng giá trị

x = 30 // 11
print[x]
# 2
1

Đối với các kiểu dữ liệu bất biến được tích hợp sẵn [như int, str và tuple], Python sử dụng các cơ chế lưu vào bộ nhớ đệm để cải thiện hiệu suất, tôi. e. , trình thông dịch có thể quyết định sử dụng lại một đối tượng bất biến hiện có thay vì tạo một đối tượng mới có cùng giá trị. Các chi tiết của bộ nhớ đệm đối tượng có thể thay đổi giữa các phiên bản Python khác nhau và không được đảm bảo độc lập với hệ thống, do đó, kiểm tra danh tính trên các đối tượng không thay đổi như

x = 30 // 11
print[x]
# 2
45,
x = 30 // 11
print[x]
# 2
46,
x = 30 // 11
print[x]
# 2
47 có thể cho kết quả khác nhau trên các máy khác nhau

Trong một số triển khai Python, các kết quả sau đây được áp dụng

x = 30 // 11
print[x]
# 2
5

liên kết

Có cách viết tắt để gán đầu ra của một thao tác cho một trong các đầu vào

x = 30 // 11
print[x]
# 2
6

Các toán tử logic là các toán tử hành động trên các phép toán logic

Toán tử hoặc trả về true nếu bất kỳ phép toán luận nào liên quan là đúng. Nếu không có cái nào đúng [nói cách khác, tất cả chúng đều sai], toán tử or trả về false

x = 30 // 11
print[x]
# 2
7

Toán tử and chỉ trả về true nếu tất cả các phép toán luận đều đúng. Nếu bất kỳ một trong số chúng là sai, toán tử and trả về false

x = 30 // 11
print[x]
# 2
8

Toán tử not chỉ hoạt động trên một giá trị boolean và chỉ cần trả về giá trị ngược lại của nó. Vì vậy, đúng biến thành sai và sai thành đúng

x = 30 // 11
print[x]
# 2
9

Thứ tự các thao tác ở đây là. không phải thứ nhất, thứ hai hay thứ ba. Đặc biệt, "Đúng hoặc Đúng và Sai hoặc Sai" trở thành "Đúng hoặc Sai hoặc Sai" là Đúng

Cảnh báo, toán tử logic có thể hành động trên những thứ khác ngoài booleans. Chẳng hạn "1 và 6" sẽ trả về 6. Cụ thể, "và" trả về giá trị đầu tiên được coi là sai hoặc giá trị cuối cùng nếu tất cả đều được coi là đúng. "hoặc" trả về giá trị thực đầu tiên hoặc giá trị cuối cùng nếu tất cả được coi là sai

Python operators for bitwise arithmetic are like those in the C language. They include & [bitwise and], | [bitwise or], ^ [exclusive or AKA xor], > [shift right], and ~ [complement]. Augmented assignment operators [AKA compound assignment operators] for the bitwise operations include &=, |=, ^=, =. Bitwise operators apply to integers, even negative ones and very large ones; for the shift operators, the second operand must be non-negative. In the Python internal help, this is covered under the topics of EXPRESSIONS and BITWISE.

ví dụ

  • 0b1101 & 0b111 == 0b101
    • Ghi chú. 0b bắt đầu một chữ nhị phân, giống như 0x bắt đầu một chữ thập lục phân
  • 0b1. 0b100 == 0b101
  • 0b111^0b101 == 0b10
  • 1 > 1 == 3
  • 1

Chủ Đề