Thẻ: Hàm trong Python có thể có bao nhiêu tham số

Tổng Hợp Hàm Python Thi Tỉnh Và Thi Vào Lớp 10 Chuyên Tin

Tổng Hợp Các Hàm Python “Cốt Lõi” Khi Thi HSG Tỉnh Và Vào 10 Chuyên Tin ( Mới Nhất – Chọn Lọc – Cập Nhật Thường Xuyên )

  • Cập nhật mới nhất ngày 25/1/2026
  • Trong các kỳ thi học sinh giỏi Tin học cấp huyện – cấp tỉnhthi tuyển sinh vào lớp 10 chuyên Tin, Python là ngôn ngữ được sử dụng rất phổ biến. Tuy nhiên, đề thi không yêu cầu viết code dài, mà yêu cầu:
    • 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

  • Bài viết này tổng hợp đầy đủ các hàm Python “xương sống” thường xuất hiện trong đề thi tỉnh và đề thi chuyên, được chia theo nhóm bài toán, kèm ví dụ sát đề thật.
  • Tác giả: [Thầy Tấn Dân]
  • Chuyên mục: Lập trình thi đấu Python cấp Tỉnh, Ôn thi Chuyên Tin.
  • Trong những năm gần đây, Python đã trở thành ngôn ngữ được cho phép và ưa chuộng trong các kỳ thi Học sinh giỏi (HSG) cấp Tỉnhthi vào lớp 10 Chuyên Tin nhờ cú pháp ngắn gọn. Tuy nhiên, tốc độ thực thi của Python chậm hơn C++. Để bù đắp điều này, việc nắm vững các hàm có sẵn (built-in functions) và các thư viện chuẩn là chìa khóa để code nhanh hơn và tối ưu thời gian chạy (Time Limit).
  • Bài viết này sẽ tổng hợp “kho vũ khí” các hàm Python quan trọng nhất giúp bạn chinh phục các bài toán xử lý chuỗi, số học và cấu trúc dữ liệu.

1. Tăng Tốc Nhập/Xuất Dữ Liệu (Fast I/O)

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ó.


2. Các Hàm Xử Lý Chuỗi (String Manipulation)

Đề 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.

Cắt và Gộp Chuỗi

  • 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.

Tìm Kiếm và Thay Thế

  • 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.

Kỹ Thuật Slicing (Cắt lát)

Đâ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.


3. Thư Viện Toán Học (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!$.


4. Xử Lý Danh Sách (List) & Sắp Xếp

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)$.

Hàm Sắp Xếp

  • 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.

Sắp Xếp Tùy Chọn (Lambda)

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)]

List Comprehension (Tạo List nhanh)

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]

5. “Vũ Khí Bí Mật”: Thư Viện collectionsitertools

Đâ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 & combinations

Dù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]))

6. Mẹo Nhỏ Nhưng “Có Võ”

  1. 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)
    
  2. 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.

  3. Hàm zip(): Duyệt song song nhiều list cùng lúc.


I. Các hàm đặc biệt quan trọng – Hay ra nhất trong đề thi

1) các hàm chữ:

  1. s=s.split() #tách các chữ mất khoản cách
  2. s=s.split(‘,’) # tách các phần tử bởi dấu phẩy (, ) (.) (: ) tùy bài
  3. isdigit() # các số 
  4. islower() ( chữ thường )
  5. isupper() (chữ hoa )
  6. sorted() ( Các từ theo thứ tự từ điển)
  7. print(s1.count(s2)) ( điếm trong chuỗi )
  8. s[i].isalnum() lấy kiểu chữ và số ( trừ ký tự đặc biệt )
  9. not s[i].isalnum() lấy ký tự đặc biệt
  10. s=’’.join(a)# chuyển mảng sang chuỗi
  11. a=list(s) # chuyển chuỗi sang mảng
  12. vt=c.index(Max)
  13. vt=s.rfind(‘.’)# tìm vị trí dấu chấm cuối
  14. vt=s.find(‘.’)# tìm vị trí đầu trong chuỗi
  15. abs( a- b) ( hàm trị tuyệt đối)
  16. sqrt ( a) căn bật 2 nhớ import math
  17. BCNN=abs(a*b)/ucln(a,b) # Bội số chung lớn nhất
  18. Ucln=math.gcd(a,b) #Ước số chung lớn nhất

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,…

7. Kỹ Thuật Lọc Dữ Liệu Bằng “Biểu Thức Chính Quy” (Regex)

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).

Lấy từng số, bỏ chữ (Hoặc ngược lại)

Để 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 if kiểm tra từng ký tự.


8. Sửa Đổi và Làm Sạch Chuỗi (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).

Hàm thay thế (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"

Hàm cắt khoảng trắng (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).


9. Các Kỹ Thuật Sắp Xếp và Đảo Ngược

Cần phân biệt rõ giữa Sắp xếp (Sort)Đảo ngược (Reverse).

Sắp xếp (Sort)

Đư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]

Đảo ngược (Reverse – Slicing)

Đâ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"

Kiểm tra đối xứng (Palindrome)

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

10. Tìm Giá Trị Lớn Nhất / Nhỏ Nhất (Min/Max Nâng Cao)

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.

Min/Max cơ bản

Python

arr = [10, 5, 8, 90]
print(max(arr)) # 90
print(min(arr)) # 5

Min/Max theo độ dài (Rất hay thi)

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=len bả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”.


Tổng kết nhanh các hàm cần nhớ:

Chức năngHàm/Cú phápGhi 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ắngs.strip()Chỉ cắt 2 đầu
Sắp xếpa.sort() hoặc sorted(a)sort sửa list gốc, sorted tạo list mới
Đảo ngượcs[::-1]Dùng để kiểm tra Palindrome
Max theo dàimax(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)