Tổng Hợp Hàm Python Thi Tỉnh Và Thi Vào Lớp 10 Chuyên Tin
DANH SÁCH TÓM TẮT:
Nắm chắc hàm chuẩn
Biết áp dụng nhanh đúng chỗ
Tối ưu tư duy + thời gian làm bài
Trong các bài thi, dữ liệu đầu vào có thể lên tới $10^5$ hoặc $10^6$ dòng. Hàm input() thông thường có thể khiến bạn bị lỗi TLE (Time Limit Exceeded).
Hãy sử dụng sys.stdin:
Python
import sys
# Thay thế input() bằng sys.stdin.readline
input = sys.stdin.readline
# Đọc mảng số nguyên trên một dòng
a = list(map(int, input().split()))
Lưu ý: Khi dùng
sys.stdin.readline, chuỗi nhận được sẽ kèm theo ký tự xuống dòng\n. Bạn có thể cần dùng.strip()để loại bỏ nó.
Đề thi cấp Tỉnh và vào 10 thường xuyên có bài tập xử lý xâu. Python là “vua” ở mảng này.
s.split(): Tách chuỗi thành list (mặc định tách theo khoảng trắng).
" ".join(list): Gộp list thành chuỗi.
s.find(sub): Trả về chỉ số đầu tiên tìm thấy, nếu không có trả về -1.
s.count(sub): Đếm số lần xuất hiện của chuỗi con.
s.replace(old, new): Thay thế chuỗi con.
Đây là kỹ thuật cực mạnh của Python:
s[::-1]: Đảo ngược chuỗi (Cực hay dùng để kiểm tra số Palindrome).
s[start:end:step]: Cắt chuỗi linh hoạt.
math)Đừng tự viết hàm tính toán nếu Python đã có sẵn, vì hàm của thư viện C-based chạy nhanh hơn nhiều.
Python
import math
math.gcd(a, b): Tìm ước chung lớn nhất (UCLN).
math.lcm(a, b): Tìm bội chung nhỏ nhất (BCNN) (Lưu ý: Chỉ có từ Python 3.9 trở lên).
math.isqrt(n): Tính căn bậc 2 nguyên (trả về phần nguyên), nhanh và chính xác hơn int(math.sqrt(n)) với số lớn.
math.ceil(x) / math.floor(x): Làm tròn lên / xuống.
math.factorial(n): Tính giai thừa $n!$.
Sắp xếp (Sorting) là bài toán kinh điển. Python sử dụng thuật toán Timsort với độ phức tạp $O(N \log N)$.
a.sort(): Sắp xếp trực tiếp trên list a (làm thay đổi a).
sorted(a): Trả về một list mới đã sắp xếp, giữ nguyên a.
Sắp xếp ngược: Thêm tham số reverse=True.
Ví dụ: Sắp xếp các cặp số (x, y) theo y tăng dần:
Python
points = [(1, 3), (4, 1), (2, 2)]
points.sort(key=lambda x: x[1])
# Kết quả: [(4, 1), (2, 2), (1, 3)]
Thay vì dùng vòng lặp for, hãy dùng cách này để code ngắn gọn:
Python
# Tạo mảng bình phương các số chẵn từ 0 đến 9
sq = [x**2 for x in range(10) if x % 2 == 0]
collections và itertoolsĐây là phần phân loại thí sinh. Biết dùng các thư viện này sẽ giúp bạn giải quyết bài toán phức tạp trong vài dòng code.
collections.Counter (Đếm tần suất)Giải quyết bài toán “đếm số lần xuất hiện của phần tử” trong $O(N)$.
Python
from collections import Counter
a = [1, 2, 2, 3, 1, 1]
dem = Counter(a)
print(dem[1]) # Kết quả: 3 (số 1 xuất hiện 3 lần)
print(dem.most_common(1)) # Trả về phần tử xuất hiện nhiều nhất
collections.deque (Hàng đợi hai đầu)Dùng cho thuật toán BFS hoặc các bài toán cần thêm/xóa phần tử ở đầu mảng (List thường xóa đầu mất $O(N)$, deque chỉ mất $O(1)$).
itertools.permutations & combinationsDùng để sinh hoán vị và tổ hợp (thay thế cho quay lui – backtracking ở các bài toán có N nhỏ).
Python
from itertools import permutations
# Sinh tất cả hoán vị của [1, 2, 3]
perms = list(permutations([1, 2, 3]))
Nới rộng giới hạn đệ quy: Python mặc định giới hạn độ sâu đệ quy khoảng 1000. Với các bài DFS hoặc quy hoạch động đệ quy, hãy thêm dòng này đầu file:
Python
import sys
sys.setrecursionlimit(10**6)
Sử dụng hàm set(): Để loại bỏ phần tử trùng lặp hoặc kiểm tra sự tồn tại trong $O(1)$ thay vì $O(N)$ của list.
Hàm zip(): Duyệt song song nhiều list cùng lúc.
1) các hàm chữ:
print(s[0].zfill(2),’:’,s[1].zfill(2),’:’,s[2].zfill(2),sep=”)# định dạng thêm số 0 ở phía trước zfill(2) ; số 2 phần chục; 3; phần trăm; 4; phần ngàn,…
Trong đề thi, đôi khi dữ liệu vào là một xâu hỗn độn chứa cả chữ và số (ví dụ: a12b34cd56), và yêu cầu bạn tách riêng số hoặc chữ. Thay vì dùng vòng lặp for để kiểm tra từng ký tự, ta dùng thư viện re (Regular Expression).
Để sử dụng, bắt buộc phải import re.
Python
import re
s = "hoc123sinh456gioi789"
# 1. Lấy số, bỏ chữ:
# '[^0-9]+' nghĩa là: Những ký tự KHÔNG phải số (0-9)
# Thay thế những cái không phải số bằng khoảng trắng ' ', sau đó split ra.
nums = re.sub('[^0-9]+', ' ', s).split()
# Kết quả nums: ['123', '456', '789'] (Dạng chuỗi)
# 2. Lấy chữ, bỏ số:
# '[^a-zA-Z]+' nghĩa là: Những ký tự KHÔNG phải chữ cái (a-z, A-Z)
words = re.sub('[^a-zA-Z]+', ' ', s).split()
# Kết quả words: ['hoc', 'sinh', 'gioi']
Tại sao nó “xịn”? Cách này xử lý được cả trường hợp số âm hoặc số thực nếu bạn chỉnh pattern một chút, và nó nhanh hơn nhiều so với việc viết hàm
ifkiểm tra từng ký tự.
replace & strip)Nhóm hàm này dùng để chuẩn hóa dữ liệu đầu vào (ví dụ: xoá khoảng trắng thừa, thay thế từ khóa).
replace)Dùng để thay thế tất cả các chuỗi con tìm thấy.
Python
s = " hello world "
# Xóa toàn bộ khoảng trắng trong chuỗi
# Kết quả: "helloworld"
clean_s = s.replace(" ", "")
# Thay thế từ
s2 = "python is hard"
s2 = s2.replace("hard", "easy")
# Kết quả: "python is easy"
strip)Rất quan trọng khi đọc dữ liệu từ input() để tránh lỗi do khoảng trắng thừa ở đầu/cuối dòng.
s.strip(): Cắt khoảng trắng 2 đầu.
s.lstrip(): Cắt bên trái (đầu dòng).
s.rstrip(): Cắt bên phải (cuối dòng).
Cần phân biệt rõ giữa Sắp xếp (Sort) và Đảo ngược (Reverse).
Đưa các phần tử về trật tự tăng dần hoặc giảm dần.
Python
a = [3, 1, 5, 2]
# Cách 1: a.sort()
# Sắp xếp trực tiếp lên biến a. Không trả về dữ liệu mới.
a.sort()
print(a) # [1, 2, 3, 5]
# Cách 2: sorted(a)
# Trả về một list MỚI, list a cũ giữ nguyên.
b = sorted(a, reverse=True) # Sắp xếp giảm dần
print(b) # [5, 3, 2, 1]
Đây không phải là sắp xếp lại giá trị, mà chỉ là lật ngược vị trí (đuôi lên đầu).
Python
s = "ABCDE"
rev_s = s[::-1]
# Kết quả: "EDCBA"
Sử dụng kỹ thuật slicing [::-1] để kiểm tra cực nhanh.
Python
def ktdx(n):
# Luôn chuyển về chuỗi trước khi đảo ngược
s = str(n)
return s == s[::-1]
print(ktdx(12321)) # True
print(ktdx(123)) # False
Ngoài việc tìm số lớn nhất/nhỏ nhất thông thường, Python cho phép tìm theo tiêu chí riêng bằng tham số key.
Python
arr = [10, 5, 8, 90]
print(max(arr)) # 90
print(min(arr)) # 5
Ví dụ: Tìm từ dài nhất trong một câu.
Python
words = ["ha", "noi", "vietnam", "yeu"]
# Tìm chuỗi có độ dài (len) lớn nhất
longest = max(words, key=len)
print(longest) # "vietnam"
# Tìm chuỗi có độ dài nhỏ nhất
shortest = min(words, key=len)
print(shortest) # "ha"
Giải thích:
key=lenbảo Python rằng: “Đừng so sánh chữ cái a,b,c… hãy so sánh độ dài của chúng để quyết định ai lớn nhất”.
| Chức năng | Hàm/Cú pháp | Ghi chú |
| Lọc số | re.sub('[^0-9]+', ' ', s) | Cần import re |
| Thay thế | s.replace(old, new) | Thay thế tất cả |
| Cắt khoảng trắng | s.strip() | Chỉ cắt 2 đầu |
| Sắp xếp | a.sort() hoặc sorted(a) | sort sửa list gốc, sorted tạo list mới |
| Đảo ngược | s[::-1] | Dùng để kiểm tra Palindrome |
| Max theo dài | max(a, key=len) | Tìm chuỗi dài nhất |
9) lấy điểm ra sắp xếp:
Def laydiem(s): s=s.split() return float(s[-1]) kq=sorted(a,key=laydiemm,reverse=True) for i in range(len(kq)): x=kq[i].split() diem=float(x[-1]) x.pop(-1) hoten=’’.join(x) print(hoten,’%0.1f’%diem)
Nếu bạn đang ôn thi học sinh giỏi Tin học THCS cấp tỉnh Tiền Giang,…
Tổng Hợp 74 Đề Thi Học Sinh Giỏi Tin Học THCS Cấp Tỉnh Có Đáp…
Tổng hợp 75 Đề thi HSG Tin học THCS Python Cấp Tỉnh (Có Code Giải…
6 Kinh nghiệm làm bài thi Học sinh giỏi Tin học Tỉnh 2026- 2027 &…
Cách Tải Tài liệu 5 Bí kíp chinh phục Python Tài liệu ôn thi HSG…
100 Bài Lập Trình Python Có Lời Giải Cơ Bản Đến Nâng Cao PDF –…
This website uses cookies.