Bài 3: Operators - Toán Tử

Bài học về các loại operators trong Python - toán tử số học, so sánh, logic và gán. Học cách thực hiện phép tính, so sánh giá trị và kết hợp điều kiện logic.

14/05/2026
18 phút đọc
0 lượt xem
1

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ả
2

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}")
3

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}")
4

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")
5

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"
6

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
7

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}%)")
8

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%
9

Tóm Tắt

Arithmetic: +, -, *, /, //, %, **
Comparison: ==, !=, >, <, >=, <=
Logical: and, or, not
Assignment: =, +=, -=, *=, /=, //=, %=, **=
✅ Precedence: ** > *, /, //, % > +, - > comparison > logical
✅ Dùng ngoặc () để rõ ràng

10

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
  • //% 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ế!