Computer >> Máy Tính >  >> Lập trình >> Python

Toán tử bộ phận trong Python?

Nói chung, kiểu dữ liệu của một biểu thức phụ thuộc vào kiểu của các đối số. Quy tắc này được áp dụng cho hầu hết các toán tử:giống như khi chúng ta cộng hai số nguyên, kết quả sẽ là một số nguyên. Tuy nhiên, trong trường hợp phân chia, điều này không diễn ra tốt vì có hai kỳ vọng khác nhau. Đôi khi, chúng tôi mong đợi phép chia để tạo ra số dấu phẩy động chính xác và những lần khác chúng tôi muốn kết quả số nguyên được làm tròn xuống.

Nói chung, định nghĩa python của phép chia (/) chỉ phụ thuộc vào các đối số. Ví dụ trong python 2.7, chia 20/7 là 2 vì cả hai đối số đều là số nguyên. Tuy nhiên, 20/7 sẽ tạo ra 2.857142857142857 dưới dạng đầu ra vì các đối số là số dấu phẩy động.

Định nghĩa trên về ‘/’ thường gây ra sự cố cho các ứng dụng sử dụng các loại dữ liệu mà tác giả không mong đợi.

Hãy xem xét một chương trình chuyển đổi nhiệt độ từ độ C sang độ F đơn giản sẽ tạo ra hai kết quả khác nhau tùy thuộc vào đầu vào. Nếu một người dùng cung cấp đối số số nguyên (18) và đối số dấu phẩy động khác (18.0), thì các câu trả lời sẽ hoàn toàn khác, mặc dù tất cả các đầu vào đều có giá trị số bằng nhau.

#Conversion of celcius to Fahrendheit in python 2.6
>>> print 18*9/5 + 32
64
>>> print 18.0*9/5 + 32
64.4
>>> 18 == 18.0
True

Từ trên chúng ta có thể thấy, khi chúng ta vượt qua 18.0, chúng ta nhận được đầu ra chính xác và khi vượt qua 18, chúng ta nhận được đầu ra không chính xác. Hành vi này là do trong python 2.x, toán tử “/” hoạt động như một phép phân chia tầng trong trường hợp tất cả các đối số là số nguyên. Tuy nhiên, nếu một trong các đối số là giá trị float thì toán tử “/” trả về giá trị float.

Một hàm chuyển đổi rõ ràng (như float (x)) có thể giúp ngăn chặn điều này. Tuy nhiên, ý tưởng dành cho python là ngôn ngữ đơn giản và thưa thớt, không có sự lộn xộn dày đặc của các chuyển đổi để đề cập đến trường hợp hiếm hoi của một kiểu dữ liệu không mong muốn. Bắt đầu với phiên bản Python 2.2, một toán tử phân chia mới đã được thêm vào để làm rõ những gì được mong đợi. Trong tương lai, toán tử thông thường / sẽ trả về kết quả dấu phẩy động. Một toán tử chia đặc biệt, //, sẽ trả về kết quả làm tròn xuống.

>>> # Python 2.7 program to demonstrate the use of "//" for both integers and floating point number
>>> print 9//2
4
>>> print -9//2
-5
>>> print 9.0//2
4.0
>>> print -9.0//2
-5.0

Hoạt động phân chia trong Python 3.x

Trong python 3.x, các lỗi được đề cập ở trên đã được xóa và toán tử ‘/’ thực hiện phép chia dấu phẩy động cho cả đối số số nguyên và dấu phẩy động.

>>> #Conversion of celcius to Fahrendheit in python 3.x
>>> #Passing 18 (integer)
>>> print (18*9/5 + 32)
64.4
>>> #Passing 18.0(float)
>>> print(18.0*9/5 + 32)
64.4

Ngoài ra, không có sự khác biệt khi chúng ta chuyển các đối số + ve hoặc –ve.

>>> print(9/2)
4.5
>>> print(-9/2)
-4.5
>>> print(9.0/2)
4.5
>>> print(-9.0/2)
-4.5