Lập trình cho Kỳ thi: Những Câu trả lời Python Đạt điểm cao
Cách viết code Python trong kỳ thi mà thực sự kiếm được điểm tối đa — cấu trúc, trường hợp đặc biệt, và quản lý thời gian dưới áp lực.
Những người chấm bài thi không chạy code của bạn qua debugger trong hai mươi phút. Họ đọc nó một lần, có thể hai lần, và kiểm tra nó so với rubric. Một giải pháp hoạt động nhưng bỏ qua rubric vẫn có thể bị trừ điểm, trong khi một giải pháp hơi thô nhưng chạm vào từng điểm kiểm tra có thể ghi điểm cao hơn. Viết Python cho kỳ thi là một kỹ năng khác với viết Python cho dự án thực tế, và nó đáng để luyện tập riêng.
Đọc rubric trước khi đọc bài toán lần thứ hai
Hầu hết các kỳ thi lập trình — câu hỏi free-response kiểu AP CS A, các bài thi giữa kỳ đại học, bài đánh giá bootcamp lập trình — công bố các quy tắc tính điểm từng phần. Một dòng rubric điển hình trông như: "1 điểm cho cấu trúc vòng lặp đúng, 1 điểm cho giá trị trả về đúng, 1 điểm cho xử lý trường hợp danh sách trống." Nếu bạn viết một dòng dày đặc lấy câu trả lời đúng nhưng bỏ qua vòng lặp rõ ràng, một số người chấm sẽ trừ bạn mặc dù output là đúng.
Trước khi gõ bất cứ điều gì, xác định những phần mà người chấm có khả năng kiểm tra riêng biệt:
- Chữ ký hàm khớp chính xác những gì được yêu cầu (tên, thứ tự tham số, kiểu trả về)
- Trường hợp cơ sở và trường hợp đệ quy, nếu kỳ vọng đệ quy
- Giới hạn vòng lặp (lỗi off-by-one là điều duy nhất làm mất điểm nhiều nhất)
- Trường hợp đặc biệt: input trống, input một phần tử, số âm, các giá trị trùng lặp
Viết những cái này dưới dạng comment trước. # handle empty list, # base case: n == 0. Điều này tốn mười giây và đảm bảo bạn không quên trường hợp mà người chấm đang tìm kiếm.
Cấu trúc code để tín chỉ từng phần hiển thị rõ ràng
So sánh hai câu trả lời cho "viết một hàm trả về số lớn thứ hai trong danh sách":
def second_largest(nums):
return sorted(nums)[-2]
def second_largest(nums):
if len(nums) < 2:
return None
largest = second = float('-inf')
for n in nums:
if n > largest:
second = largest
largest = n
elif n > second and n != largest:
second = n
return second
Cái đầu tiên đúng với input được định dạng tốt nhưng gặp sự cố trên danh sách có ít hơn hai phần tử và cho câu trả lời sai trên các giá trị trùng như [5, 5, 3] (trả về 5, có thể sai tùy theo spec). Cái thứ hai dài hơn nhưng mọi dòng rubric — trường hợp đặc biệt, logic đúng, trả về đúng — đều rõ ràng và có dòng riêng để người chấm kiểm tra. Trên kỳ thi có giới hạn thời gian, phiên bản thứ hai ghi điểm cao hơn gần như mọi lúc, mặc dù mất nhiều thời gian hơn để gõ.
Đừng tối ưu hóa sớm, cũng đừng để lại lỗi rõ ràng
Các câu hỏi thi hiếm khi kiểm tra kiến thức Big-O trừ khi chúng nói rõ ràng. Nếu đề bài nói "viết một hàm tìm các giá trị trùng lặp," một vòng lặp lồng nhau ở O(n²) là được nếu đề bài không chỉ định input lớn hoặc yêu cầu giải pháp hiệu quả. Dành thời gian thi chuyển đổi sang cách tiếp cận dựa trên set ở O(n) khi không ai yêu cầu là thời gian bạn không lấy lại được.
Tuy vậy, một số lỗi sẽ luôn trừ bạn bất kể rubric:
- Sử dụng
==thay vìiskhông nhất quán gây lỗi logic (hiếm trong các kỳ thi Python nhưng xuất hiện trong những câu hỏi nặng so sánh) - Thay đổi danh sách khi lặp qua nó —
for x in lst: lst.remove(x)là một cái bẫy kỳ thi cổ điển tạo ra output sai lặng lẽ - Quên
returnvà in thay vào đó — nhiều autograder kiểm tra giá trị trả về, không phải stdout - Off-by-one trong
range()—range(len(nums))vsrange(len(nums) - 1)đáng kiểm tra lại mỗi lần bạn viết nó
Theo dõi code của bạn bằng tay trước khi nộp
Trên các bài thi giấy và hầu hết các kỳ thi lập trình trên trình duyệt, bạn không thể chạy code. Chọn một ví dụ nhỏ và theo dõi từng dòng, ghi lại giá trị biến khi tiến hành. Điều này bắt được khoảng 80% lỗi logic trong chưa đến hai phút, và đó là điều giá trị cao nhất bạn có thể làm với thời gian còn lại.
Đối với hàm đệ quy cụ thể, theo dõi ít nhất hai cấp sâu và ghi chú rõ ràng trường hợp cơ sở kết thúc. Những người chấm thường cho một điểm chỉ để chứng minh rằng trường hợp cơ sở kết thúc đúng, tách biệt với điểm cho trường hợp đệ quy đúng.
Quản lý đồng hồ như một tài nguyên, không phải một suy nghĩ sau cùng
Nếu một phần free-response trị giá 9 điểm trên ba câu hỏi con, ngân sách thời gian xấp xỉ bằng nhau và chuyển sang câu khác nếu bạn bị kẹt vượt quá ngân sách đó — một phần (b) nửa viết nhưng gần như chính xác sẽ đáng điểm thô hơn một phần (a) hoàn hảo và một phần (c) trống. Viết một hàm stub với chữ ký đúng và một pass hoặc một dự đoán ngay cả khi bạn không thể hoàn thành logic; chữ ký đúng một mình đôi khi được một điểm rubric riêng.
Để biết thêm về viết Python sạch, có thể kiểm tra được bên ngoài phòng thi, và về các cấu trúc dữ liệu xuất hiện liên tục trong những câu hỏi này, hãy xem các phần Python và Computer Science liên quan trên Korra Studio.
Viết với hỗ trợ của AI, được xem xét và đăng bởi Michal Pilch (CISSP), Korra Studio.
Đây là một ghi chép từ cơ sở kiến thức Korra Studio — nền tảng kết hợp mỗi chủ đề với phiên hỗ trợ 1-kèm-1.
Bắt đầu miễn phíarrow_forward