Mục lục
Mục Tiêu Bài Học
Sau khi hoàn thành bài này, bạn sẽ:
- ✅ Hiểu variable là gì và cách sử dụng
- ✅ Biết các kiểu dữ liệu cơ bản trong Python
- ✅ Khai báo và sử dụng variables đúng cách
- ✅ Chuyển đổi giữa các kiểu dữ liệu (type conversion)
- ✅ Áp dụng naming conventions chuẩn
Câu Chuyện Về Cái Hộp
Hãy tưởng tượng bạn đang dọn dẹp phòng với rất nhiều đồ vật: sách vở, quần áo, đồ chơi, dụng cụ học tập... Tất cả đang nằm ngổn ngang khắp nơi.
Vấn đề:
- 🤔 "Quyển sách Toán để đâu nhỉ?"
- 🤔 "Cái bút đỏ tôi mới mua đâu rồi?"
- 🤔 "Chiếc áo khoác nằm ở đống nào?"
Bạn phải lật tung cả phòng mỗi khi tìm thứ gì đó!
Giải pháp: Mua một số cái hộp, dán nhãn và sắp xếp:
📦 Hộp "Sách Giáo Khoa"
├─ Sách Toán
├─ Sách Văn
└─ Sách Anh
📦 Hộp "Văn Phòng Phẩm"
├─ Bút đỏ
├─ Bút xanh
└─ Tẩy, thước
📦 Hộp "Quần Áo"
├─ Áo khoác
├─ Áo thun
└─ Quần jeans
Kết quả:
- ✅ Tìm đồ nhanh chóng: "Bút đỏ? Ở hộp Văn Phòng Phẩm!"
- ✅ Tái sử dụng dễ dàng: Lấy ra, dùng xong bỏ lại vào
- ✅ Thay đổi linh hoạt: Thêm bớt đồ trong hộp khi cần
- ✅ Quản lý gọn gàng: Phòng luôn ngăn nắp
Trong lập trình cũng vậy! Khi code xử lý hàng trăm, hàng nghìn dữ liệu (tên người dùng, số tiền, điểm số...), bạn cần "cái hộp" để:
- 📝 Lưu trữ dữ liệu vào bộ nhớ
- 🏷️ Đặt tên dễ nhớ để tìm lại
- 🔄 Sử dụng lại nhiều lần
- ♻️ Thay đổi giá trị khi cần
Cái hộp đó chính là Variable!
Variables Là Gì?
Variable (biến) là "hộp chứa" để lưu trữ dữ liệu trong bộ nhớ. Bạn có thể đặt tên cho "hộp" này và sử dụng lại nhiều lần.
Analogy Đời Thực
Tủ lạnh (Variable) → Tên: fridge
├── Sữa (Value) → Nội dung
└── Đồ uống (Type) → Loại
Ví (Variable) → Tên: wallet
├── 500,000 VND (Value) → Nội dung
└── Tiền (Type) → Loại
Tại Sao Cần Variables?
Không dùng variables: ❌
print(25 * 1000) # Tính lương
print(25 * 1000 + 500) # Tính tổng
print(25 * 1000 * 0.1) # Tính thuế
# Nếu cần đổi 25 thành 30, phải sửa nhiều chỗ!
Dùng variables: ✅
working_hours = 25
hourly_rate = 1000
bonus = 500
salary = working_hours * hourly_rate
total = salary + bonus
tax = salary * 0.1
print(salary)
print(total)
print(tax)
# Muốn đổi giờ làm? Chỉ sửa 1 dòng!
Khai Báo Variables
Cú Pháp Cơ Bản
# Cú pháp: tên_biến = giá_trị
name = "An"
age = 25
height = 1.75
is_student = True
Lưu ý:
- Dùng
=để gán giá trị (assignment operator) - KHÔNG cần khai báo kiểu dữ liệu (Python tự nhận biết)
- Phân biệt chữ hoa/thường (
name≠Name)
Multiple Assignment
Gán nhiều giá trị cùng lúc:
# Cách 1: Multiple variables, multiple values
x, y, z = 10, 20, 30
print(x) # 10
print(y) # 20
print(z) # 30
# Cách 2: Multiple variables, same value
a = b = c = 100
print(a, b, c) # 100 100 100
# Cách 3: Unpacking
numbers = [1, 2, 3]
first, second, third = numbers
print(first) # 1
print(second) # 2
print(third) # 3
Thay Đổi Giá Trị
Variables có thể thay đổi giá trị:
score = 0
print(score) # 0
score = 10
print(score) # 10
score = score + 5
print(score) # 15
# Hoặc viết ngắn gọn
score += 10
print(score) # 25
Data Types - Kiểu Dữ Liệu
Python có nhiều kiểu dữ liệu, nhưng chúng ta sẽ học 4 kiểu cơ bản nhất:
1. Integer (int) - Số Nguyên
Số nguyên, không có phần thập phân.
age = 25
year = 2025
temperature = -5
large_number = 1000000
print(type(age)) # <class 'int'>
Ví dụ thực tế:
# Đếm số lượng
students = 30
books = 150
# Tính toán
total_students = students + 20
print(f"Tổng số học sinh: {total_students}")
# Số âm
debt = -5000000 # Nợ 5 triệu
Số lớn trong Python:
# Python xử lý số rất lớn!
billion = 1000000000
trillion = 1000000000000
googol = 10 ** 100 # 1 theo sau 100 số 0
print(billion * trillion) # Không bị overflow!
Định dạng số:
# Underscore để dễ đọc (Python 3.6+)
population = 98_000_000 # 98 triệu
print(population) # 98000000
# Binary, Octal, Hexadecimal
binary = 0b1010 # 10 in decimal
octal = 0o12 # 10 in decimal
hexa = 0xA # 10 in decimal
2. Float - Số Thực
Số có phần thập phân.
pi = 3.14159
height = 1.75
price = 99.99
temperature = -2.5
print(type(pi)) # <class 'float'>
Ví dụ thực tế:
# Tính tiền
product_price = 199.99
tax_rate = 0.1
total = product_price * (1 + tax_rate)
print(f"Tổng tiền: {total:.2f}") # 219.99
# Đo lường
weight = 65.5 # kg
height = 1.70 # m
bmi = weight / (height ** 2)
print(f"BMI: {bmi:.2f}")
Scientific Notation:
# Số rất lớn hoặc rất nhỏ
speed_of_light = 3e8 # 3 × 10^8 = 300,000,000
electron_mass = 9.1e-31 # 9.1 × 10^-31
print(speed_of_light) # 300000000.0
print(electron_mass) # 9.1e-31
Float Precision:
# Lưu ý: Float không chính xác tuyệt đối!
result = 0.1 + 0.2
print(result) # 0.30000000000000004 (!)
print(result == 0.3) # False
# Giải pháp: làm tròn
print(round(result, 2)) # 0.3
3. String (str) - Chuỗi
Chuỗi ký tự, dùng để lưu text.
name = "Nguyễn Văn An"
email = '[email protected]'
message = """Đây là
chuỗi nhiều dòng"""
print(type(name)) # <class 'str'>
Single vs Double Quotes:
# Cả hai đều OK
text1 = "Hello"
text2 = 'Hello'
# Dùng quotes trong string
quote1 = "He said 'Hello'"
quote2 = 'She said "Hi"'
# Escape characters
quote3 = "He said \"Hello\""
quote4 = 'It\'s a beautiful day'
String Operations:
# Concatenation (nối chuỗi)
first_name = "An"
last_name = "Nguyen"
full_name = first_name + " " + last_name
print(full_name) # An Nguyen
# Repetition (lặp lại)
separator = "-" * 20
print(separator) # --------------------
# Length (độ dài)
text = "Python"
print(len(text)) # 6
String Indexing:
text = "Python"
# 012345 (index từ trái)
# -654321 (index từ phải)
print(text[0]) # P (ký tự đầu)
print(text[5]) # n (ký tự cuối)
print(text[-1]) # n (ký tự cuối, cách khác)
print(text[-6]) # P (ký tự đầu, cách khác)
String Slicing:
text = "Python Programming"
# 0123456789...
print(text[0:6]) # Python (từ 0 đến 5)
print(text[:6]) # Python (từ đầu đến 5)
print(text[7:]) # Programming (từ 7 đến cuối)
print(text[-11:]) # Programming
print(text[::2]) # Pto rgamn (mỗi ký tự thứ 2)
print(text[::-1]) # gnimmargorP nohtyP (đảo ngược)
String Methods:
text = " Hello World "
print(text.upper()) # " HELLO WORLD "
print(text.lower()) # " hello world "
print(text.strip()) # "Hello World" (xóa khoảng trắng)
print(text.replace("Hello", "Hi")) # " Hi World "
print(text.split()) # ['Hello', 'World']
# Check methods
email = "[email protected]"
print(email.startswith("user")) # True
print(email.endswith(".com")) # True
print("123".isdigit()) # True
print("abc".isalpha()) # True
String Formatting:
name = "An"
age = 25
# Cách 1: Concatenation (cũ, không khuyến nghị)
msg1 = "Tên: " + name + ", Tuổi: " + str(age)
# Cách 2: format() method
msg2 = "Tên: {}, Tuổi: {}".format(name, age)
# Cách 3: f-strings (Python 3.6+, khuyến nghị)
msg3 = f"Tên: {name}, Tuổi: {age}"
print(msg3)
f-strings Advanced:
price = 199.99
quantity = 3
# Expressions trong f-strings
print(f"Tổng: {price * quantity}")
# Formatting
print(f"Giá: {price:.2f} VND") # 2 chữ số thập phân
print(f"Số lượng: {quantity:03d}") # Pad với 0, width 3
# Alignment
name = "An"
print(f"|{name:<10}|") # Left align: |An |
print(f"|{name:>10}|") # Right align: | An|
print(f"|{name:^10}|") # Center: | An |
4. Boolean (bool) - True/False
Chỉ có 2 giá trị: True hoặc False.
is_logged_in = True
has_permission = False
is_admin = True
print(type(is_logged_in)) # <class 'bool'>
Boolean từ Comparisons:
age = 25
print(age > 18) # True
print(age == 25) # True
print(age < 20) # False
print(age != 30) # True
# String comparison
name = "An"
print(name == "An") # True
print(name == "Binh") # False
Boolean Logic:
is_adult = True
has_id = True
# AND: Cả hai đều True
can_vote = is_adult and has_id
print(can_vote) # True
# OR: Một trong hai True
is_weekend = False
is_holiday = True
is_day_off = is_weekend or is_holiday
print(is_day_off) # True
# NOT: Đảo ngược
is_working = not is_day_off
print(is_working) # False
Truthy và Falsy Values:
# Falsy values (coi như False)
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False (empty string)
print(bool([])) # False (empty list)
print(bool(None)) # False
# Truthy values (coi như True)
print(bool(1)) # True
print(bool(-1)) # True
print(bool("Hello")) # True
print(bool([1, 2])) # True
Type Checking
Kiểm tra kiểu dữ liệu của variable:
age = 25
name = "An"
height = 1.75
is_student = True
print(type(age)) # <class 'int'>
print(type(name)) # <class 'str'>
print(type(height)) # <class 'float'>
print(type(is_student)) # <class 'bool'>
# isinstance() - Cách tốt hơn
print(isinstance(age, int)) # True
print(isinstance(name, str)) # True
print(isinstance(height, float)) # True
Type Conversion (Casting)
Chuyển đổi giữa các kiểu dữ liệu.
String ↔ Number
# String → Int
age_str = "25"
age_int = int(age_str)
print(age_int + 5) # 30
# String → Float
price_str = "199.99"
price_float = float(price_str)
print(price_float * 2) # 399.98
# Number → String
age = 25
age_str = str(age)
print("Tuổi: " + age_str)
# Int → Float
num = 10
num_float = float(num)
print(num_float) # 10.0
# Float → Int (mất phần thập phân)
price = 199.99
price_int = int(price)
print(price_int) # 199
Input Conversion
# input() luôn trả về string!
age_str = input("Tuổi của bạn? ")
print(type(age_str)) # <class 'str'>
# Phải convert sang int
age = int(age_str)
next_year = age + 1
print(f"Năm sau bạn {next_year} tuổi")
Conversion Errors
# Lỗi khi convert
try:
num = int("abc") # ValueError!
except ValueError:
print("Không thể convert 'abc' sang số")
try:
num = int("12.5") # ValueError!
except ValueError:
print("Dùng float() cho số thập phân")
num = float("12.5") # OK
Naming Conventions
Quy Tắc Bắt Buộc
# ✅ ĐÚNG
name = "An"
user_age = 25
_private = "secret"
total2024 = 1000
# ❌ SAI
2name = "An" # Không bắt đầu bằng số
user-age = 25 # Không dùng dấu gạch ngang
user age = 25 # Không có khoảng trắng
class = "A" # Không dùng keywords của Python
Snake_case Convention
Python style guide (PEP 8) khuyến nghị snake_case cho variables:
# ✅ ĐÚNG (snake_case)
first_name = "An"
total_amount = 1000
is_logged_in = True
user_email_address = "[email protected]"
# ❌ Tránh (camelCase - dùng cho JavaScript)
firstName = "An"
totalAmount = 1000
# ❌ Tránh (PascalCase - dùng cho Classes)
FirstName = "An"
TotalAmount = 1000
Descriptive Names
# ❌ Tên không rõ nghĩa
a = 25
x = "An"
temp = 199.99
# ✅ Tên mô tả rõ ràng
user_age = 25
user_name = "An"
product_price = 199.99
Constants
Constants (hằng số) dùng UPPER_CASE:
# Constants (giá trị không đổi)
PI = 3.14159
MAX_USERS = 1000
DEFAULT_TIMEOUT = 30
API_KEY = "abc123xyz"
# Sử dụng
radius = 5
area = PI * radius ** 2
print(f"Diện tích: {area}")
Ví Dụ Thực Tế
1. Profile Information
# User profile
username = "nguyenvanan"
full_name = "Nguyễn Văn An"
age = 25
height = 1.75
weight = 70.5
is_premium_member = True
account_balance = 500000.50
# Display profile
print("=" * 40)
print("THÔNG TIN HỒ SƠ")
print("=" * 40)
print(f"Username: {username}")
print(f"Họ tên: {full_name}")
print(f"Tuổi: {age}")
print(f"Chiều cao: {height}m")
print(f"Cân nặng: {weight}kg")
print(f"Premium: {'Có' if is_premium_member else 'Không'}")
print(f"Số dư: {account_balance:,.2f} VND")
print("=" * 40)
# Calculate BMI
bmi = weight / (height ** 2)
print(f"\nChỉ số BMI: {bmi:.2f}")
if bmi < 18.5:
print("Trạng thái: Gầy")
elif bmi < 25:
print("Trạng thái: Bình thường")
else:
print("Trạng thái: Thừa cân")
2. Shopping Cart
# Product information
product_name = "Laptop Dell XPS 15"
unit_price = 25000000 # 25 triệu
quantity = 2
discount_percent = 10
# Calculate
subtotal = unit_price * quantity
discount_amount = subtotal * discount_percent / 100
tax_amount = (subtotal - discount_amount) * 0.1
total = subtotal - discount_amount + tax_amount
# Display
print(f"Sản phẩm: {product_name}")
print(f"Đơn giá: {unit_price:,} VND")
print(f"Số lượng: {quantity}")
print(f"-" * 40)
print(f"Tạm tính: {subtotal:,} VND")
print(f"Giảm giá ({discount_percent}%): -{discount_amount:,} VND")
print(f"Thuế VAT (10%): {tax_amount:,} VND")
print(f"=" * 40)
print(f"TỔNG CỘNG: {total:,.0f} VND")
3. Temperature Converter
# Input
celsius = float(input("Nhập nhiệt độ (°C): "))
# Convert
fahrenheit = celsius * 9/5 + 32
kelvin = celsius + 273.15
# Display
print(f"\n{celsius}°C =")
print(f" {fahrenheit:.2f}°F")
print(f" {kelvin:.2f}K")
# Status
if celsius < 0:
status = "Đóng băng"
elif celsius < 20:
status = "Lạnh"
elif celsius < 30:
status = "Mát"
else:
status = "Nóng"
print(f"\nTrạng thái: {status}")
Bài Tập Thực Hành
Bài 1: Personal Info
Khai báo variables lưu thông tin cá nhân:
- Họ tên, tuổi, email, số điện thoại
- In ra màn hình dạng profile card
Bài 2: Math Calculator
Nhập 2 số, tính và hiển thị:
- Tổng, hiệu, tích, thương
- Lũy thừa, chia lấy dư
- Format đẹp với 2 chữ số thập phân
Bài 3: String Manipulation
Nhập họ tên đầy đủ, xuất ra:
- Chữ hoa toàn bộ
- Chữ thường toàn bộ
- Chữ cái đầu viết hoa
- Số ký tự
- Đảo ngược chuỗi
Bài 4: Type Conversion Challenge
Input: "25", "30.5", "100"
- Convert và tính tổng
- Tính trung bình
- Tìm số lớn nhất
Bài 5: Complex Calculation
Tính lương nhân viên:
- Input: số giờ làm, lương/giờ, phụ cấp
- Tính: lương cơ bản, thuế 10%, thưởng 5%
- Output: lương net format đẹp
Tóm Tắt
✅ Variables là "hộp chứa" lưu trữ data
✅ 4 kiểu dữ liệu cơ bản: int,
float, str, bool
✅ Dùng type() hoặc
isinstance() để check type
✅ Type conversion: int(), float(),
str(), bool()
✅ Naming: snake_case, mô tả rõ ràng
✅ Constants:
UPPER_CASE
✅ f-strings cho string formatting
Bài Tiếp Theo
Bài 3: Operators - Học các toán tử để thực hiện phép tính và so sánh dữ liệu.
Remember:
- Variables là nền tảng của mọi chương trình
- Đặt tên biến rõ ràng giúp code dễ đọc
- Luôn check và convert type khi cần
- Practice với nhiều ví dụ thực tế!
