Ôn Thi Đại Họcby ToanKhonTech
Kiến thức trọng tâmLớp 10

Lập trình Python cơ bản

Tóm tắt biến, kiểu dữ liệu, phép toán, if, for, while, danh sách, xâu, hàm trong Python, đối chiếu với C++, cách lập vết chương trình và lỗi hay gặp.

Lập trình Python là kiến thức lớp 10 nhưng có mặt ở mọi đề: phần I thường có 3–4 câu "cho chương trình, hỏi kết quả in ra", đề in song song Python và C++. Ở định hướng CS, các câu đúng/sai về thuật toán cũng dựa trên kĩ năng này. Bí quyết là lập bảng vết: ghi giá trị các biến sau từng bước thay vì nhẩm.

Kiến thức trọng tâm

Kiểu dữ liệu và phép toán

Kiểu Ví dụ Ghi chú
int (số nguyên) 17, -3 Không giới hạn độ lớn trong Python
float (số thực) 3.5, 7 / 2 Phép / luôn cho số thực
str (xâu) "Tin", '12' "12" + "3" là "123" (ghép xâu)
bool True, False Kết quả của phép so sánh
list (danh sách) [5, 1, 8] Chỉ số bắt đầu từ 0
Phép toán Ý nghĩa Ví dụ Kết quả
/ Chia 7 / 2 3.5
// Chia lấy phần nguyên 17 // 5 3
% Chia lấy dư 17 % 5 2
** Lũy thừa 2 ** 3 8
==, != Bằng, khác 5 != 4 True
and, or, not Và, hoặc, phủ định not (3 > 2) False

Thứ tự ưu tiên: ** → *, /, //, % → +, - → so sánh → not → and → or. Ví dụ 3 + 4 * 2 ** 2 bằng 19.

input() luôn trả về xâu; muốn tính toán phải đổi kiểu: n = int(input()). Lệnh print(a, b, sep="-", end="") in a, b cách nhau bởi - và không xuống dòng.

Câu lệnh rẽ nhánh và lặp

Cấu trúc Python C++ tương đương
Rẽ nhánh if … : / elif … : / else: if (…) … else if (…) … else …
Lặp với số lần biết trước for i in range(a, b, k): for (int i = a; i < b; i += k)
Lặp với điều kiện while dk: while (dk)
Khối lệnh Thụt lề đều nhau Dấu { }
Chia nguyên, chia dư //, % / (giữa hai số nguyên), %
Logic and, or, not &&, ||, !
Độ dài len(a) a.size()
Thêm cuối danh sách a.append(x) a.push_back(x) (với vector)

range(a, b, k) sinh các số từ a, mỗi lần cộng k, dừng trước b: range(10, 0, -3) → 10, 7, 4, 1 (4 lần lặp). range(n) là 0, 1, …, n − 1.

Danh sách và xâu

Thao tác Danh sách a = [5, 1, 8, 3] Xâu s = "Ha Noi"
Phần tử a[0] → 5, a[-1] → 3 s[0] → "H"
Độ dài len(a) → 4 len(s) → 6
Lát cắt a[1:3] → [1, 8] s[3:] → "Noi"
Kiểm tra 8 in a → True "No" in s → True
Thêm, chèn a.append(x), a.insert(i, x) Xâu không sửa được từng kí tự, phải tạo xâu mới
Xóa a.remove(x) (giá trị), a.pop(i) (vị trí) s.replace("a", "")
Khác sorted(a), sum(a), max(a) s.upper(), s.find("N") → 3, s.split() → ["Ha", "Noi"]

Hàm và phạm vi biến

def tang(x):
    x = x + 5
    return x * 2

x = 3
y = tang(x)
print(x, y)
#include <iostream>
using namespace std;
int tang(int x) {
    x = x + 5;
    return x * 2;
}
int main() {
    int x = 3;
    int y = tang(x);
    cout << x << " " << y;
    return 0;
}

Kết quả: 3 16. Tham số x trong hàm là biến cục bộ: gán x = x + 5 (thành 8) không làm thay đổi biến x của chương trình chính, vẫn bằng 3. Hàm trả về 8⋅2=168 \cdot 2 = 16. Biến tạo trong hàm không dùng được bên ngoài hàm.

Lập vết chương trình

a = [4, 7, 2, 9, 5, 8]
dem = 0
tong = 0
for x in a:
    if x % 2 == 0:
        dem = dem + 1
    else:
        tong = tong + x
print(dem, tong)
#include <iostream>
using namespace std;
int main() {
    int a[] = {4, 7, 2, 9, 5, 8};
    int dem = 0, tong = 0;
    for (int i = 0; i < 6; i++)
        if (a[i] % 2 == 0)
            dem = dem + 1;
        else
            tong = tong + a[i];
    cout << dem << " " << tong;
    return 0;
}
x x chẵn? dem tong
4 có 1 0
7 không 1 7
2 có 2 7
9 không 2 16
5 không 2 21
8 có 3 21

Chương trình in 3 21: đếm số chẵn và cộng các số lẻ.

Lỗi chương trình

Loại lỗi Khi nào phát hiện Ví dụ
Lỗi cú pháp Trước khi chạy Thiếu : sau if, thụt lề sai, thiếu ngoặc
Lỗi khi chạy (ngoại lệ) Đang chạy thì dừng Chia cho 0, chỉ số vượt phạm vi danh sách, int("abc"), cộng xâu với số
Lỗi logic Chạy hết nhưng sai kết quả Dùng range(1, n) làm bỏ sót phần tử đầu

Kiểm thử: chạy chương trình với nhiều bộ dữ liệu (kể cả trường hợp đặc biệt như danh sách rỗng, số âm, số 0) và so với kết quả đúng.

Dạng bài thường gặp trong đề thi

Dạng 1: Tính giá trị biểu thức, đếm số lần lặp

Xem lời giải

In 3 2 8 3.5. Vòng lặp nhận i = 10, 7, 4, 1 (số tiếp theo là −2 đã vượt qua mốc dừng 0) → 4 lần.

Dạng 2: Câu đúng/sai về một chương trình có hàm

Xem lời giải
  • a) Đúng. Chia hết cho 3: 12, 18, 30, 9 → 4 số. Chia hết cho 5: 25, 30 → 2 số.
  • b) Sai. d là biến cục bộ của hàm; dùng ngoài hàm sẽ báo lỗi (Python: NameError, C++: lỗi biên dịch).
  • c) Sai. Vòng lặp không chạy lần nào, hàm trả về 0, chương trình in 0 0.
  • d) Đúng. k % x == 0 nghĩa là x là ước của k. Mọi số trong danh sách đều lớn hơn 3 và 5 nên không số nào là ước của chúng → in 0 0.

Dạng 3: Tìm lỗi logic

Xem lời giải

range(1, len(diem)) cho i = 1, 2 nên bỏ sót diem[0] = 8: tổng chỉ là 6+9=156 + 9 = 15, chia 3 được 5.0. Sửa thành range(len(diem)) (hoặc for d in diem) thì tổng là 23, trung bình 23:3≈7,6723 : 3 \approx 7{,}67. Đây là lỗi logic: chương trình chạy bình thường nhưng sai kết quả.

Lỗi thường gặp

Mẹo làm bài

Tự kiểm tra nhanh

  1. Chương trình sau in ra gì?
n = 1234
s = 0
while n > 0:
    s = s + n % 10
    n = n // 10
print(s)
Xem đáp án

In 10. Mỗi lần lặp lấy chữ số hàng đơn vị (n % 10) cộng vào s rồi bỏ chữ số đó (n // 10): 4, 3, 2, 1 → 4+3+2+1=104 + 3 + 2 + 1 = 10.

  1. Chương trình sau in ra gì?
s = "tin hoc"
t = ""
for c in s:
    if c != " ":
        t = c + t
print(t, len(t))
Xem đáp án

In cohnit 6. Mỗi kí tự khác dấu cách được ghép vào đầu xâu t nên t là xâu đảo ngược, bỏ dấu cách; độ dài 6.

  1. a = [5, 1, 8, 3]. Sau a.insert(2, 7) và a.pop(0), danh sách a là gì?
Xem đáp án

insert(2, 7) → [5, 1, 7, 8, 3]; pop(0) xóa phần tử ở vị trí 0 → [1, 7, 8, 3].

  1. Giá trị của 3 + 4 * 2 ** 2 và (3 + 4) * 2 là bao nhiêu?
Xem đáp án

2 ** 2 = 4, 4 * 4 = 16, 3 + 16 = 19. Biểu thức thứ hai: 7 * 2 = 14.

  1. Lệnh int("abc") gây ra loại lỗi nào?
Xem đáp án

Lỗi khi chạy (ngoại lệ ValueError): xâu "abc" không đổi được sang số nguyên. Chương trình dừng tại lệnh đó.

Kiểm tra lại kiến thức vừa ôn

Làm 10 câu luyện tập về lập trình python cơ bản và xem lời giải ngay sau mỗi câu.

Luyện tập ngay

Đề có câu hỏi về chủ đề này