Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó
- I. Lý thuyết trọng tâm
- 1. Biến và lệnh gán
- 2. Các phép toán trên kiểu dữ liệu cơ bản
- 3. Từ khóa (keyword)
- II. Phương pháp giải các dạng bài tập
- Dạng 1: Kiểm tra tên biến hợp lệ
- Dạng 2: Truy vết giá trị biến sau chuỗi lệnh gán
- Dạng 3: Tính giá trị biểu thức số học trong Python
- Dạng 4: Phép toán trên xâu kí tự
- Dạng 5: Viết lệnh print() kết hợp biến và biểu thức
- III. Sơ đồ tư duy
- IV. sai lầm thường gặp
I. Lý thuyết trọng tâm
1. Biến và lệnh gán
a) Biến là gì?
Trong toán học, ta dùng chữ cái (a, b, x, y…) để đại diện cho các giá trị số. Trong lập trình cũng tương tự: biến (variable) là tên gọi của một vùng nhớ trong máy tính, dùng để lưu trữ giá trị. Giá trị này có thể thay đổi trong quá trình chương trình hoạt động.
Khác với nhiều ngôn ngữ lập trình khác, Python không yêu cầu khai báo kiểu dữ liệu trước — kiểu dữ liệu của biến được xác định tự động tại thời điểm gán giá trị.
b) Lệnh gán
Biến trong Python được tạo ra thông qua lệnh gán. Cú pháp:
<biến> = <biểu thức>
Khi thực hiện lệnh gán, Python sẽ tính giá trị của <biểu thức> bên phải, rồi lưu kết quả vào <biến> bên trái. Nếu biến chưa tồn tại, Python tự động tạo mới.
>>> x = 5 # x được tạo, gán giá trị 5, kiểu số nguyên
>>> y = "Tin học 10" # y được tạo, gán xâu kí tự, kiểu string
>>> z = x / 2 # z = 2.5, kiểu số thực (vì phép chia / cho số thực)
Các dạng gán quan trọng:
| Dạng gán | Ví dụ | Giải thích |
|---|---|---|
| Gán giá trị trực tiếp | x = 5 |
Gán số 5 cho biến x |
| Gán biểu thức | z = x + y * 2 |
Tính biểu thức rồi gán kết quả cho z |
| Gán đồng thời cùng giá trị | x = y = 1 |
Cả x và y đều nhận giá trị 1 |
| Gán đồng thời nhiều giá trị | x, y, z = 10, 5, 1 |
x = 10, y = 5, z = 1 |
Cú pháp gán đồng thời:
<var1>, <var2>, ..., <varn> = <gt1>, <gt2>, ..., <gtn>
Lưu ý: số biến bên trái phải bằng số giá trị bên phải dấu =.
Điều quan trọng: Mọi biến xuất hiện trong biểu thức bên phải phải được gán giá trị trước đó, nếu không Python sẽ báo lỗi
NameError.
Chú ý về kiểu dữ liệu: Không thể thực hiện phép toán giữa các biến có kiểu dữ liệu khác nhau một cách tùy ý. Ví dụ, nếu
x = 5(số nguyên) vày = "abc"(xâu kí tự), lệnhz = x + ysẽ gây lỗi vì không thể cộng số với xâu.
c) Quy tắc đặt tên biến
Tên biến trong Python phải tuân theo ba quy tắc:
| Quy tắc | Hợp lệ | Không hợp lệ |
|---|---|---|
Chỉ gồm chữ cái tiếng Anh (a–z, A–Z), chữ số (0–9) và dấu gạch dưới _ |
_name, xyzABC, so_1 |
m123&b (có kí tự &), My country (có dấu cách) |
| Không bắt đầu bằng chữ số | x1, _test |
12abc (bắt đầu bằng số), 123a |
| Phân biệt chữ hoa và chữ thường | Name ≠ name ≠ NAME |
— |
Câu hỏi kiểm tra nhanh (SGK): Các tên biến nào dưới đây là hợp lệ trong Python?
| Tên biến | Hợp lệ? | Lí do |
|---|---|---|
A. _name |
✔️ | Bắt đầu bằng _, chỉ chứa chữ cái và gạch dưới |
B. 12abc |
❌ | Bắt đầu bằng chữ số |
C. My country |
❌ | Có dấu cách (khoảng trắng) |
D. m123&b |
❌ | Có kí tự đặc biệt & |
E. xyzABC |
✔️ | Chỉ chứa chữ cái |
2. Các phép toán trên kiểu dữ liệu cơ bản
a) Bảy phép toán với kiểu số
| Phép toán | Kí hiệu | Ví dụ | Kết quả | Ghi chú |
|---|---|---|---|---|
| Cộng | + |
10 + 3 |
13 |
|
| Trừ | - |
10 - 3 |
7 |
|
| Nhân | * |
10 * 3 |
30 |
|
| Chia | / |
10 / 3 |
3.333... |
Luôn trả về số thực |
| Chia lấy thương nguyên | // |
10 // 3 |
3 |
Lấy phần nguyên của phép chia |
| Chia lấy số dư | % |
10 % 3 |
1 |
Lấy phần dư của phép chia |
| Lũy thừa | ** |
2 ** 3 |
8 |
$2^3 = 8$ |
Mối liên hệ giữa // và %: Với hai số nguyên a và b, luôn có đẳng thức:
$$a = (a // b) \times b + a % b$$
Ví dụ: a = 10, b = 3 → (10 // 3) * 3 + 10 % 3 = 3 * 3 + 1 = 10 ✔️
b) Thứ tự ưu tiên các phép toán
| Mức ưu tiên | Phép toán | Chiều thực hiện |
|---|---|---|
| 1 (cao nhất) | ** (lũy thừa) |
Phải sang trái |
| 2 | *, /, //, % |
Trái sang phải |
| 3 (thấp nhất) | +, - |
Trái sang phải |
Lưu ý đặc biệt: Phép lũy thừa
**thực hiện từ phải sang trái, khác với mọi phép toán khác. Ví dụ:4**2**3tương đương4**(2**3) = 4**8 = 65536, chứ không phải(4**2)**3 = 16**3 = 4096.
Nếu biểu thức có dấu ngoặc (), phần trong ngoặc luôn được ưu tiên tính trước.
Ví dụ phân tích thứ tự (SGK):
>>> 3/2 + 4*2**4 - 5//2**2
Tương đương với:
>>> 3/2 + 4*(2**4) - 5//(2**2)
Tính từng phần: 3/2 = 1.5, 2**4 = 16 → 4*16 = 64, 2**2 = 4 → 5//4 = 1
Kết quả: 1.5 + 64 - 1 = 64.5
c) Quy tắc kiểu dữ liệu kết quả
- Phép
/luôn trả về số thực (float), kể cả chia hết. - Nếu biểu thức có cả số thực và số nguyên → kết quả là số thực.
- Phép
//và%giữa hai số nguyên → kết quả là số nguyên.
d) Hai phép toán với xâu kí tự
| Phép toán | Kí hiệu | Ví dụ | Kết quả |
|---|---|---|---|
| Nối xâu | + |
"Hà Nội" + "Việt Nam" |
'Hà NộiViệt Nam' |
| Lặp xâu | * |
"123" * 5 |
'123123123123123' |
Lưu ý:
- Phép
+chỉ nối hai xâu, không tự thêm dấu cách giữa chúng. - Phép
* nvớin ≤ 0cho kết quả là xâu rỗng''. - Xâu rỗng
""nhân với bất kì số nào cũng cho xâu rỗng.
3. Từ khóa (keyword)
Từ khóa là các từ tiếng Anh đặc biệt mà Python đã “giữ chỗ” để dùng vào mục đích riêng của ngôn ngữ. Khi đặt tên biến, không được trùng với từ khóa.
Một số từ khóa trong Python 3.x:
False |
break |
else |
if |
not |
as |
from |
while |
None |
class |
except |
import |
or |
assert |
global |
with |
True |
continue |
finally |
in |
pass |
del |
lambda |
yield |
and |
def |
for |
is |
raise |
elif |
nonlocal |
try |
Ví dụ lỗi khi đặt tên biến trùng từ khóa:
>>> if = 12
SyntaxError: invalid syntax # "if" là từ khóa → không dùng làm tên biến
>>> with = "Độ rộng"
SyntaxError: invalid syntax # "with" là từ khóa → không dùng làm tên biến
Câu hỏi kiểm tra nhanh (SGK): Các tên biến sau có hợp lệ không?
| Tên biến | Hợp lệ? | Lí do |
|---|---|---|
a) _if |
✔️ | Có dấu _ đứng trước, không trùng từ khóa if |
b) global |
❌ | Trùng từ khóa global |
c) nolocal |
✔️ | Không trùng từ khóa nonlocal (thiếu chữ n) |
d) return |
❌ | Trùng từ khóa return |
e) true |
✔️ | Không trùng từ khóa True (Python phân biệt hoa/thường: true ≠ True) |
II. Phương pháp giải các dạng bài tập
Dạng 1: Kiểm tra tên biến hợp lệ
Phương pháp:
Kiểm tra lần lượt 3 điều kiện + 1 ràng buộc:
- Điều kiện 1: Chỉ chứa chữ cái (a–z, A–Z), chữ số (0–9), dấu gạch dưới
_? → Nếu có kí tự khác (dấu cách,&,@,-…) → không hợp lệ. - Điều kiện 2: Kí tự đầu tiên có phải chữ số không? → Nếu bắt đầu bằng số → không hợp lệ.
- Điều kiện 3: Có trùng với từ khóa Python không? → Nếu trùng → không hợp lệ.
Lưu ý: Python phân biệt hoa/thường, nên
true≠True,IF≠if. Chỉ đúng chính xác mới bị coi là trùng từ khóa.
Bài tập mẫu (SGK – Luyện tập, bài 1):
>>> x = 1
>>> 123a = x + 1
SyntaxError: invalid syntax
Lệnh trên có lỗi gì?
Lời giải: Tên biến 123a bắt đầu bằng chữ số → vi phạm quy tắc đặt tên biến → Python báo lỗi cú pháp (SyntaxError).
Dạng 2: Truy vết giá trị biến sau chuỗi lệnh gán
Phương pháp:
- Bước 1: Thực hiện các lệnh theo thứ tự từ trên xuống dưới.
- Bước 2: Với mỗi lệnh gán, tính giá trị biểu thức bên phải trước (dùng giá trị hiện tại của các biến), sau đó gán kết quả cho biến bên trái.
- Bước 3: Cập nhật giá trị mới của biến, tiếp tục lệnh kế tiếp.
Cẩn thận với lệnh gán đồng thời:
a, b = a+b, a-b→ Python tính cả hai vế phải trước (dùng giá trị cũ của a, b), rồi mới gán đồng thời.
Bài tập mẫu 1 (SGK – Câu hỏi mục 1, bài 2): Sau các lệnh dưới đây, x và y nhận giá trị bao nhiêu?
>>> x = 10
>>> y = x**2 - 1
>>> x = x//2 + y%2
Lời giải:
| Bước | Lệnh | Tính toán | Giá trị biến |
|---|---|---|---|
| 1 | x = 10 |
— | x = 10 |
| 2 | y = x**2 - 1 |
$10^2 – 1 = 100 – 1 = 99$ | x = 10, y = 99 |
| 3 | x = x//2 + y%2 |
$10 // 2 + 99 % 2 = 5 + 1 = 6$ | x = 6, y = 99 |
Kết quả: x = 6, y = 99.
Bài tập mẫu 2 (SGK – Câu hỏi mục 1, bài 3): a, b nhận giá trị gì sau các lệnh sau?
>>> a, b = 2, 3
>>> a, b = a+b, a-b
Lời giải:
| Bước | Lệnh | Tính toán | Giá trị biến |
|---|---|---|---|
| 1 | a, b = 2, 3 |
— | a = 2, b = 3 |
| 2 | a, b = a+b, a-b |
Tính cả hai vế phải trước (dùng a=2, b=3): 2+3 = 5, 2-3 = -1 → rồi gán đồng thời |
a = 5, b = -1 |
Kết quả: a = 5, b = -1.
Dạng 3: Tính giá trị biểu thức số học trong Python
Phương pháp:
- Bước 1: Xác định thứ tự ưu tiên:
**→*,/,//,%→+,-. Ngoặc()ưu tiên cao nhất. - Bước 2: Phép
**thực hiện phải sang trái, các phép khác trái sang phải. - Bước 3: Tính từng phần theo thứ tự, chú ý phép
/luôn cho số thực.
Bài tập mẫu (SGK – Câu hỏi mục 2, bài 1): Mỗi lệnh sau đúng hay sai? Nếu đúng cho kết quả bao nhiêu?
Lệnh 1: (12 - 10//2)**2 - 1
Lời giải:
$$10 // 2 = 5 \longrightarrow 12 – 5 = 7 \longrightarrow 7^{2} = 49 \longrightarrow 49 – 1 = 48$$
→ Đúng, kết quả = 48.
Lệnh 2: (13 + 45**2)(30//12 - 5/2)
Lời giải:
→ Sai (lỗi cú pháp). Hai cặp ngoặc đặt liền nhau mà không có toán tử ở giữa. Python không tự hiểu phép nhân khi hai ngoặc liền nhau (khác với toán học). Cần viết (13 + 45**2) * (30//12 - 5/2) mới đúng cú pháp.
Dạng 4: Phép toán trên xâu kí tự
Phương pháp:
- Phép
+giữa hai xâu: nối hai xâu lại (không thêm dấu cách). - Phép
* n: lặp xâu gốc n lần. Nếu n ≤ 0, kết quả là xâu rỗng"". ""(xâu rỗng) nhân với số bất kì → vẫn là xâu rỗng.- Thứ tự thực hiện:
*trước,+sau (giống phép toán số).
Bài tập mẫu (SGK – Câu hỏi mục 2, bài 2): Mỗi lệnh sau cho kết quả là xâu kí tự như thế nào?
Lệnh 1: ""*20 + "010"
Lời giải:
""*20 → xâu rỗng lặp 20 lần = "" (xâu rỗng). Sau đó "" + "010" = "010".
→ Kết quả: "010"
Lệnh 2: "10" + "0"*5
Lời giải:
"0"*5 → "00000" (lặp “0” năm lần). Sau đó "10" + "00000" = "1000000".
→ Kết quả: "1000000"
Dạng 5: Viết lệnh print() kết hợp biến và biểu thức
Phương pháp:
- Gán giá trị cho các biến liên quan.
- Dùng
print()kết hợp xâu kí tự (in nguyên văn) và biến/biểu thức (Python tính rồi in). - Các phép toán trên xâu (
+nối,*lặp) có thể đặt ngay bên trongprint().
Bài tập mẫu (SGK – Luyện tập, bài 2): Lệnh sau sẽ in ra kết quả gì?
>>> print("đồ rê mi "*3 + "pha son la si đô "*2)
Lời giải:
"đồ rê mi " * 3→"đồ rê mi đồ rê mi đồ rê mi ""pha son la si đô " * 2→"pha son la si đô pha son la si đô "- Nối hai xâu bằng
+:
→ Kết quả in ra: đồ rê mi đồ rê mi đồ rê mi pha son la si đô pha son la si đô
III. Sơ đồ tư duy
1. Biến và lệnh gán
- 1.1. Biến = tên vùng nhớ lưu trữ giá trị, có thể thay đổi
- 1.2. Lệnh gán:
<biến> = <biểu thức> - 1.3. Python tự xác định kiểu dữ liệu khi gán (không cần khai báo trước)
- 1.4. Gán đồng thời:
x, y, z = 10, 5, 1 - 1.5. Quy tắc đặt tên: chữ cái + chữ số +
_, không bắt đầu bằng số, phân biệt hoa/thường
2. Phép toán trên kiểu số
- 2.1. Bảy phép toán:
+,-,*,/,//,%,** - 2.2. Ưu tiên:
**>*,/,//,%>+,- - 2.3. Phép
**thực hiện phải → trái; các phép khác trái → phải - 2.4. Phép
/luôn cho số thực; biểu thức có số thực → kết quả số thực
3. Phép toán trên kiểu xâu
- 3.1. Nối xâu:
+(không tự thêm dấu cách) - 3.2. Lặp xâu:
* n(lặp n lần; n ≤ 0 → xâu rỗng)
4. Từ khóa
- 4.1. Là các từ đặc biệt dành riêng cho ngôn ngữ Python
- 4.2. Không được đặt tên biến trùng từ khóa
- 4.3. Phân biệt hoa/thường:
true≠True(từ khóa)
IV. sai lầm thường gặp
| Sai lầm | Đính chính |
|---|---|
Đặt tên biến bắt đầu bằng chữ số: 2x, 123a |
Tên biến không được bắt đầu bằng chữ số. Sửa lại: x2, a123. |
Nhầm phép chia / với chia lấy nguyên //: nghĩ 10/3 = 3 |
Phép / luôn trả về số thực: 10/3 = 3.333.... Muốn lấy thương nguyên dùng //: 10//3 = 3. |
Viết lũy thừa bằng dấu ^: 2^3 |
Trong Python, ** mới là phép lũy thừa: 2**3 = 8. Dấu ^ là phép XOR (khác hoàn toàn). |
Nghĩ 4**2**3 tính từ trái sang phải: (4**2)**3 = 4096 |
Phép ** thực hiện phải sang trái: 4**(2**3) = 4**8 = 65536. |
Hai ngoặc liền nhau là phép nhân: (a+b)(a-b) |
Python không hiểu hai ngoặc liền nhau là nhân. Phải viết rõ: (a+b) * (a-b). |
Nhầm true với từ khóa True, hoặc _if với if |
Python phân biệt hoa/thường. true, _if, nolocal không phải từ khóa (từ khóa là True, if, nonlocal). |
Nghĩ phép nối xâu + tự thêm dấu cách: "Hà Nội" + "Việt Nam" = "Hà Nội Việt Nam" |
Phép + nối xâu không thêm kí tự nào: kết quả là "Hà NộiViệt Nam". Muốn có dấu cách phải viết "Hà Nội" + " " + "Việt Nam" hoặc "Hà Nội " + "Việt Nam". |
Gán đồng thời a, b = a+b, a-b tính lần lượt (a đổi trước rồi mới tính b) |
Python tính toàn bộ vế phải trước bằng giá trị cũ, rồi mới gán đồng thời. Nên a, b đều dùng giá trị gốc để tính. |

Thầy Phạm Thành Danh
(Người kiểm duyệt, ra đề)
Chức vụ: Trưởng ban biên soạn môn Tin Học THPT
Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1
Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa
