NỘI DUNG BÀI HỌC
✅ Hiểu khái niệm biến trong Python và cách khai báo
✅ Nắm được các kiểu dữ liệu cơ bản (int, float, string, bool, list, tuple, dict, set)
✅ Thao tác cơ bản với biến và dữ liệu
✅ Hiểu và sử dụng các loại toán tử trong Python (số học, so sánh, logic, gán, membership, identity)
✅ Thực hành qua nhiều ví dụ minh họa
✅ Bài tập nhỏ cuối buổi để ôn tập
1. Biến trong Python
Khái niệm
-
Nói một cách dễ hiểu nhất, biến giống như nhãn dán trên một chiếc hộp – nhãn giúp ta biết bên trong hộp chứa cái gì, và có thể thay đổi nội dung hộp bất kỳ lúc nào.
-
Mỗi chiếc hộp (mỗi biến) luôn có hai thứ:
- Cái nhãn (Tên biến): Để chúng ta có thể gọi tên và tìm lại đúng chiếc hộp mình cần.
- Thứ bên trong (Giá trị của biến): Là thông tin mà chúng ta cất vào trong hộp (ví dụ: một con số, một dòng chữ, ...).
=> Mục đích của biến là để lưu trữ dữ liệu và chúng ta có thể lấy ra dùng lại bất cứ khi nào cần bằng cách gọi tên của nó.
-
Python là ngôn ngữ dynamic typing → không cần khai báo kiểu trước.
Ví dụ:
name = "Lan"
age = 25
height = 1.65
is_student = True
print(name, age, height, is_student)
Quy tắc đặt tên biến
-
Bắt đầu bằng chữ cái hoặc
_
-
Không chứa ký tự đặc biệt (
! @ # $ % ...
) -
Phân biệt chữ hoa, thường (
age
khácAge
) -
Không được trùng với từ khóa Python như:
class
,for
,if
...
⚠️ Lỗi thường gặp & cách sửa
-
❌
2age = 25
→ Sai vì biến không thể bắt đầu bằng số -
❌
class = "Python"
→ Sai vì trùng từ khóa -
❌
user-name = "Lan"
→ Sai vì có dấu-
👉 ✅ Cách sửa: đổi thànhuser_name
2. Kiểu dữ liệu cơ bản trong Python
🔹 Số (Numbers: int, float, complex)
-
int: số nguyên (có thể âm, dương, hoặc 0).
-
float: số thực (có dấu thập phân).
-
complex: số phức (dùng trong toán học cao cấp).
a = 42 # int
b = -7 # int âm
c = 3.14 # float
d = 2 + 3j # complex
print(type(a), type(b), type(c), type(d))
👉 Lỗi thường gặp:
-
Dùng dấu phẩy
,
thay vì dấu chấm.
cho số thực:
❌pi = 3,14
→ Đây là tuple, không phải float.
🔹 Boolean
Chỉ có 2 giá trị: True
hoặc False
.
Thường dùng trong so sánh, điều kiện, vòng lặp.
Ứng dụng thực tế:
-
Check user có đăng nhập chưa
-
Kiểm tra một form có hợp lệ không
-
So sánh dữ liệu trong test automation
Ví dụ:
is_logged_in = True
print(is_logged_in)
print(10 > 5) # True
print(3 == 4) # False
👉 Lỗi thường gặp:
-
Gõ sai chính tả: ❌
true
hoặcfalse
→ phải viết hoa chữ cái đầuTrue
,False
.
🔹 NoneType trong Python
Khái niệm
-
None
là một giá trị đặc biệt trong Python. -
Nó đại diện cho “không có gì” / “trống rỗng” / “null value”.
-
Kiểu dữ liệu của nó là
NoneType
(chỉ có duy nhất một giá trị:None
).
👉 Dùng type(None)
sẽ ra <class 'NoneType'>
.
Khi nào dùng None
?
-
Biến khởi tạo mà chưa có giá trị rõ ràng:
result = None print(result) # None
-
Hàm không return gì → mặc định trả về None:
def greet(name): print("Hello", name) x = greet("Lan") print(x) # None
-
Để kiểm tra điều kiện (placeholder):
user = None if user is None: print("Chưa có user đăng nhập")
Ứng dụng thực tế của None
-
Trong Automation Testing
-
Khi một hàm lấy dữ liệu từ API nhưng request thất bại, ta trả về
None
để báo lỗi. -
Ví dụ:
def get_user(id): # giả sử gọi API thất bại return None user = get_user(101) if user is None: print("Không tìm thấy user")
-
-
Trong xử lý dữ liệu
-
Khi đọc file CSV, những ô trống có thể được gán
None
.
-
-
Trong OOP (Object-Oriented Programming)
-
Một thuộc tính có thể được khởi tạo là
None
cho đến khi có giá trị thật sự.class Student: def __init__(self, name): self.name = name self.score = None # chưa có điểm s1 = Student("Lan") print(s1.score) # None
-
Lỗi thường gặp với None
-
So sánh sai cách:
❌if user == None:
(không sai cú pháp, nhưng không được khuyến khích).
✅ Dùng:if user is None:
-
Dùng
None
như số hoặc chuỗi:x = None print(x + 1) # ❌ TypeError
✅ Giải pháp: luôn kiểm tra
is None
trước khi dùng.
Kiểu dữ liệu | Giá trị | Ứng dụng chính | Ví dụ |
int | Số nguyên (… -2, -1, 0, 1, 2 …) | Đếm, vòng lặp, chỉ số | a = 10 |
float | Số thực (3.14, -2.5) | Tính toán tiền, số đo, dữ liệu khoa học | b = 3.14 |
complex | Số phức (a+bj) | AI, xử lý tín hiệu, toán học nâng cao | c = 2+3j |
bool | True hoặc False | Điều kiện, kiểm thử, assert | is_pass = True |
NoneType | None (giá trị rỗng) | Placeholder, khi hàm không trả về gì | result = None |
🔹 Chuỗi (String)
Chuỗi là tập hợp các ký tự, được đặt trong " "
hoặc ' '
.
name = "Lan"
sentence = 'Python rất dễ học!'
Ứng dụng thực tế:
-
Lưu họ tên người dùng
-
Lưu mật khẩu (kết hợp mã hóa)
-
Lưu nội dung văn bản, email, logs
Ví dụ nối chuỗi:
first = "Hello"
last = "World"
print(first + " " + last) # Hello World
👉 Lỗi thường gặp:
-
Quên dấu nháy
" "
hoặc' '
: ❌text = Hello
-
Lẫn lộn nháy đơn và kép: ❌
"I'm Lan'
🔹 List
Khái niệm
-
List là cấu trúc dữ liệu quan trọng nhất trong Python.
-
Nó là một danh sách có thứ tự (ordered) và có thể thay đổi (mutable).
-
Các phần tử trong list có thể là bất kỳ kiểu dữ liệu nào, thậm chí list chứa list khác.
Cú pháp tạo list
fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3, 4, 5]
mixed = ["Lan", 25, True, 3.14]
empty = [] # list rỗng
Truy cập phần tử
fruits = ["apple", "banana", "cherry"]
print(fruits[0]) # apple
print(fruits[-1]) # cherry (chỉ số âm = từ cuối lên)
Thay đổi phần tử
fruits[1] = "mango"
print(fruits) # ['apple', 'mango', 'cherry']
Thêm, xóa phần tử
fruits.append("orange") # thêm vào cuối
fruits.insert(1, "kiwi") # thêm vào vị trí chỉ định
print(fruits)
fruits.remove("apple") # xóa theo giá trị
fruits.pop(0) # xóa theo index
print(fruits)
Ứng dụng thực tế của List
-
Danh sách học viên trong lớp
students = ["Lan", "An", "Bình", "Hà"] for s in students: print("Xin chào", s)
-
Lưu kết quả test cases trong Automation Testing
test_results = ["Pass", "Fail", "Pass", "Pass"] print("Số lượng test passed:", test_results.count("Pass"))
-
Quản lý giỏ hàng trong website thương mại điện tử
cart = ["iPhone", "MacBook", "AirPods"] cart.append("iPad") print("Giỏ hàng của bạn:", cart)
-
Xử lý dữ liệu từ file CSV (danh sách điểm học sinh)
scores = [9, 7, 10, 8, 6] print("Điểm cao nhất:", max(scores)) print("Điểm trung bình:", sum(scores)/len(scores))
⚠️ Lỗi thường gặp khi dùng List
-
Truy cập phần tử ngoài phạm vi:
fruits = ["apple", "banana"] print(fruits[5]) # ❌ IndexError
✅ Cách xử lý: kiểm tra len(fruits)
trước.
-
Xóa phần tử không tồn tại:
fruits.remove("orange") # ❌ ValueError
✅ Cách xử lý: kiểm tra "orange" in fruits
trước khi xóa.
🔹 Tuple
-
Giống list, nhưng bất biến (immutable) → không thay đổi được sau khi tạo.
-
Thường dùng cho dữ liệu cố định.
Ứng dụng thực tế:
-
Tọa độ (x, y) trong game, đồ họa.
-
Ngày tháng năm (dd, mm, yyyy).
-
Ví dụ:
👉 Lỗi thường gặp:
-
Thử thay đổi giá trị tuple:
point[0] = 99 # ❌ TypeError: 'tuple' object does not support item assignment
✅ Cách sửa: dùng list thay vì tuple nếu cần thay đổi.
🔹 Dictionary
-
Lưu dữ liệu dạng key → value.
-
Giống như “bảng tra cứu”.
Ứng dụng thực tế:
-
Lưu thông tin user profile (tên, tuổi, email).
-
API trả về dữ liệu dạng JSON → Python dùng dict để xử lý.
-
Ví dụ:
student = {"name": "Lan", "age": 25}
print(student["name"]) # Lan
👉 Lỗi thường gặp:
-
Truy cập key không tồn tại: ❌
student["score"]
→ KeyError
✅ Cách sửa: dùngstudent.get("score", "N/A")
🔹 Set
1. Khái niệm
-
Set là một tập hợp (collection) trong Python.
-
Các đặc điểm chính:
-
Không chứa phần tử trùng lặp
-
Không có thứ tự cố định (unordered)
-
Có thể thay đổi (mutable) – thêm hoặc xóa phần tử được
❌ Nhưng các phần tử trong Set phải là bất biến (immutable) → ví dụ: số, chuỗi, tuple được, nhưng list hoặc dict thì không.
-
2. Cách tạo Set
# Set rỗng
empty_set = set()
# Set với phần tử
fruits = {"apple", "banana", "cherry", "apple"}
print(fruits) # {'apple', 'banana', 'cherry'} (apple chỉ xuất hiện 1 lần)
3. Các thao tác cơ bản
🔹 Thêm và xóa phần tử
fruits = {"apple", "banana", "cherry"}
fruits.add("mango")
print(fruits) # {'apple', 'banana', 'cherry', 'mango'}
fruits.remove("banana")
print(fruits) # {'apple', 'cherry', 'mango'}
fruits.discard("orange") # không báo lỗi nếu không có phần tử
🔹 Kiểm tra phần tử có trong Set không
if "apple" in fruits:
print("Apple có trong tập hợp!")
🔹 Toán tử tập hợp (Set operations)
Set hỗ trợ các phép toán giống toán học:
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print(A | B) # Hợp: {1, 2, 3, 4, 5, 6}
print(A & B) # Giao: {3, 4}
print(A - B) # Hiệu: {1, 2}
print(A ^ B) # Phần tử chỉ có ở 1 tập hợp: {1, 2, 5, 6}
4. Ứng dụng thực tế của Set
🔹 Ứng dụng 1: Loại bỏ phần tử trùng lặp
emails = ["a@gmail.com", "b@gmail.com", "a@gmail.com", "c@gmail.com"]
unique_emails = set(emails)
print(unique_emails) # {'a@gmail.com', 'b@gmail.com', 'c@gmail.com'}
👉 Dùng trong xử lý dữ liệu khách hàng, lọc log file, loại bỏ giá trị trùng trong automation test.
🔹 Ứng dụng 2: Tìm phần chung giữa 2 danh sách
test_case_A = {"login", "logout", "search", "checkout"}
test_case_B = {"search", "payment", "checkout"}
common = test_case_A & test_case_B
print("Test cases chung:", common) # {'search', 'checkout'}
👉 Dùng khi so sánh bộ test case của 2 team hoặc 2 phiên bản khác nhau.
🔹 Ứng dụng 3: Kiểm tra nhanh sự tồn tại của phần tử
blacklist = {"spam.com", "virus.com", "malware.com"}
if "spam.com" in blacklist:
print("Website nằm trong danh sách đen, chặn truy cập!")
👉 Dùng trong kiểm tra bảo mật hoặc lọc dữ liệu đầu vào.
🔹 Ứng dụng 4: Xử lý dữ liệu lớn nhanh hơn List
Set trong Python có tốc độ tìm kiếm (in
) nhanh hơn List (vì dùng hash table).
Ví dụ:
numbers_list = list(range(1000000))
numbers_set = set(numbers_list)
print(999999 in numbers_list) # chậm hơn
print(999999 in numbers_set) # nhanh hơn
👉 Dùng trong hệ thống lớn cần tra cứu dữ liệu nhanh.
5. Lỗi thường gặp khi dùng Set
❌ Set không cho phép index:
fruits = {"apple", "banana"}
print(fruits[0]) # Lỗi: TypeError
✅ Giải pháp: convert sang list → list(fruits)[0]
.
❌ Thứ tự không cố định:
fruits = {"apple", "banana", "cherry"}
print(fruits) # mỗi lần in ra có thể khác nhau
✅ Nhấn mạnh cho học viên: set không quan tâm thứ tự.
👉 Tóm lại: Set = Bộ sưu tập không trùng lặp, không quan tâm thứ tự, rất mạnh khi cần loại bỏ duplicates hoặc làm toán tập hợp.
🔹 Bảng so sánh kiểu dữ liệu Python
Kiểu dữ liệu | Có thứ tự (Ordered) | Cho phép trùng lặp | Mutable (có thể thay đổi) | Cú pháp tạo | Truy cập phần tử | Ứng dụng chính | Ví dụ |
List | ✅ Có | ✅ Có | ✅ Có | [1, 2, 3] | Dùng index (0,1,2…) | Lưu danh sách có thể thay đổi (user, test case) | lst = [1,2,3] |
Tuple | ✅ Có | ✅ Có | ❌ Không (immutable) | (1, 2, 3) | Dùng index | Dữ liệu cố định, làm key trong dict | coords = (10,20) |
Set | ❌ Không | ❌ Không | ✅ Có (thêm/xoá được) | {1, 2, 3} hoặc set() | Không hỗ trợ index, chỉ lặp | Loại bỏ trùng lặp, toán tử tập hợp (∩, ∪, -) | s = {1,2,3} |
Dict | ✅ Có (từ Python 3.7+) | ❌ Key không trùng | ✅ Có | {"a":1, "b":2} | Truy cập bằng key | Lưu dữ liệu dạng key-value (giống JSON, API) | d = {"name":"Lan"} |
3. Toán tử trong Python
🔹 Số học
x, y = 10, 3
print(x + y, x - y, x * y, x / y, x // y, x % y, x ** y)
👉 Lỗi thường gặp: chia cho 0
print(5 / 0) # ❌ ZeroDivisionError
🔹 So sánh
print(10 > 5, 10 == 5, 10 != 5)
🔹 Logic
a, b = True, False
print(a and b, a or b, not a)
🔹 Gán
x = 5
x += 3 # x = x + 3
print(x) # 8
🔹 Membership
fruits = ["apple", "banana"]
print("apple" in fruits) # True
print("orange" not in fruits) # True
🔹 Identity
a = [1, 2]
b = [1, 2]
print(a == b) # True
print(a is b) # False
4. Tóm tắt buổi học
-
Biết cách khai báo biến & quy tắc đặt tên
-
Hiểu các kiểu dữ liệu cơ bản
-
Thành thạo các loại toán tử
-
Hiểu và xử lý lỗi thường gặp (IndexError, KeyError, ZeroDivisionError, IndentationError, NameError)
👉 Chuẩn bị buổi 3: Cấu trúc điều kiện if
, else
, elif
và vòng lặp (for
, while
).