Số Python, Chuyển đổi Kiểu và Toán học

Trong bài viết này, bạn sẽ tìm hiểu về các số khác nhau được sử dụng trong Python, cách chuyển đổi từ kiểu dữ liệu này sang kiểu dữ liệu khác và các phép toán được hỗ trợ trong Python.

Kiểu dữ liệu số trong Python

Python hỗ trợ số nguyên, số dấu phẩy động và số phức. Chúng được định nghĩa là int, floatcomplexlớp trong Python.

Số nguyên và dấu phẩy động được phân tách bằng cách có hoặc không có dấu thập phân. Ví dụ: 5 là số nguyên trong khi 5.0 là số dấu phẩy động.

Số phức được viết dưới dạng, x + yjtrong đó x là phần thực và y là phần ảo.

Chúng ta có thể sử dụng type()hàm để biết một biến hoặc một giá trị thuộc về lớp nào và isinstance()hàm để kiểm tra xem nó có thuộc một lớp cụ thể hay không.

Hãy xem một ví dụ:

 a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex))

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

 (8 + 3j) Đúng

Mặc dù số nguyên có thể có độ dài bất kỳ, nhưng số dấu phẩy động chỉ chính xác đến 15 chữ số thập phân (vị trí thứ 16 là không chính xác).

Những con số chúng ta xử lý hàng ngày thuộc hệ thống số thập phân (cơ số 10). Nhưng các lập trình viên máy tính (nói chung là lập trình nhúng) cần phải làm việc với hệ thống số nhị phân (cơ số 2), hệ thập lục phân (cơ số 16) và hệ bát phân (cơ số 8).

Trong Python, chúng ta có thể biểu diễn các số này bằng cách đặt một tiền tố trước số đó một cách thích hợp. Bảng sau đây liệt kê các tiền tố này.

Hệ thống số Tiếp đầu ngữ
Nhị phân '0b' hoặc '0B'
Bát phân '0o' hoặc '0O'
Hệ thập lục phân '0x' hoặc '0X'

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

 # Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)

Khi bạn chạy chương trình, đầu ra sẽ là:

 107 253 13

Loại chuyển đổi

Chúng ta có thể chuyển đổi một loại số thành một số khác. Đây còn được gọi là sự ép buộc.

Các phép toán như cộng, trừ ép buộc số nguyên để float hoàn toàn (tự động), nếu một trong các toán hạng là float.

 >>> 1 + 2.0 3.0

Chúng ta có thể thấy ở trên rằng 1 (số nguyên) bị ép buộc thành 1.0 (float) để cộng và kết quả cũng là một số dấu phẩy động.

Chúng tôi cũng có thể sử dụng được xây dựng trong các chức năng như int(), float()complex()để chuyển đổi giữa các loại một cách rõ ràng. Các hàm này thậm chí có thể chuyển đổi từ chuỗi.

 >>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)

Khi chuyển đổi từ float thành số nguyên, số sẽ bị cắt bớt (phần thập phân bị loại bỏ).

Hệ thập phân Python

Lớp float tích hợp trong Python thực hiện một số phép tính có thể khiến chúng ta ngạc nhiên. Tất cả chúng ta đều biết rằng tổng của 1.1 và 2.2 là 3.3, nhưng Python dường như không đồng ý.

 >>> (1.1 + 2.2) == 3.3 False

Điều gì đang xảy ra?

Nó chỉ ra rằng các số dấu phẩy động được thực hiện trong phần cứng máy tính dưới dạng phân số nhị phân vì máy tính chỉ hiểu được nhị phân (0 và 1). Vì lý do này, hầu hết các phân số thập phân mà chúng ta biết, không thể được lưu trữ chính xác trong máy tính của chúng ta.

Hãy lấy một ví dụ. Chúng ta không thể biểu diễn phân số 1/3 dưới dạng số thập phân. Điều này sẽ cho 0.33333333… dài vô hạn và chúng tôi chỉ có thể ước tính nó.

Nó chỉ ra rằng phân số thập phân 0,1 sẽ dẫn đến một phân số nhị phân dài vô hạn là 0,000110011001100110011… và máy tính của chúng tôi chỉ lưu trữ một số hữu hạn của nó.

Điều này sẽ chỉ gần đúng 0,1 nhưng không bao giờ bằng nhau. Do đó, đó là hạn chế của phần cứng máy tính của chúng tôi chứ không phải là lỗi trong Python.

 >>> 1.1 + 2.2 3.3000000000000003

Để khắc phục vấn đề này, chúng ta có thể sử dụng mô-đun thập phân đi kèm với Python. Trong khi số dấu phẩy động có độ chính xác lên đến 15 chữ số thập phân, mô-đun thập phân có độ chính xác do người dùng thiết lập.

Hãy xem sự khác biệt:

 import decimal print(0.1) print(decimal.Decimal(0.1))

Đầu ra

 0,1 0,1000000000000000055511151231257827021181583404541015625

Mô-đun này được sử dụng khi chúng ta muốn thực hiện các phép tính thập phân như đã học ở trường.

Nó cũng bảo tồn ý nghĩa. Chúng ta biết 25,50 kg chính xác hơn 25,5 kg vì nó có hai chữ số thập phân đáng kể so với một.

 from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50'))

Đầu ra

 3,3 3.000

Notice the trailing zeroes in the above example.

We might ask, why not implement Decimal every time, instead of float? The main reason is efficiency. Floating point operations are carried out must faster than Decimal operations.

When to use Decimal instead of float?

We generally use Decimal in the following cases.

  • When we are making financial applications that need exact decimal representation.
  • When we want to control the level of precision required.
  • When we want to implement the notion of significant decimal places.

Python Fractions

Python provides operations involving fractional numbers through its fractions module.

A fraction has a numerator and a denominator, both of which are integers. This module has support for rational number arithmetic.

We can create Fraction objects in various ways. Let's have a look at them.

 import fractions print(fractions.Fraction(1.5)) print(fractions.Fraction(5)) print(fractions.Fraction(1,3))

Output

 3/2 5 1/3

While creating Fraction from float, we might get some unusual results. This is due to the imperfect binary floating point number representation as discussed in the previous section.

Fortunately, Fraction allows us to instantiate with string as well. This is the preferred option when using decimal numbers.

 import fractions # As float # Output: 2476979795053773/2251799813685248 print(fractions.Fraction(1.1)) # As string # Output: 11/10 print(fractions.Fraction('1.1'))

Output

 2476979795053773/2251799813685248 11/10

This data type supports all basic operations. Here are a few examples.

 from fractions import Fraction as F print(F(1, 3) + F(1, 3)) print(1 / F(5, 6)) print(F(-3, 10)> 0) print(F(-3, 10) < 0)

Output

 2/3 6/5 False True

Python Mathematics

Python offers modules like math and random to carry out different mathematics like trigonometry, logarithms, probability and statistics, etc.

 import math print(math.pi) print(math.cos(math.pi)) print(math.exp(10)) print(math.log10(1000)) print(math.sinh(1)) print(math.factorial(6))

Output

 3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720

Here is the full list of functions and attributes available in the Python math module.

 import random print(random.randrange(10, 20)) x = ('a', 'b', 'c', 'd', 'e') # Get random choice print(random.choice(x)) # Shuffle x random.shuffle(x) # Print the shuffled x print(x) # Print random element print(random.random())

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả như sau. (Các giá trị có thể khác nhau do hành vi ngẫu nhiên)

 18 e ('c', 'e', ​​'d', 'b', 'a') 0,5682821194654443

Đây là danh sách đầy đủ các chức năng và thuộc tính có sẵn trong mô-đun ngẫu nhiên Python.

thú vị bài viết...