🏷️ 4.1 Khai báo biến
📖 Giới thiệu
Biến (variable) là "hộp chứa" để lưu trữ dữ liệu trong chương trình. Hiểu cách khai báo và sử dụng biến là bước đầu tiên để thành thạo lập trình Python.
Mục tiêu bài học:
- Hiểu khái niệm biến và cách hoạt động
- Biết cách khai báo biến đúng cách
- Nắm vững quy tắc đặt tên biến
- Hiểu về phạm vi biến (scope)
🔧 Cú pháp
Cú pháp khai báo biến:
ten_bien = gia_triCác cách khai báo:
# 1. Khai báo đơn giản
ten = "Python"
tuoi = 25
# 2. Khai báo nhiều biến cùng lúc
a, b, c = 1, 2, 3
# 3. Gán cùng giá trị cho nhiều biến
x = y = z = 0
# 4. Hoán đổi giá trị
a, b = b, a🔬 Phân tích & Giải thích chi tiết
1. 🎯 Biến là gì?
Khái niệm:
- Biến là tên gọi cho một vùng nhớ lưu trữ dữ liệu
- Python tự động quản lý bộ nhớ (không cần khai báo kiểu)
- Biến có thể thay đổi giá trị trong quá trình chạy
Ví dụ minh họa:
# Tạo biến - như dán nhãn lên hộp
ten = "Minh" # Hộp có nhãn "ten" chứa "Minh"
tuoi = 20 # Hộp có nhãn "tuoi" chứa 20
# Thay đổi giá trị - thay nội dung hộp
tuoi = 21 # Bây giờ hộp "tuoi" chứa 212. 📋 Quy tắc đặt tên biến
Quy tắc bắt buộc:
# ✅ Đúng
ten = "Python"
age_2024 = 25
_temp = 100
userName = "admin"
# ❌ Sai
2age = 25 # Không bắt đầu bằng số
user-name = "admin" # Không dùng dấu gạch ngang
class = "12A" # Không dùng từ khóa PythonQuy tắc khuyến nghị:
# ✅ Tốt - snake_case (Python style)
ten_hoc_sinh = "Minh"
diem_trung_binh = 8.5
so_dien_thoai = "0123456789"
# ⚠️ Được nhưng không khuyến khích
tenHocSinh = "Minh" # camelCase
TenHocSinh = "Minh" # PascalCaseTên biến có nghĩa:
# ✅ Tốt - tên có nghĩa
luong_co_ban = 5000000
so_nam_kinh_nghiem = 3
email_khach_hang = "customer@email.com"
# ❌ Không tốt - tên không có nghĩa
x = 5000000 # x là gì?
data = 3 # data gì?
s = "customer@email.com" # s là gì?3. 🔄 Gán và thay đổi giá trị
# Gán giá trị ban đầu
diem_toan = 8.0
print(diem_toan) # 8.0
# Thay đổi giá trị
diem_toan = 8.5
print(diem_toan) # 8.5
# Thay đổi dựa trên giá trị cũ
diem_toan = diem_toan + 0.5
print(diem_toan) # 9.0
# Viết tắt
diem_toan += 0.5 # Tương đương diem_toan = diem_toan + 0.5
print(diem_toan) # 9.54. 📚 Các cách khai báo nâng cao
Khai báo nhiều biến:
# Cách 1: Từng dòng
ho = "Nguyễn"
ten = "Minh"
tuoi = 20
# Cách 2: Cùng một dòng
ho, ten, tuoi = "Nguyễn", "Minh", 20
# Cách 3: Từ list
thong_tin = ["Nguyễn", "Minh", 20]
ho, ten, tuoi = thong_tinHoán đổi giá trị:
# Cách truyền thống (ngôn ngữ khác)
# temp = a
# a = b
# b = temp
# Cách Python - Elegant!
a = 5
b = 10
a, b = b, a # Hoán đổi trong 1 dòng
print(a, b) # 10 55. 🎯 Phạm vi biến (Variable Scope)
# Biến toàn cục (global)
ten_truong = "THPT Nguyễn Huệ"
def thong_tin_hoc_sinh():
# Biến cục bộ (local)
ten_hoc_sinh = "Minh"
lop = "12A1"
# Có thể dùng biến toàn cục
print(f"Học sinh {ten_hoc_sinh} học tại {ten_truong}")
return ten_hoc_sinh
# Gọi function
hoc_sinh = thong_tin_hoc_sinh()
print(hoc_sinh) # "Minh"
# Lỗi! Biến cục bộ không truy cập được từ ngoài
# print(ten_hoc_sinh) # NameError💻 Ví dụ minh họa
Ví dụ 1: Quản lý thông tin học sinh
# Chương trình quản lý thông tin một học sinh
print("=== NHẬP THÔNG TIN HỌC SINH ===")
# Nhập thông tin cơ bản
ho_dem = input("Họ và tên đệm: ")
ten = input("Tên: ")
nam_sinh = int(input("Năm sinh: "))
# Tính tuổi
nam_hien_tai = 2024
tuoi = nam_hien_tai - nam_sinh
# Nhập điểm số
print("\nNhập điểm các môn:")
diem_toan = float(input("Toán: "))
diem_ly = float(input("Lý: "))
diem_hoa = float(input("Hóa: "))
# Tính điểm trung bình
tong_diem = diem_toan + diem_ly + diem_hoa
so_mon = 3
diem_trung_binh = tong_diem / so_mon
# Xác định xếp loại
if diem_trung_binh >= 8.0:
xep_loai = "Giỏi"
emoji = "🏆"
elif diem_trung_binh >= 6.5:
xep_loai = "Khá"
emoji = "👍"
elif diem_trung_binh >= 5.0:
xep_loai = "Trung bình"
emoji = "📚"
else:
xep_loai = "Yếu"
emoji = "💪"
# Hiển thị kết quả
print("\n" + "=" * 40)
print("THÔNG TIN HỌC SINH")
print("=" * 40)
print(f"Họ tên: {ho_dem} {ten}")
print(f"Tuổi: {tuoi}")
print(f"Điểm TB: {diem_trung_binh:.2f}")
print(f"Xếp loại: {emoji} {xep_loai}")Ví dụ 2: Tính toán lương nhân viên
# Chương trình tính lương nhân viên
print("=== TÍNH LƯƠNG NHÂN VIÊN ===\n")
# Thông tin cơ bản
ten_nhan_vien = input("Tên nhân viên: ")
chuc_vu = input("Chức vụ: ")
# Thông tin lương
luong_co_ban = float(input("Lương cơ bản (VNĐ): "))
so_ngay_lam = int(input("Số ngày làm việc trong tháng: "))
so_ngay_chuan = 22 # Số ngày làm việc chuẩn
# Tính các khoản
# Lương theo ngày làm việc
luong_thuc_te = luong_co_ban * (so_ngay_lam / so_ngay_chuan)
# Phụ cấp
if chuc_vu.lower() == "trưởng phòng":
phu_cap = 2000000
elif chuc_vu.lower() == "phó phòng":
phu_cap = 1000000
else:
phu_cap = 0
# Thưởng chuyên cần
if so_ngay_lam >= so_ngay_chuan:
thuong_chuyen_can = luong_co_ban * 0.1 # 10% lương cơ bản
else:
thuong_chuyen_can = 0
# Tổng lương
tong_luong = luong_thuc_te + phu_cap + thuong_chuyen_can
# Thuế thu nhập (giả định đơn giản)
if tong_luong > 11000000:
thue = tong_luong * 0.1 # 10%
else:
thue = 0
# Lương thực nhận
luong_thuc_nhan = tong_luong - thue
# Hiển thị bảng lương
print("\n" + "=" * 45)
print("BẢNG LƯƠNG THÁNG")
print("=" * 45)
print(f"Nhân viên: {ten_nhan_vien}")
print(f"Chức vụ: {chuc_vu}")
print("-" * 45)
print(f"Lương cơ bản: {luong_co_ban:>12,.0f} VNĐ")
print(f"Lương thực tế: {luong_thuc_te:>12,.0f} VNĐ")
print(f"Phụ cấp chức vụ: {phu_cap:>12,.0f} VNĐ")
print(f"Thưởng chuyên cần: {thuong_chuyen_can:>12,.0f} VNĐ")
print("-" * 45)
print(f"Tổng lương: {tong_luong:>12,.0f} VNĐ")
print(f"Thuế TNCN: {thue:>12,.0f} VNĐ")
print("=" * 45)
print(f"LƯƠNG THỰC NHẬN: {luong_thuc_nhan:>12,.0f} VNĐ")
print("=" * 45)Ví dụ 3: Hoán đổi và manipulate biến
# Demo các thao tác với biến
print("=== DEMO THAO TÁC BIẾN ===\n")
# 1. Khai báo và gán giá trị
print("1. Khai báo biến:")
a = 10
b = 20
print(f" a = {a}, b = {b}")
# 2. Hoán đổi giá trị
print("\n2. Hoán đổi giá trị:")
print(f" Trước: a = {a}, b = {b}")
a, b = b, a
print(f" Sau: a = {a}, b = {b}")
# 3. Khai báo nhiều biến cùng lúc
print("\n3. Khai báo nhiều biến:")
x, y, z = 1, 2, 3
print(f" x = {x}, y = {y}, z = {z}")
# 4. Gán cùng giá trị cho nhiều biến
print("\n4. Gán cùng giá trị:")
m = n = p = 0
print(f" m = {m}, n = {n}, p = {p}")
# 5. Cập nhật giá trị
print("\n5. Cập nhật giá trị:")
diem = 8.0
print(f" Điểm ban đầu: {diem}")
diem += 0.5 # Tương đương: diem = diem + 0.5
print(f" Sau khi cộng 0.5: {diem}")
diem *= 1.1 # Tương đương: diem = diem * 1.1
print(f" Sau khi nhân 1.1: {diem:.2f}")
# 6. Kiểm tra kiểu dữ liệu
print("\n6. Kiểm tra kiểu dữ liệu:")
ten = "Python"
tuoi = 30
diem = 9.5
la_hoc_sinh = True
print(f" {ten} có kiểu: {type(ten)}")
print(f" {tuoi} có kiểu: {type(tuoi)}")
print(f" {diem} có kiểu: {type(diem)}")
print(f" {la_hoc_sinh} có kiểu: {type(la_hoc_sinh)}")🏋️ Thực hành
Bài tập 1: Khai báo biến cơ bản
Khai báo biến cho thông tin cá nhân của bạn:
# TODO: Khai báo các biến sau với thông tin của bạn
# - Họ tên
# - Tuổi
# - Thành phố
# - Email
# - Số điện thoại
# TODO: In ra tất cả thông tinĐáp án:
ho_ten = "Nguyễn Văn An"
tuoi = 22
thanh_pho = "Hà Nội"
email = "van.an@email.com"
so_dien_thoai = "0123456789"
print(f"Họ tên: {ho_ten}")
print(f"Tuổi: {tuoi}")
print(f"Thành phố: {thanh_pho}")
print(f"Email: {email}")
print(f"Số điện thoại: {so_dien_thoai}")Bài tập 2: Hoán đổi giá trị
Cho hai biến, hãy hoán đổi giá trị của chúng:
# Cho trước
so_thu_nhat = 100
so_thu_hai = 200
print(f"Trước: {so_thu_nhat}, {so_thu_hai}")
# TODO: Hoán đổi giá trị
# Viết code hoán đổi ở đây
print(f"Sau: {so_thu_nhat}, {so_thu_hai}")
# Kết quả mong muốn: Sau: 200, 100Đáp án:
so_thu_nhat = 100
so_thu_hai = 200
print(f"Trước: {so_thu_nhat}, {so_thu_hai}")
# Hoán đổi
so_thu_nhat, so_thu_hai = so_thu_hai, so_thu_nhat
print(f"Sau: {so_thu_nhat}, {so_thu_hai}")Bài tập 3: Tính toán với biến
Viết chương trình tính diện tích hình chữ nhật:
# TODO: Nhập chiều dài và chiều rộng
# TODO: Tính diện tích và chu vi
# TODO: Hiển thị kết quả đẹp mắtĐáp án:
print("=== TÍNH DIỆN TÍCH HÌNH CHỮ NHẬT ===")
# Nhập dữ liệu
chieu_dai = float(input("Chiều dài (m): "))
chieu_rong = float(input("Chiều rộng (m): "))
# Tính toán
dien_tich = chieu_dai * chieu_rong
chu_vi = 2 * (chieu_dai + chieu_rong)
# Hiển thị kết quả
print(f"\nKết quả:")
print(f"Diện tích: {dien_tich:.2f} m²")
print(f"Chu vi: {chu_vi:.2f} m")Bài tập 4: Kiểm tra tên biến
Biến nào sau đây hợp lệ? Sửa những biến không hợp lệ:
# TODO: Xác định biến nào hợp lệ, biến nào không
1_ten = "Python" # ?
user-age = 25 # ?
_temp = 100 # ?
class = "12A" # ?
userName = "admin" # ?
tên_học_sinh = "Minh" # ?Đáp án:
# 1_ten = "Python" # ❌ Sai - bắt đầu bằng số
ten_1 = "Python" # ✅ Sửa
# user-age = 25 # ❌ Sai - dùng dấu gạch ngang
user_age = 25 # ✅ Sửa
_temp = 100 # ✅ Đúng
# class = "12A" # ❌ Sai - từ khóa Python
lop_hoc = "12A" # ✅ Sửa
userName = "admin" # ✅ Đúng (nhưng nên dùng snake_case)
user_name = "admin" # ✅ Tốt hơn
# tên_học_sinh = "Minh" # ✅ Đúng (Python hỗ trợ Unicode)
ten_hoc_sinh = "Minh" # ✅ Tốt hơn (dùng ASCII)📋 Tóm tắt
Những điều quan trọng về biến:
🎯 Khái niệm: Biến là tên gọi cho vùng nhớ lưu trữ dữ liệu
📋 Quy tắc đặt tên:
- Bắt đầu bằng chữ cái hoặc dấu gạch dưới
- Chỉ chứa chữ cái, số, dấu gạch dưới
- Phân biệt hoa thường
- Không dùng từ khóa Python
🎨 Convention Python:
python# ✅ Khuyến nghị ten_hoc_sinh = "Minh" # snake_case SO_PI = 3.14159 # CONSTANT🔄 Thao tác cơ bản:
python# Gán giá trị bien = gia_tri # Thay đổi bien = gia_tri_moi # Cập nhật bien += gia_tri_tang # Hoán đổi a, b = b, a📚 Patterns thường dùng:
python# Khai báo nhiều biến x, y, z = 1, 2, 3 # Gán cùng giá trị a = b = c = 0 # Unpacking thong_tin = ["Minh", 20, "Hà Nội"] ten, tuoi, thanh_pho = thong_tin
Chuẩn bị cho bài tiếp theo:
Bài tiếp theo sẽ học về 🔢 Kiểu số (int, float, complex) - các kiểu dữ liệu số trong Python và cách sử dụng chúng hiệu quả!
💡 Mẹo: Đặt tên biến có nghĩa giúp code dễ đọc và maintain. Tránh dùng a, b, c... cho các biến quan trọng!
🎯 Thực hành: Hãy thực hiện các bài tập để thành thạo việc khai báo và thao tác với biến!