Bài 2: Biến và kiểu dữ liệu trong Python

Bài 1 bạn đã chạy được dòng code đầu tiên. Giờ ta học thứ có mặt trong mọi chương trình: biến (nơi lưu dữ liệu) và kiểu dữ liệu (loại dữ liệu đó là gì). Cuối bài, bạn sẽ tự viết một chương trình tính chỉ số BMI chạy được thật.
⏱️ Cách học bài này (~30 phút): đọc khái niệm + code mẫu (10’), tự gõ và chạy các bài thực hành (12’), xem lỗi thường gặp (4’), tự kiểm + lưu code mang về (4’).
Mục tiêu bài học
Sau bài này bạn sẽ:
- Tạo và gán giá trị cho biến.
- Nhận ra 4 kiểu dữ liệu cơ bản:
int,float,str,bool. - Dùng
input()để nhận dữ liệu và ép kiểu để tính toán. - Tự viết một chương trình tính BMI hoàn chỉnh.
🎯 Đóng góp vào đích series: bài này thêm 1 chương trình (máy tính BMI) vào kho chương trình của bạn — đích cuối series là kho ≥13 chương trình + 1 dự án.
1. Biến là gì?
Biến là một cái tên trỏ tới một giá trị được lưu trong bộ nhớ. Tạo biến bằng dấu = (gán):
ten = "Lan" # gán chuỗi "Lan" cho biến ten
tuoi = 25 # gán số 25 cho biến tuoi
Dấu = ở đây không phải “bằng” như toán học, mà là “gán giá trị bên phải vào tên bên trái”. Sau đó dùng lại tên biến bất cứ đâu:
print(ten) # in ra: Lan
print(tuoi + 1) # in ra: 26
Quy tắc đặt tên: dùng chữ thường, nối bằng _ (vd can_nang), không bắt đầu bằng số, không dấu cách.
2. Bốn kiểu dữ liệu cơ bản
| Kiểu | Là gì | Ví dụ |
|---|---|---|
int |
số nguyên | 25, -3, 1000 |
float |
số thập phân | 1.65, 3.14, -0.5 |
str |
chuỗi văn bản (trong dấu nháy) | "Lan", 'xin chào' |
bool |
đúng/sai | True, False |
Kiểm tra kiểu bằng type():
print(type(25)) # <class 'int'>
print(type(1.65)) # <class 'float'>
print(type("Lan")) # <class 'str'>
3. input() và ép kiểu — điểm cốt tử
input() nhận dữ liệu người dùng gõ, nhưng luôn trả về chuỗi (str), kể cả khi họ gõ số. Muốn tính toán phải ép kiểu:
tuoi = input("Tuổi của bạn: ") # tuoi là chuỗi, vd "25"
tuoi = int(tuoi) # ép sang số nguyên để tính được
int(...)→ ép sang số nguyên.float(...)→ ép sang số thập phân.str(...)→ ép sang chuỗi (để nối với văn bản).
4. Code mẫu có chú thích — chương trình tính BMI
# Chương trình tính chỉ số BMI
ten = input("Tên bạn: ") # str: tên không cần ép kiểu
can_nang = float(input("Cân nặng (kg): ")) # ép sang float vì có thể có phần lẻ
chieu_cao = float(input("Chiều cao (m): ")) # vd 1.65
bmi = can_nang / (chieu_cao ** 2) # ** là luỹ thừa: chieu_cao bình phương
print(ten, "có BMI là:", round(bmi, 1)) # round(x, 1): làm tròn 1 chữ số thập phân
Chạy thử (nhập 60 và 1.65), kết quả in ra:
Tên bạn: Lan
Cân nặng (kg): 60
Chiều cao (m): 1.65
Lan có BMI là: 22.0
Lưu ý cách print(...) nối nhiều phần bằng dấu phẩy — Python tự thêm khoảng trắng giữa chúng.
5. Bài thực hành (tự gõ và chạy)
Bài 1. Tạo 3 biến ten (str), tuoi (int), cao (float) và in ra cả ba.
Bài 2. Viết chương trình hỏi năm sinh rồi in ra tuổi (gợi ý: 2026 - int(input(...))).
Bài 3. Viết chương trình hỏi giá sản phẩm và số lượng, in ra tổng tiền.
Bài 4. Sửa lại chương trình BMI để in thêm dòng phân loại đơn giản (vd in “BMI của bạn:” trước số) — luyện nối chuỗi với số.
✅ Kết quả mong đợi: mỗi chương trình chạy không báo lỗi và in ra đúng con số. Riêng Bài 2, nhập
2000phải ra26.
6. Lỗi thường gặp & cách sửa
| Lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
TypeError: can only concatenate str |
nối chuỗi với số bằng + |
ép số sang chuỗi: "Tuổi: " + str(tuoi), hoặc dùng dấu phẩy trong print |
ValueError: invalid literal for int() |
int("hai mươi") — ép chữ sang số |
chỉ ép khi người dùng gõ số; nhập đúng định dạng |
| Kết quả tính ra sai/0 | quên ép kiểu, đang tính trên chuỗi | bọc int(...) hoặc float(...) quanh input() |
NameError: name 'ten' is not defined |
dùng biến chưa tạo / gõ sai tên | kiểm tra chính tả tên biến, tạo biến trước khi dùng |
💾 Mang về — code hoàn chỉnh
Lưu file bmi.py với chương trình ở mục 4 vào kho chương trình của bạn. Đây là chương trình thứ 1 trong series — bạn sẽ tích luỹ ≥13 chương trình như vậy.
Thuật ngữ chốt
| Thuật ngữ | Giải thích ngắn |
|---|---|
| Biến (variable) | Tên trỏ tới một giá trị lưu trong bộ nhớ. |
Gán (=) |
Đặt giá trị bên phải vào biến bên trái. |
| Kiểu dữ liệu | Loại của giá trị: int, float, str, bool. |
| Ép kiểu (cast) | Chuyển giá trị sang kiểu khác: int(), float(), str(). |
input() |
Nhận dữ liệu người dùng gõ; luôn trả về chuỗi. |
Tự kiểm tra
1. type(3.0) trả về kiểu gì?
2. Vì sao int(input()) + 5 chạy được mà input() + 5 báo lỗi?
3. Viết 1 dòng tạo biến gia bằng 19.5.
4. (Mini-task) Tự gõ và chạy chương trình BMI ở mục 4, thử với 70 kg và 1.70 m.
Gợi ý đáp án
- 1:
float. - 2:
input()trả về chuỗi;chuỗi + 5là cộng chuỗi với số → lỗi.int(...)đổi chuỗi thành số nên cộng được. - 3:
gia = 19.5 - 4: (tự chạy) — kết quả BMI ≈
24.2.
Ghi nhớ nhanh
- Biến = tên trỏ tới giá trị; gán bằng
=. - 4 kiểu:
int,float,str,bool. input()luôn ra chuỗi → ép kiểu trước khi tính.
Bài tập về nhà: viết chương trình hỏi 2 số rồi in ra tổng, hiệu, tích, thương của chúng (nhớ ép kiểu). Ôn lại Bài 1: Cài đặt & chạy code đầu tiên. Bài 3: chuỗi và thao tác văn bản.
Câu hỏi thường gặp
Vì sao input() luôn cho ra chuỗi (string)?
Python coi mọi thứ người dùng gõ vào là văn bản, kể cả khi gõ số. Muốn tính toán, bạn phải ép kiểu bằng int() hoặc float(). Quên bước này là nguyên nhân lỗi phổ biến nhất của người mới.
Khi nào dùng int, khi nào dùng float?
int cho số nguyên (tuổi, số lượng), float cho số có phần thập phân (cân nặng, giá tiền, điểm trung bình). Nếu nghi ngờ kết quả có phần lẻ, dùng float cho an toàn.
Thợ code chính hiệu, thích dắt người mới qua mấy đoạn 'khó nhằn' bằng giọng nhẹ tênh. Châm ngôn: cứ làm dự án thật, sai thì sửa, vui là chính.
Bài liên quan

Các ngôn ngữ lập trình đáng học nhất 2026 (chọn theo mục tiêu)
Đừng hỏi ‘ngôn ngữ nào tốt nhất’ — hãy hỏi ‘mình muốn làm gì’. Bài viết gợi ý ngôn ngữ nên học theo từng mục tiêu (web, dữ liệu/AI, app, tự động hoá) và cách chọn ngôn ngữ đầu tiên.

Học JavaScript từ con số 0: lộ trình cho người mới
JavaScript là ngôn ngữ của web. Bài viết vạch lộ trình tự học từ con số 0: nền tảng cần nắm theo đúng thứ tự, dự án thực hành cho từng mốc, và những bẫy khiến người mới bỏ cuộc.

Python hay JavaScript: nên học ngôn ngữ nào trước?
Chọn sai ngôn ngữ đầu tiên có thể khiến bạn mất vài tháng. Bài viết so sánh Python và JavaScript theo nơi chúng chạy, thứ bạn xây được và mục tiêu nghề, kèm khuyến nghị rõ ràng.