Kiểu số nguyên trong Python ký hiểu là gì

Python hỗ trợ các kiểu dữ liệu số: số nguyên (integer), số thực (float) và số phức (complex). Python định nghĩa các lớp (class) là int, float và complex để lưu trữ và xử lý các kiểu dữ liệu số.

Số nguyên (integer) được đại diện bởi lớp int, chứa các số nguyên dương hoặc nguyên âm (không có phần thập phân). Trong Python, số nguyên không có giới hạn về độ dài.

Số thực (float) được đại diện bởi lớp float, biểu diễn các số thực với dấu chấm động (có độ chính xác với 15 chữ số ở phần thập phân). Các số thực có thể được biểu diễn với ký hiệu e hoặc E là một cách ghi khoa học của a10b. Ví dụ, 1.5e2 tương đương 1.5 x 102.

Số phức (complex) được đại diện bởi lớp complex. Số phức được viết dưới dạng x + yj. Trong đó, x là phần thực, y là phần ảo.

Trong Python, chúng ta có thể biểu diễn các số ở hệ nhị phân, thập lục phân (cơ số 16) và hệ bát phân. Chúng ta sẽ sử dụng tiền tố (prefix) ở trước một số để xác định số đó đang được biểu diễn ở hệ cơ số nào.

Number SystemPrefix
Binary‘0b’ or ‘0B’
Octal‘0o’ or ‘0O’
Hexadecimal‘0x’ or ‘0X’
a = 5 print(type(a)) print("a is an integer number?", isinstance(a, int)) print(type(5.0)) c = 5 + 3j print(c + 3) print(type(c)) print("c is a complex number?", isinstance(c, complex)) # Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)

Kết quả
a is an integer number? True (8+3j) c is a complex number? True 107 253 13

Chuyển đổi giữa các kiểu dữ liệu số trong Python

Khi cộng, trừ, nhân, chia một số nguyên với một số thực thì số nguyên tự động bị ép kiểu sang số thực để thực hiện phép tính. Do đó, kết quả thực hiện phép tính sẽ là một số thực.

print(1 + 2.0) print(1 - 2.0) print(1 * 2.0) print(1 / 2.0)

Kết quả
3.0 -1.0 2.0 0.5

Chúng ta cũng có thể sử dụng các hàm được xây dựng sẵn trong Python như int(), float() và complex() để chuyển đổi  giữa các kiểu dữ liệu.

a = int(2.3) b = int(-2.8) c = float(5) d = complex('3+5j') print(a) print(b) print(c) print(d)

Kết quả
2 -2 5.0 (3+5j)

Một số lưu ý khi sử dụng kiểu dữ liệu số trong Python

Khi tính toán giữa các số thực, chúng ta cần lưu ý về độ chính xác của kết quả. Ví dụ:

a = 1.1 + 2.2 print(a) print("a == 3.3?", (a==3.3))

Kết quả
3.3000000000000003 a == 3.3? False

Rõ ràng, kết quả không phải là 3.3 mà là 3.3000000000000003. Điều này là do cơ chế lưu trữ dấu chấm động của phần thập phân trong máy tính bằng các số nhị phân 0 và 1 (do máy tính chỉ hiểu bit 0 và 1).

Ví dụ, số thập phân 0.1 được biểu diễn ở hệ nhị phân sẽ là một dãy nhị phân dài vô hạn là 0.000110011001100110011…. Tuy nhiên, máy tính của chúng ta chỉ lưu trữ một số hữu hạn các số nhị phân để biểu diễn số thập phân 0.1. Do đó, bất cứ số thập phân nào cũng mang tính chất chính xác tương đối.

Sử dụng module decimal trong Python

Mặc định, số thực (float) trong Python chỉ có độ chính xác với tối đa 15 chữ số ở phần thập phân. Chúng ta có thể sử dụng module decimal được cài đặt sẵn trong Python để xác định độ chính xác là bao nhiêu số thập phân.

import decimal #return 0.05000000000000000277555756156289135105907917022705078125 print(decimal.Decimal(0.05)) #return 0.05 print(decimal.Decimal('0.05')) #return a = 1.1 + 2.2 print(a) #return b = decimal.Decimal('1.1') + decimal.Decimal('2.2') print(b)

Kết quả
0.05000000000000000277555756156289135105907917022705078125 0.05 3.3000000000000003 3.3

Khi bạn muốn cộng 1.12.2 để ra kết quả chính xác là 3.3 thì nên sử dụng module decimal với decimal.Decimal('1.1')decimal.Decimal('2.2').

Để kiểm soát độ chính xác phần thập phân có bao nhiêu chữ số, chúng ta có thể sử dụng hàm getcontext() với thuộc tính prec. Ví dụ:

import decimal # returns 0.07692307692307692307692307692 print(decimal.Decimal(1) / decimal.Decimal(13)) decimal.getcontext().prec = 10 #return 0.07692307692 print(decimal.Decimal(1) / decimal.Decimal(13))

Kết quả
0.07692307692307692307692307692 0.07692307692

Kiểu dữ liệu luận lý (boolean) trong Python chỉ có 2 giá trị là True hoặc False. Trong Python, True được đại diện bởi giá trị 1False được đại diện bởi giá trị 0. Ví dụ:

x = (1 == True) y = (1 == False) a = True + 4 b = False + 10 print("x is", x) print("y is", y) print("a:", a) print("b:", b)

Kết quả
x is True y is False a: 5 b: 10

Một chuỗi ký tự (string) là một chuỗi các ký tự được bao quanh bởi dấu nháy kép. Chúng ta có thể sử dụng cả dấu nháy đơn, dấu nháy kép hoặc 3 dấu nháy kép cho một chuỗi ký tự. Chuỗi ký tự (string) trong Python được đại diện bởi lớp str.

Trong Python, không có kiểu dữ liệu ký tự (character), mà một ký tự là một chuỗi (string) có độ dài là 1 ký tự.

strings = "This is Python" char = "C" multiline_str = """This is a multiline string with more than one line code.""" unicode = u"\u00dcnic\u00f6de" raw_str = r"raw \n string" print(strings) print(char) print(multiline_str) print(unicode) print(raw_str)

Kết quả
This is Python C This is a multiline string with more than one line code. Ünicöde raw \n string

Lưu ý: Chuỗi u”\u00dcnic\u00f6de” chứa các ký tự Unicode. Trong đó, \u00dc đại diện cho Ü\u00f6 đại diện cho ö. Còn r”raw \n string” là một chuỗi ký tự thô (raw string).

Bài trước và bài sau trong môn học

Lưu ý: Trong loạt bài viết này, mình sẽ giới thiệu về Python 3. Nếu bạn muốn tìm hiểu Python 2, sẽ có một số khái niệm không chính xác, bạn cần tham khảo thêm ở các nguồn khác cho phiên bản Python 2.

Dữ liệu kiểu số

Số nguyên

Tương tự các ngôn ngữ lập trình khác, Python cũng xây dựng sẵn kiểu dữ liệu số nguyên (integer). Điểm nhỉnh hơn của Python là một số nguyên không bị giới hạn. Nghĩa là bạn sẽ không phải nghe nhắc đến Int32, Int64…vv ở đây.

Kiểu số nguyên trong Python ký hiểu là gì

Tuy nhiên, bất kỳ biến nào cũng sẽ phải lưu trên bộ nhớ. Do đó, giá trị số nguyên cũng bị giới hạn bởi các cấu hình của hệ điều hành cũng như sức mạnh phần cứng máy của bạn.

Số nguyên trong Python sẽ được thể hiện ở 4 định dạng

  • Thập phân (Decimal)
  • Nhị phân (binary) được bắt đầu bởi số 0 và kí tự b (hoặc B)
  • Bát phân (Octal) được bắt đầu bởi số 0 và kí tự o (hoặc O)
  • Thập lục phân (Hexadecimal) được bắt đầu bởi số 0 và kí tự x (hoặc X)

Kiểu số nguyên trong Python ký hiểu là gì

Số thực

Kiểu dữ liệu float trong Python được thiết kế để lưu trữ các số thực. Trên tinh thần đơn giản của ngôn ngữ Python, kiểu số thực cũng được biểu diễn bằng các cách cũng rất đơn giản.

Kiểu số nguyên trong Python ký hiểu là gì

Python trên phần lớn các hệ thống đều hiện thực kiểu float theo chuẩn “double-precision” nghĩa là sử dụng 64bit để biểu diễn một số thực. Theo tài liệu IEEE_754 thì số thực trong Python có giá trị tối đa khoảng 1.8 * 10^308, nếu vượt ngưỡng này, Python sẽ hiển thị giá trị vô cực (inf). Giá trị gần với số 0 là 5.0 * 10^-324, vượt ngưỡng này Python sẽ trả về giá trị 0.0

Kiểu số nguyên trong Python ký hiểu là gì

Nếu muốn đào sâu hơn về kiểu số thực, bạn có thểm đọc thêm về Floating Point Arithmetic

Số phức

Ngoài số nguyên và số thực, Python cũng hỗ trợ một kiểu dữ liệu vô cùng quan trọng trong lĩnh vực khoa học, đó là số phức (complex number). Bạn có thể dễ dàng khai báo một số phức bằng cú pháp  +<đơn vị ảo>j

Kiểu số nguyên trong Python ký hiểu là gì

Dữ liệu kiểu chuỗi

Chuỗi (string) là một chuỗi các ký tự. Python thiết kế kiểu dữ liệu str để lữu trữ dữ liệu chuỗi. Ở Python 3, Unicode được hỗ trợ mặc định với kiểu dữ liệu chuỗi.

Một chuỗi sẽ được khai báo bằng 3 cách, trong nháy đơn (‘nội dung’), trong nháy kép (“nội dung”) hoặc trong 3 dấu nháy kép (“””nội dung”””). Việc khai báo không ảnh hưởng gì đến dữ liệu bên trong, khác biệt duy nhất đến từ 3 dấu nháy, nội dung bên trong 3 dấu nháy sẽ được giữ nguyên định dạng (xuống dòng, khoảng trắng và tab…)

Kiểu số nguyên trong Python ký hiểu là gì

Boolean

Python 3 cung cấp sẵn kiểu dữ liệu Boolean. Một đối tượng (object) boolean sẽ nhận 1 trong 2 giá trị True hoặc False

Kiểu số nguyên trong Python ký hiểu là gì

Một đối tượng bool có giá trị True sẽ được xem là “truthy”. Ngược lại khi nó nhận giá trị False sẽ được xem là “falsy”. Nghĩa là giá trị của một đối tượng bool không bao giờ bị ảnh hưởng bởi ngữ cảnh.

Ngược lại, các đối tượng khác (không phải boolean) sẽ được đánh giá tính đúng/sai (True/False) tùy thuộc vào ngữ cảnh của nó. Xét ví dụ bên dưới

Kiểu số nguyên trong Python ký hiểu là gì

Chúng ta có lần lượt biến thuộc kiểu số nguyên (integer) với giá trị được gán lần lượt là số dương, số âm và số không. Tùy thuộc vào giá trị của số nguyên, trình thông dịch sẽ hiểu chúng theo những cách khác khau, số dương và số âm sẽ được xem là True và số âm sẽ được xem là False.

Do đó, khi sử dụng một đối tượng non-boolean trong các cấu trúc điều khiển, chúng ta cần thật sự hiểu rõ về hành vi của trình thông dịch sẽ xử lý đối tượng đó như thế nào.

Có thể bạn quan tâm