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 các loại operators trong Python
- ✅ Sử dụng arithmetic operators cho phép tính
- ✅ Dùng comparison operators để so sánh
- ✅ Áp dụng logical operators cho điều kiện phức tạp
- ✅ Sử dụng assignment operators hiệu quả
Operators Là Gì?
Operator (toán tử) là ký hiệu đặc biệt dùng để thực hiện các phép toán trên dữ liệu.
# Ví dụ:
result = 5 + 3
# ^ ^ Operands (toán hạng)
# ^ Operator (toán tử)
print(f"5 + 3 = {result}")
1. Arithmetic Operators - Toán Tử Số Học
Dùng để thực hiện các phép tính toán học.
Addition (+) - Phép Cộng
# Cộng số
x = 10 + 5
print(x) # 15
# Cộng float
price = 19.99 + 5.50
print(price) # 25.49
# Nối chuỗi
greeting = "Xin " + "chào"
print(greeting) # Xin chào
# Cộng negative
result = 10 + (-3)
print(result) # 7
Ví dụ thực tế:
# Tính tổng tiền
product1 = 50000
product2 = 75000
shipping = 20000
total = product1 + product2 + shipping
print(f"Tổng: {total:,} VND") # Tổng: 145,000 VND
Subtraction (-) - Phép Trừ
# Trừ số
x = 20 - 8
print(x) # 12
# Trừ float
balance = 1000.50 - 249.99
print(balance) # 750.51
# Số âm
result = 5 - 10
print(result) # -5
Ví dụ thực tế:
# Tính số dư tài khoản
initial_balance = 5000000
spent = 1250000
remaining = initial_balance - spent
print(f"Còn lại: {remaining:,} VND") # Còn lại: 3,750,000 VND
Multiplication (*) - Phép Nhân
# Nhân số
x = 6 * 7
print(x) # 42
# Nhân float
price = 99.99 * 3
print(price) # 299.97
# Nhân chuỗi (lặp lại)
stars = "*" * 10
print(stars) # **********
# Nhân list
numbers = [1, 2, 3] * 2
print(numbers) # [1, 2, 3, 1, 2, 3]
Ví dụ thực tế:
# Tính lương
hours_worked = 160
hourly_rate = 50000
salary = hours_worked * hourly_rate
print(f"Lương: {salary:,} VND") # Lương: 8,000,000 VND
# Tạo separator
print("=" * 40) # ========================================
Division (/) - Phép Chia
# Chia thông thường (luôn trả về float)
x = 10 / 2
print(x) # 5.0
y = 10 / 3
print(y) # 3.3333333333333335
# Chia số âm
z = -10 / 3
print(z) # -3.3333333333333335
Ví dụ thực tế:
# Tính trung bình
total_score = 450
num_subjects = 5
average = total_score / num_subjects
print(f"Điểm trung bình: {average:.2f}") # Điểm trung bình: 90.00
# Chia tiền đều
total_bill = 500000
num_people = 3
per_person = total_bill / num_people
print(f"Mỗi người: {per_person:,.0f} VND") # Mỗi người: 166,667 VND
Lưu ý: Không chia cho 0!
try:
result = 10 / 0
except ZeroDivisionError:
print("Lỗi: Không thể chia cho 0!")
Floor Division (//) - Chia Lấy Phần Nguyên
Chia và chỉ lấy phần nguyên (bỏ phần thập phân).
# Floor division
x = 10 // 3
print(x) # 3 (bỏ phần thập phân)
y = 15 // 4
print(y) # 3
# Với số âm
z = -10 // 3
print(z) # -4 (làm tròn xuống)
So sánh / vs //:
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3
print(7 / 2) # 3.5
print(7 // 2) # 3
Ví dụ thực tế:
# Tính số túi cần mua
total_items = 25
items_per_bag = 6
num_bags = total_items // items_per_bag
print(f"Cần mua: {num_bags} túi") # Cần mua: 4 túi
# Tính số giờ từ phút
total_minutes = 135
hours = total_minutes // 60
print(f"{hours} giờ") # 2 giờ
Modulus (%) - Chia Lấy Dư
Lấy phần dư của phép chia.
# Modulus
x = 10 % 3
print(x) # 1 (10 = 3*3 + 1)
y = 15 % 4
print(y) # 3 (15 = 4*3 + 3)
z = 10 % 2
print(z) # 0 (chia hết)
Ứng dụng:
1. Kiểm tra số chẵn/lẻ:
number = 7
if number % 2 == 0:
print(f"{number} là số chẵn")
else:
print(f"{number} là số lẻ") # 7 là số lẻ
2. Tính phần dư:
total_items = 25
items_per_bag = 6
remaining = total_items % items_per_bag
print(f"Còn thừa: {remaining} items") # Còn thừa: 1 items
3. Lấy chữ số cuối:
number = 12345
last_digit = number % 10
print(f"Chữ số cuối: {last_digit}") # Chữ số cuối: 5
4. Chu kỳ lặp:
# Vị trí trong vòng lặp
for i in range(10):
position = i % 3 # Chỉ có 0, 1, 2
print(f"i={i}, position={position}")
# 0,0 1,1 2,2 3,0 4,1 5,2 6,0 7,1 8,2 9,0
Exponentiation (**) - Lũy Thừa
# Lũy thừa
x = 2 ** 3
print(x) # 8 (2^3 = 2*2*2)
y = 5 ** 2
print(y) # 25 (5^2 = 5*5)
# Căn bậc hai (square root)
z = 16 ** 0.5
print(z) # 4.0
# Lũy thừa âm
a = 2 ** -2
print(a) # 0.25 (1/4)
Ví dụ thực tế:
# Tính diện tích hình vuông
side = 5
area = side ** 2
print(f"Diện tích: {area} m²") # Diện tích: 25 m²
# Tính lãi kép
principal = 10000000 # 10 triệu
rate = 0.08 # 8%/năm
years = 5
amount = principal * (1 + rate) ** years
print(f"Sau {years} năm: {amount:,.0f} VND")
# Sau 5 năm: 14,693,281 VND
# Công thức vật lý: E = mc²
mass = 1 # kg
speed_of_light = 3e8 # m/s
energy = mass * speed_of_light ** 2
print(f"Năng lượng: {energy:e} J")
Operator Precedence - Thứ Tự Ưu Tiên
# Thứ tự: ** > *, /, //, % > +, -
result = 2 + 3 * 4
print(result) # 14 (không phải 20)
# Dùng ngoặc để thay đổi thứ tự
result = (2 + 3) * 4
print(result) # 20
# Phức tạp hơn
result = 10 + 5 * 2 ** 3 - 4 / 2
# 5 * 8 = 40
# 10 + 40 = 50
# 4/2 = 2.0
# 50 - 2.0 = 48.0
print(result) # 48.0
# ❌ Khó đọc
result = 100+50*2/10-5
print(f"Khó đọc: {result}")
# ✅ Dễ đọc
result = 100 + (50 * 2) / 10 - 5
print(f"Dễ đọc: {result}")
# ✅ Chia nhỏ
temp = 50 * 2
temp = temp / 10
result = 100 + temp - 5
print(f"Chia nhỏ: {result}")
2. Comparison Operators - Toán Tử So Sánh
Dùng để so sánh giá trị, kết quả trả về True hoặc False.
Equal To (==) - Bằng
# So sánh số
print(5 == 5) # True
print(5 == 10) # False
print(3.0 == 3) # True (int và float bằng nhau)
# So sánh chuỗi
print("hello" == "hello") # True
print("Hello" == "hello") # False (phân biệt hoa/thường)
# So sánh boolean
print(True == True) # True
print(True == 1) # True (!)
print(False == 0) # True (!)
Lưu ý: = vs ==
x = 5 # Assignment (gán giá trị)
x == 5 # Comparison (so sánh)
Not Equal To (!=) - Khác
print(5 != 10) # True
print(5 != 5) # False
print("a" != "b") # True
Greater Than (>) - Lớn Hơn
print(10 > 5) # True
print(5 > 10) # False
print(5 > 5) # False
Less Than (<) - Nhỏ Hơn
print(5 < 10) # True
print(10 < 5) # False
print(5 < 5) # False
Greater Than or Equal (>=) - Lớn Hơn Hoặc Bằng
print(10 >= 5) # True
print(5 >= 5) # True
print(3 >= 5) # False
Less Than or Equal (<=) - Nhỏ Hơn Hoặc Bằng
print(5 <= 10) # True
print(5 <= 5) # True
print(10 <= 5) # False
So Sánh Chuỗi
Chuỗi được so sánh theo thứ tự ABC (lexicographic):
print("apple" < "banana") # True
print("cat" > "car") # True (t > r)
print("Python" < "python") # True (P < p)
# So sánh độ dài
print(len("hello") > len("hi")) # True (5 > 2)
Ví Dụ Thực Tế
# Kiểm tra tuổi
age = 18
if age >= 18:
print("Đủ tuổi bầu cử")
else:
print("Chưa đủ tuổi")
# Kiểm tra điểm
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "D"
print(f"Xếp loại: {grade}")
# So sánh giá
product_price = 500000
budget = 600000
if product_price <= budget:
print("Mua được!")
savings = budget - product_price
print(f"Còn dư: {savings:,} VND")
else:
print("Không đủ tiền")
3. Logical Operators - Toán Tử Logic
Dùng để kết hợp nhiều điều kiện.
AND - Và
Trả về True nếu TẤT CẢ điều kiện đều True.
# Truth table
print(True and True) # True
print(True and False) # False
print(False and True) # False
print(False and False) # False
Ví dụ:
age = 25
has_license = True
# Cả hai điều kiện đều đúng
can_drive = age >= 18 and has_license
print(can_drive) # True
# Một điều kiện sai
age = 16
can_drive = age >= 18 and has_license
print(can_drive) # False
Ứng dụng thực tế:
# Kiểm tra đăng nhập
username = "admin"
password = "123456"
is_active = True
login_success = (username == "admin" and
password == "123456" and
is_active)
print(f"Đăng nhập: {login_success}")
# Kiểm tra điều kiện mua hàng
age = 20
has_money = True
in_stock = True
can_buy = age >= 18 and has_money and in_stock
print(f"Có thể mua: {can_buy}")
OR - Hoặc
Trả về True nếu ÍT NHẤT MỘT điều kiện True.
# Truth table
print(True or True) # True
print(True or False) # True
print(False or True) # True
print(False or False) # False
Ví dụ:
is_weekend = True
is_holiday = False
is_day_off = is_weekend or is_holiday
print(is_day_off) # True
# Cả hai đều False
is_weekend = False
is_holiday = False
is_day_off = is_weekend or is_holiday
print(is_day_off) # False
Ứng dụng thực tế:
# Miễn phí ship
order_value = 400000
is_member = False
free_shipping = order_value >= 500000 or is_member
print(f"Miễn phí ship: {free_shipping}") # False
# Discount eligibility
age = 70
is_student = False
has_discount = age >= 65 or is_student
print(f"Được giảm giá: {has_discount}") # True
NOT - Phủ Định
Đảo ngược giá trị boolean.
print(not True) # False
print(not False) # True
# Với biểu thức
age = 16
print(not age >= 18) # True (vì age < 18)
is_logged_in = False
print(not is_logged_in) # True
Ví dụ thực tế:
# Kiểm tra chưa đăng nhập
is_logged_in = False
if not is_logged_in:
print("Vui lòng đăng nhập")
# Kiểm tra không có trong danh sách
username = "guest"
banned_users = ["hacker", "spammer"]
if username not in banned_users:
print("Chào mừng!")
Kết Hợp Logical Operators
# AND và OR
age = 25
has_ticket = True
is_vip = False
can_enter = (age >= 18 and has_ticket) or is_vip
print(can_enter) # True
# Dùng ngoặc để rõ ràng
result = (True and False) or True
print(result) # True
result = True and (False or True)
print(result) # True
Ví dụ phức tạp:
# Điều kiện được vay
age = 30
income = 20000000
has_collateral = False
credit_score = 750
can_get_loan = (
age >= 21 and age <= 65 and
income >= 15000000 and
(has_collateral or credit_score >= 700)
)
print(f"Được vay: {can_get_loan}") # True
Short-circuit Evaluation
Python đánh giá từ trái sang phải và dừng khi biết kết quả:
# AND: Dừng khi gặp False
result = False and print("Không in") # Không in gì
result = True and print("Có in") # In "Có in"
# OR: Dừng khi gặp True
result = True or print("Không in") # Không in gì
result = False or print("Có in") # In "Có in"
4. Assignment Operators - Toán Tử Gán
Simple Assignment (=)
x = 10
name = "An"
is_valid = True
print(f"x = {x}")
print(f"name = {name}")
print(f"is_valid = {is_valid}")
Compound Assignment
Kết hợp phép toán với gán:
# += (cộng rồi gán)
x = 10
x += 5 # Tương đương: x = x + 5
print(x) # 15
# -= (trừ rồi gán)
x = 10
x -= 3 # Tương đương: x = x - 3
print(x) # 7
# *= (nhân rồi gán)
x = 5
x *= 2 # Tương đương: x = x * 2
print(x) # 10
# /= (chia rồi gán)
x = 20
x /= 4 # Tương đương: x = x / 4
print(x) # 5.0
# //= (chia lấy nguyên rồi gán)
x = 20
x //= 3 # Tương đương: x = x // 3
print(x) # 6
# %= (chia lấy dư rồi gán)
x = 20
x %= 3 # Tương đương: x = x % 3
print(x) # 2
# **= (lũy thừa rồi gán)
x = 2
x **= 3 # Tương đương: x = x ** 3
print(x) # 8
Ví dụ thực tế:
# Counter
count = 0
count += 1 # Tăng 1
count += 1 # Tăng 1
count += 1 # Tăng 1
print(f"Count: {count}") # Count: 3
# Accumulator
total = 0
total += 100
total += 50
total += 25
print(f"Total: {total}") # Total: 175
# Discount
price = 1000000
price -= 100000 # Giảm 100k
price *= 0.9 # Giảm thêm 10%
print(f"Giá cuối: {price:,.0f}") # Giá cuối: 810,000
# Game score
score = 100
score += 50 # Bonus
score -= 20 # Penalty
score *= 2 # Double
print(f"Score: {score}") # Score: 260
Ví Dụ Tổng Hợp
1. Tính Tiền Điện
print("=== TÍNH TIỀN ĐIỆN ===")
# Input (thay input bằng giá trị cố định để demo)
usage = 150 # Số kWh sử dụng
# Bậc thang giá điện (VND/kWh)
TIER1_PRICE = 1678 # 0-50 kWh
TIER2_PRICE = 1734 # 51-100 kWh
TIER3_PRICE = 2014 # 101-200 kWh
TIER4_PRICE = 2536 # 201-300 kWh
TIER5_PRICE = 2834 # >300 kWh
# Tính tiền
if usage <= 50:
cost = usage * TIER1_PRICE
elif usage <= 100:
cost = 50 * TIER1_PRICE + (usage - 50) * TIER2_PRICE
elif usage <= 200:
cost = (50 * TIER1_PRICE +
50 * TIER2_PRICE +
(usage - 100) * TIER3_PRICE)
elif usage <= 300:
cost = (50 * TIER1_PRICE +
50 * TIER2_PRICE +
100 * TIER3_PRICE +
(usage - 200) * TIER4_PRICE)
else:
cost = (50 * TIER1_PRICE +
50 * TIER2_PRICE +
100 * TIER3_PRICE +
100 * TIER4_PRICE +
(usage - 300) * TIER5_PRICE)
# Thuế VAT 10%
tax = cost * 0.1
total = cost + tax
# Hiển thị
print(f"\nSố điện: {usage} kWh")
print(f"Tiền điện: {cost:,} VND")
print(f"VAT (10%): {tax:,} VND")
print(f"Tổng cộng: {total:,.0f} VND")
2. BMI Calculator
print("=== TÍNH CHỈ SỐ BMI ===")
# Input
height = float(input("Chiều cao (m): "))
weight = float(input("Cân nặng (kg): "))
# Tính BMI
bmi = weight / (height ** 2)
# Phân loại
if bmi < 18.5:
category = "Thiếu cân"
advice = "Cần tăng cân"
elif bmi < 25:
category = "Bình thường"
advice = "Giữ vững!"
elif bmi < 30:
category = "Thừa cân"
advice = "Nên giảm cân"
else:
category = "Béo phì"
advice = "Cần giảm cân gấp"
# Hiển thị
print(f"\nChiều cao: {height}m")
print(f"Cân nặng: {weight}kg")
print(f"BMI: {bmi:.2f}")
print(f"Phân loại: {category}")
print(f"Khuyến nghị: {advice}")
3. Discount Calculator
print("=== TÍNH GIẢM GIÁ ===")
# Input
price = float(input("Giá gốc: "))
quantity = int(input("Số lượng: "))
is_member = input("Thành viên? (y/n): ").lower() == 'y'
# Tính subtotal
subtotal = price * quantity
# Discount theo quantity
if quantity >= 10:
quantity_discount = 0.15 # 15%
elif quantity >= 5:
quantity_discount = 0.10 # 10%
elif quantity >= 3:
quantity_discount = 0.05 # 5%
else:
quantity_discount = 0
# Member discount
member_discount = 0.05 if is_member else 0
# Tổng discount
total_discount = quantity_discount + member_discount
# Tính tiền
discount_amount = subtotal * total_discount
final_price = subtotal - discount_amount
# Hiển thị
print(f"\n{'='*40}")
print(f"Đơn giá: {price:,.0f} VND")
print(f"Số lượng: {quantity}")
print(f"Tạm tính: {subtotal:,.0f} VND")
if quantity_discount > 0:
print(f"Giảm theo SL ({quantity_discount*100:.0f}%): -{subtotal*quantity_discount:,.0f} VND")
if member_discount > 0:
print(f"Giảm thành viên ({member_discount*100:.0f}%): -{subtotal*member_discount:,.0f} VND")
print(f"{'='*40}")
print(f"TỔNG CỘNG: {final_price:,.0f} VND")
print(f"Tiết kiệm: {discount_amount:,.0f} VND ({total_discount*100:.1f}%)")
Bài Tập Thực Hành
Bài 1: Calculator
Viết chương trình máy tính:
- Input: 2 số và toán tử (+, -, *, /, //, %, **)
- Output: Kết quả phép tính
Bài 2: Grade System
Nhập điểm (0-100), xuất xếp loại:
- >= 90: A
- >= 80: B
- >= 70: C
- >= 60: D
- < 60: F
Bài 3: Leap Year Check
Kiểm tra năm nhuận:
- Chia hết cho 4 VÀ (không chia hết cho 100 HOẶC chia hết cho 400)
Bài 4: Even/Odd Counter
Nhập 5 số, đếm:
- Số chẵn
- Số lẻ
- Số dương
- Số âm
Bài 5: Shopping Cart
Tính tổng giỏ hàng:
- 3 sản phẩm với giá và số lượng
- Áp dụng giảm giá nếu tổng > 1 triệu
- Tính thuế 10%
Tóm Tắt
✅ Arithmetic: +, -, *, /,
//, %, **
✅ Comparison:
==, !=, >, <, >=,
<=
✅ Logical: and, or,
not
✅ Assignment: =, +=, -=,
*=, /=, //=, %=, **=
✅
Precedence: ** > *, /, //, % > +, - > comparison > logical
✅
Dùng ngoặc () để rõ ràng
Bài Tiếp Theo
Bài 4: Strings - Tìm hiểu sâu về chuỗi ký tự, string methods và string formatting.
Remember:
- Operators là công cụ để thao tác dữ liệu
//và%rất hữu ích trong thực tế- Logical operators giúp kết hợp điều kiện
- Practice với nhiều bài toán thực tế!
