Học bằng cách đọc theo thứ tự

Biến và kiểu dữ liệu

Học biến trong Python: khai báo, kiểu int / str / float, định kiểu động, gán lại và quy tắc đặt tên cho code dễ đọc.

Biến là gì?

Biến là một chiếc hộp có tên mà bạn có thể đặt dữ liệu vào. Ví dụ, viết x = 10 thì số nguyên 10 được đưa vào x.

Sau đó bạn có thể đọc lại giá trị thông qua cùng cái tên đó, hoặc ghi đè bằng giá trị mới.

Biến liên hệ với giá trị thế nào
Tên biến(x)Giá trị(10)Bộ nhớtham chiếulưu

Tên biến tham chiếu đến một giá trị, và giá trị nằm trong bộ nhớ

Cùng thử trong console nhé. Gõ x = 10 rồi print(x) vào console bên phải và chạy.

Python Editor

Chạy code để xem đầu ra

10 đã hiện ra ở bên phải chưa? Đó là output của print(x).

Khi bạn gọi print(biến), nó in những gì bên trong biến ra màn hình.

Ngược lại, thử dùng một biến chưa được gán sẽ gây ra NameError. Python đang nói với bạn rằng không có biến nào mang tên đó tồn tại.

Luôn phải gán biến trước khi sử dụng.

Cùng xem lỗi trong console nhé.

Python Editor

Chạy code để xem đầu ra

Type là gì?

Mỗi giá trị bạn đặt vào biến đều có một type (kiểu dữ liệu). Type giống như một nhãn ghi rõ đây là loại dữ liệu gì.

Ví dụ, 10 có type là số nguyên (int)"hello" có type là chuỗi (str).

Kiểu số nguyên (int)

int là kiểu của các số nguyên. Bất kỳ số nào không có dấu thập phân đều được coi là int.

Đặc điểm quan trọng của int là bạn có thể thực hiện các phép tính số học trực tiếp trên nó — cộng, trừ, nhân, chia.

Truyền nó vào type() và bạn sẽ thấy <class 'int'>, xác nhận rằng đó là int.

Cơ bản về int
10(literal số)int10 + 5= 1510 * 3= 30<class 'int'>định kiểucộngnhânxem kiểu
a = 10
b = 3

print(a + b)   # 13 (cộng)
print(a - b)   # 7  (trừ)
print(a * b)   # 30 (nhân)
print(a // b)  # 3  (chia lấy phần nguyên: bỏ phần dư)
print(a % b)   # 1  (modulo: phần dư của phép chia)

print(type(a)) # <class 'int'>

Bạn được cho total_minutes = 130 (tổng số phút).

① Dùng chia lấy phần nguyên // để tính ra bao nhiêu giờ, và modulo % để tính số phút còn lại. In từng giá trị bằng print().

② Dùng type() để in kiểu của total_minutes.

Python Editor

Chạy code để xem đầu ra

Kiểu chuỗi (str)

str là kiểu của chuỗi ký tự. Bất cứ thứ gì được bao bằng nháy đơn '...' hoặc nháy kép "..." đều thành str.

Bạn có thể nối chuỗi bằng +, hoặc lấy độ dài bằng len().

Bao một con số trong dấu nháy như "10" thì nó thành str — bạn không thể tính toán trên nó như vậy.

Cơ bản về str
"hello"literal chuỗistr"hello" + "!"= "hello!"len("hello")= 5định kiểunốiđộ dài

Một literal chuỗi trở thành str, và bạn có thể dùng nó để nối và đo độ dài

greeting = "hello"
name = "Minh"

print(greeting + ", " + name + "!") # hello, Minh!
print(len(greeting))                 # 5 (độ dài)

# Lưu ý: "10" là str, nên không thể tính toán trên nó
num_str = "10"
# print(num_str + 5)  # TypeError!
print(int(num_str) + 5)              # 15 (chạy được sau khi chuyển bằng int())

print(type(greeting))                # <class 'str'>

Bạn được cho name = "Minh"score = "95".

① Dùng + để in ra "Minh đạt 95 điểm.".

② Dùng len() để in độ dài của name.

Python Editor

Chạy code để xem đầu ra

Trộn các kiểu khác nhau

Khi các kiểu khác nhau, những gì bạn có thể làm với chúng cũng khác đi. Hai số nguyên có thể cộng được, nhưng cố gắng cộng một số nguyên với một chuỗi sẽ ném ra TypeError.

Cùng xem trong code dưới đây xem chuyện gì xảy ra khi bạn trộn int và str.

age = 25          # int
name = "Minh"     # str

# int + int thì OK
print(age + 10)          # 35

# str + str thì OK (nối chuỗi)
print(name + "!")        # Minh!

# int + str sẽ ném lỗi
# print(age + name)      # TypeError: unsupported types for __add__: 'int', 'str'

# str() chuyển đổi để có thể nối
print(str(age) + " tuổi")   # 25 tuổi

Chạy code và xác nhận rằng bạn nhận được TypeError.

Python Editor

Chạy code để xem đầu ra

Khai báo và gán biến

Python dùng cái gọi là kiểu động (dynamic typing), nên không như Java hay C, bạn không cần khai báo kiểu trước như int x;.

Bạn định nghĩa biến đơn giản bằng cách dùng = để gán giá trị bên phải vào tên bên trái.

Và một khi biến đã có giá trị, bạn có thể tự do gán lại bằng giá trị mới.

Kiểu động vs kiểu tĩnh
Kiểuđộng(Python)x = 10→ intx = 'hello'→ strKiểutĩnh(Java / C)int x = 10phải khai báo kiểux = 'hello'lỗi biên dịchgángán lại OKkhai báo kiểukiểu không khớp

Python xác định kiểu khi chạy (động), trong khi Java và C cố định kiểu khi biên dịch (tĩnh)

Đây là ví dụ về gán và gán lại giá trị. Trong Python, bạn có thể gán mà không cần chỉ định kiểu, và có thể gán lại bao nhiêu lần tùy thích.

# Gán cho biến
name = "Minh"
age = 25

# Gán lại (ghi đè giá trị)
age = 26

# Gán các giá trị khác nhau cho nhiều biến cùng lúc (trong một dòng)
x, y, z = 1, 2, 3

Hãy làm ba bước sau theo thứ tự, in từng cái bằng print().

① Gán "Hà Nội" cho biến city và in ra.

② Gán lại city thành "Hồ Chí Minh" và in ra (xác nhận rằng bạn có thể ghi đè cùng một biến).

③ Gán 10, 20, 30 cho a, b, c cùng lúc và in cả ba ra với nhau.

Python Editor

Chạy code để xem đầu ra

Quy tắc đặt tên biến

Bạn có thể đặt tên biến tùy thích, nhưng có một vài quy tắc cần tuân theo.

- Ký tự được phép: chữ cái (a-z, A-Z), chữ số (0-9) và dấu gạch dưới (_)

- Ký tự đầu tiên phải là chữ cái hoặc dấu gạch dưới (không được bắt đầu bằng chữ số)

- Tên phân biệt chữ hoa chữ thường (ageAge là hai biến khác nhau)

Tên biếnOK / NGLý do
user_nameOKChữ cái và dấu gạch dưới
age2OKBắt đầu bằng chữ cái; chữ số sau đó thì OK
_totalOKBắt đầu bằng dấu gạch dưới được phép
2nd_userNGKhông được bắt đầu bằng chữ số
user-nameNGDấu gạch ngang không được phép
user nameNGKhông được có khoảng trắng

Trên hết, bạn không thể dùng từ khóa (keywords) của Python — những từ mà ngôn ngữ đã gán sẵn ý nghĩa. Có khoảng 35 từ khóa, gồm cả 'for', 'if', 'class', 'return', 'True', 'None''import'. Thử dùng một trong số đó làm tên biến và bạn sẽ nhận SyntaxError.

Cùng xem chuyện gì xảy ra khi bạn chạy một tên biến phá quy tắc.

Python Editor

Chạy code để xem đầu ra

Hằng số — viết các giá trị không đổi

Các giá trị mà bạn đặt một lần và không bao giờ thay đổi được gọi là hằng số (constants), và quy ước trong Python là viết chúng bằng chữ in hoa với dấu gạch dưới.

Nếu số 20 cứ thế xuất hiện giữa code, người đọc không có ý niệm gì tại sao là 20 (một con số bí ẩn như vậy được gọi là magic number). Đặt tên nó như một hằng số ngay từ đầu — LEGAL_AGE = 20 — thì ý nghĩa rõ ràng ngay từ cái nhìn đầu tiên, hơn nữa khi muốn đổi giá trị bạn chỉ cần sửa đúng một dòng đó.

# Hằng số dùng chữ in hoa + dấu gạch dưới
LEGAL_AGE = 20
MAX_RETRY = 3
PI = 3.14159

print(f"Tuổi hợp pháp là {LEGAL_AGE}")
print(f"Số lần thử tối đa: {MAX_RETRY}")
print(f"Pi xấp xỉ {PI}")

Python không có hằng số thực sự

Khác với C hay Java, Python không có cách tích hợp nào để cấm việc gán lại. Viết LEGAL_AGE = 20 rồi LEGAL_AGE = 25, không có lỗi nào — giá trị chỉ đơn giản là thay đổi. Hãy nghĩ chữ in hoa như một quy ước giữa các lập trình viên với ý nghĩa "làm ơn đừng đổi cái này".

Cùng tính giá đã bao gồm thuế bằng cách dùng hằng số.

① Gán 0.1 cho hằng số TAX_RATE (thuế suất tiêu thụ).

② Gán 980 cho price.

③ Tính giá đã bao gồm thuế (price × (1 + TAX_RATE)) và in ra bằng print().

Python Editor

Chạy code để xem đầu ra

Kiểm tra và chuyển đổi kiểu

Hàm type() cho bạn biết kiểu dữ liệu của một biến (loại dữ liệu nào nó đang chứa). Còn các hàm dựng sẵn (built-in functions) như int()str() (các hàm có sẵn cùng Python) cho phép bạn chuyển đổi một giá trị sang kiểu khác — đây gọi là chuyển đổi kiểu (type conversion), hay casting.

Ví dụ, nếu bạn muốn tính toán trên một số đến dưới dạng chuỗi từ input của người dùng, bạn phải chuyển nó sang int bằng int().

Đây là ví dụ về việc kiểm tra kiểu và chuyển đổi giữa chúng.

# Kiểm tra kiểu
x = 42
print(type(x))        # <class 'int'>
print(type("hello"))  # <class 'str'>

# Chuyển đổi kiểu
num_str = "100"
num_int = int(num_str)   # str → int
back_to_str = str(num_int)  # int → str

print(num_int + 50)  # 150
Luồng chuyển đổi kiểu
"100"strint()chuyển100intstr()chuyển"100"strtruyềnstr→inttruyềnint→str

Bạn được cho một giá dưới dạng chuỗi: price_str = "1980".

① Chuyển nó sang int bằng int(), rồi tính và in ra giá đã bao gồm thuế (cộng thêm thuế tiêu thụ 10%).

② Dùng type() để in kiểu trước (price_str) và sau (price_int) khi chuyển đổi.

Python Editor

Chạy code để xem đầu ra

ValueError khi không thể chuyển đổi

Truyền cho int() hoặc float() một chuỗi không thể đọc thành số, và bạn nhận ValueError. Ví dụ, int("abc")float("hello") đều gây lỗi. Khi chuyển đổi những thứ như input của người dùng, hãy bọc lại trong try / except để xử lý exception.

Chạy code và xác nhận rằng bạn nhận ValueError. Xử lý đúng cách ValueError cần đến xử lý ngoại lệ (exception handling).

Python Editor

Chạy code để xem đầu ra

Trong bài này bạn đã học cách dùng biến, cơ bản về int và str, và cách hoạt động của kiểu động.

Từ kiểm tra kiểu bằng type() đến chuyển đổi kiểu bằng int()str(), và cả ValueError xuất hiện khi việc chuyển đổi thất bại — bạn đã có nền tảng đầy đủ về kiểu dữ liệu trong Python.

QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Cái nào sau đây không thể dùng làm tên biến?

Câu 2Đoạn code này in ra gì?
x = str(3.14)
print(type(x))

Câu 3Đoạn code này in ra gì?
x = "10"
print(int(x) + 5)