Danh sách bài viết

Bài 5: Biến và 4 kiểu dữ liệu nguyên thủy: int, float, str, bool

Bài đầu tiên về Python cho lộ trình AI Engineer: biến là gì, quy tắc đặt tên, 4 kiểu dữ liệu nguyên thủy int, float, str, bool. Cách dùng type() và type conversion.

24/05/2026
15 phút đọc
0 lượt xem
1

Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu biến là gì và cách Python gán biến.
  • Biết quy tắc đặt tên biến hợp lệ và convention snake_case.
  • Phân biệt 4 kiểu dữ liệu nguyên thủy: int, float, str, bool.
  • Dùng type() để kiểm tra kiểu của một giá trị.
  • Chuyển đổi giữa các kiểu với int(), float(), str(), bool().

Bài chạy trên Python 3.8 trở lên (Google Colab mặc định dùng Python 3.10+).

2

Biến (variable) là gì?

Biến là một cái tên được gắn với một giá trị. Bạn dùng tên đó để truy xuất hoặc cập nhật giá trị về sau.

Ba thành phần của một biến:

  • Tên (identifier): ví dụ age, price.
  • Giá trị (value): ví dụ 25, 9.99.
  • Kiểu dữ liệu (type): kiểu của giá trị, ví dụ int, float.

Trong Python, kiểu được suy ra tự động từ giá trị bạn gán — bạn không phải khai báo kiểu trước như C, C++ hay Java.

3

Cú pháp gán biến trong Python

Toán tử = dùng để gán giá trị bên phải vào biến bên trái:

# Gán giá trị cho biến
x = 5                  # x là số nguyên 5
name = "Alice"         # name là chuỗi "Alice"
is_active = True       # is_active là giá trị logic True

Có thể gán lại biến với giá trị mới — kể cả khác kiểu:

x = 5         # x là int
x = "hello"   # giờ x là str — Python cho phép
print(x)      # hello

Đặc điểm này gọi là dynamic typing: kiểu của biến đi theo giá trị hiện tại, không cố định khi khai báo.

Có thể gán nhiều biến trên một dòng:

# Gán song song
a, b, c = 1, 2, 3
print(a, b, c)   # 1 2 3
4

Quy tắc đặt tên biến hợp lệ

Tên biến trong Python phải tuân theo các quy tắc sau:

  • Chỉ chứa chữ cái (a-z, A-Z), chữ số (0-9)dấu gạch dưới _.
  • Không bắt đầu bằng chữ số.
  • Phân biệt chữ hoa và chữ thường: age khác Age khác AGE.
  • Không được trùng với từ khoá (keyword) của Python.
  • Không chứa khoảng trắng và ký tự đặc biệt như -, @, !.

Ví dụ:

# Hợp lệ
age = 25
user_name = "Alice"
_count = 0
score2 = 100

# Không hợp lệ — sẽ báo SyntaxError
# 2score = 100          # bắt đầu bằng số
# user-name = "Alice"   # chứa dấu '-'
# class = "AI"          # 'class' là từ khoá

Để xem toàn bộ từ khoá Python:

import keyword
print(keyword.kwlist)
# ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
#  'break', 'class', 'continue', 'def', 'del', 'elif', 'else', ...]

Một số từ khoá thường vô tình bị dùng làm tên biến: class, type, list, dict, id, input. Hai tên cuối thực ra là built-in function chứ không phải keyword, nhưng vẫn nên tránh để khỏi ghi đè hành vi mặc định.

5

Convention đặt tên: snake_case

PEP 8 (style guide chính thức của Python) khuyến nghị dùng snake_case cho biến và hàm: chữ thường, các từ nối bằng dấu gạch dưới.

# Khuyến nghị (snake_case)
user_name = "Alice"
total_price = 100.5
is_logged_in = False
num_epochs = 10

# Không nên (camelCase / PascalCase) trong Python
userName = "Alice"        # phong cách JavaScript
TotalPrice = 100.5        # phong cách class, không phải biến

Một tên tốt nên mô tả giá trị mà nó đang giữ:

# Tốt
learning_rate = 0.001
num_samples = 1000

# Tệ — không ai biết x, a là gì
x = 0.001
a = 1000

Quy ước thêm:

  • Hằng số (constant) viết HOA toàn bộ: MAX_EPOCHS = 50, PI = 3.14159.
  • Tên class viết PascalCase: class UserProfile.
  • Biến nội bộ bắt đầu bằng _: _cache.
6

4 kiểu dữ liệu nguyên thủy

Python có 4 kiểu dữ liệu nguyên thủy hay gặp nhất:

  • int — số nguyên
  • float — số thực (số thập phân)
  • str — chuỗi ký tự
  • bool — giá trị logic (đúng / sai)

6.1. int — số nguyên

Số nguyên không có phần thập phân. Có thể âm, dương, hoặc 0.

age = 25
year = 2026
balance = -100

# Python 3 không giới hạn độ lớn của int
huge = 10 ** 50   # 10 mũ 50, vẫn lưu được chính xác
print(huge)

Khác với nhiều ngôn ngữ khác (C, Java có int32, int64), int của Python 3 mở rộng tự động theo nhu cầu, không bị tràn số (overflow).

6.2. float — số thực

Số có phần thập phân, lưu dưới dạng dấu phẩy động 64-bit theo chuẩn IEEE 754.

price = 9.99
pi = 3.14159
temperature = -2.5
small = 1.5e-3   # = 0.0015 (ký hiệu khoa học)

Lưu ý: float không có độ chính xác tuyệt đối. Ví dụ kinh điển:

print(0.1 + 0.2)
# 0.30000000000000004

Đây không phải lỗi của Python — đây là giới hạn của biểu diễn nhị phân cho số thập phân. Khi cần độ chính xác cao (tiền tệ, kế toán), dùng module decimal ở bài sau. Trong AI / ML, sai số nhỏ này thường không ảnh hưởng vì model làm việc với hàng triệu phép tính xấp xỉ.

6.3. str — chuỗi ký tự

Chuỗi là dãy ký tự, đặt trong dấu nháy đơn '...' hoặc nháy kép "...". Hai cách hoàn toàn tương đương.

name = "Alice"
greeting = 'Hello, world'
empty = ""

Chuỗi nhiều dòng dùng nháy ba:

paragraph = """Đây là chuỗi
trải dài nhiều dòng."""

Nối chuỗi bằng +:

first = "Alice"
last = "Nguyen"
full = first + " " + last
print(full)   # Alice Nguyen

f-string (Python 3.6+) là cách ngắn gọn để chèn biến vào chuỗi:

name = "Alice"
age = 25

message = f"Hello, {name}. You are {age} years old."
print(message)
# Hello, Alice. You are 25 years old.

6.4. bool — giá trị logic

Chỉ có đúng hai giá trị: TrueFalse. Lưu ý viết hoa chữ T và F — viết thường true / false sẽ báo NameError.

is_active = True
is_admin = False

print(is_active)   # True
print(is_admin)    # False

Bool tham gia vào các biểu thức điều kiện (sẽ học ở bài if / elif / else).

7

Kiểm tra kiểu với type()

Hàm built-in type() trả về kiểu của một giá trị:

print(type(25))            # <class 'int'>
print(type(9.99))          # <class 'float'>
print(type("Alice"))       # <class 'str'>
print(type(True))          # <class 'bool'>

Hữu ích khi bạn không chắc một biến đang giữ kiểu nào — đặc biệt khi đọc dữ liệu từ file hoặc API:

value = "42"
print(type(value))    # <class 'str'> — đây là chuỗi, không phải số!
8

Type conversion cơ bản

Mỗi kiểu có một constructor trùng tên để chuyển giá trị từ kiểu khác sang:

# str -> int
n = int("5")
print(n, type(n))      # 5 <class 'int'>

# int -> str
s = str(123)
print(s, type(s))      # '123' <class 'str'>

# str -> float
f = float("3.14")
print(f, type(f))      # 3.14 <class 'float'>

# int -> float
print(float(5))        # 5.0

# float -> int (cắt phần thập phân, KHÔNG làm tròn)
print(int(3.9))        # 3
print(int(-3.9))       # -3

Chuyển sang bool theo quy tắc: các giá trị "rỗng" hoặc bằng 0 thành False, còn lại thành True.

print(bool(0))         # False
print(bool(0.0))       # False
print(bool(""))        # False
print(bool(None))      # False

print(bool(1))         # True
print(bool(-1))        # True
print(bool("hello"))   # True
print(bool("False"))   # True — vì là chuỗi khác rỗng!

Conversion sẽ báo lỗi nếu giá trị không hợp lệ:

int("abc")
# ValueError: invalid literal for int() with base 10: 'abc'

int("3.14")
# ValueError: invalid literal for int() with base 10: '3.14'
# Muốn lấy phần nguyên của '3.14', phải float() trước rồi int():
print(int(float("3.14")))   # 3

Tình huống hay gặp: nhận input từ bàn phím qua input() luôn trả về str, phải convert thủ công sang số:

raw = input("Nhập tuổi: ")   # giả sử người dùng gõ 25
age = int(raw)               # chuyển sang int
print(age + 1)               # 26
9

Bài tập

Mở một notebook Colab mới và thử trực tiếp:

Bài 1: Khai báo 4 biến lưu thông tin của bạn — một biến cho mỗi kiểu:

  • full_name kiểu str
  • age kiểu int
  • height_m kiểu float (chiều cao tính bằng mét, ví dụ 1.72)
  • is_student kiểu bool

In ra từng biến cùng với type() của nó. Sau đó dùng f-string in ra 1 dòng tóm tắt: "Alice, 25 tuổi, cao 1.72m, sinh viên: True".

Bài 2: Cho đoạn code sau:

price_str = "199.5"
quantity_str = "3"

Tính tổng tiền (price * quantity) và in ra dưới dạng float. Yêu cầu: phải convert 2 chuỗi trên về số trước khi nhân — nếu nhân trực tiếp Python sẽ báo lỗi.

Gợi ý: dùng float() cho price_strint() cho quantity_str.

10

Tóm tắt

  • Biến gắn một tên với một giá trị; kiểu được suy ra từ giá trị (dynamic typing).
  • Tên biến: chữ cái / số / _, không bắt đầu bằng số, không trùng từ khoá, phân biệt hoa-thường.
  • Convention Python: snake_case cho biến và hàm; UPPER_CASE cho hằng số.
  • 4 kiểu nguyên thủy: int (số nguyên, không giới hạn độ lớn), float (số thực, có sai số nhỏ), str (chuỗi, hỗ trợ f-string), bool (True / False, viết hoa).
  • type(x) trả về kiểu của x.
  • Convert giữa các kiểu bằng int(), float(), str(), bool(); báo ValueError nếu input không hợp lệ.

Bài tiếp theo sẽ học toán tử số học, so sánh và logic để thao tác trên các biến vừa khai báo.