Programowanie na egzamin: Odpowiedzi w Pythonie, które zdobywają punkty
Jak pisać kod Python na egzaminach, aby naprawdę zdobyć pełną punktację — struktura, przypadki brzegowe i zarządzanie czasem pod presją.
Egzaminatorzy nie uruchamiają twojego kodu w debugerze przez dwadzieścia minut. Czytają go raz, może dwa razy, i sprawdzają względem schematu punktacji. Rozwiązanie, które działa, ale ignoruje schemat, może stracić punkty, podczas gdy nieco mniej dopracowane, które spełnia każdy punkt kontrolny, może uzyskać wyższy wynik. Pisanie Python do egzaminu to inna umiejętność niż pisanie Python do rzeczywistego projektu i warto ćwiczyć ją osobno.
Przeczytaj schemat punktacji zanim przeczytasz zadanie po raz drugi
Większość egzaminów z programowania — pytania otwarte w stylu AP CS A, kolokwia na uniwersytetach, oceny w bootcampach kodowania — publikuje reguły punktacji częściowej. Typowy wiersz schematu wygląda tak: "1 punkt za prawidłową strukturę pętli, 1 punkt za prawidłową wartość zwracaną, 1 punkt za obsługę przypadku pustej listy." Jeśli napiszesz gęstą jednolinijkę, która daje prawidłową odpowiedź, ale pomija jawną pętlę, niektórzy egzaminatorzy odejmą ci punkty, mimo że wynik jest poprawny.
Zanim zaczniesz pisać, zidentyfikuj elementy, które egzaminator będzie prawdopodobnie sprawdzać osobno:
- Sygnatura funkcji odpowiada dokładnie temu, co zostało poproszone (nazwa, kolejność parametrów, typ zwracany)
- Przypadek bazowy i przypadek rekurencyjny, jeśli oczekuje się rekursji
- Granice pętli (błędy off-by-one to najczęstsza strata punktów)
- Przypadki brzegowe: puste wejście, wejście z jednym elementem, liczby ujemne, duplikaty
Zapisz je najpierw jako komentarze. # handle empty list, # base case: n == 0. To zajmuje dziesięć sekund i gwarantuje, że nie zapomnisz przypadku, który egzaminator specjalnie szuka.
Strukturuj kod, aby punktacja częściowa była widoczna
Porównaj dwie odpowiedzi na pytanie "napisz funkcję zwracającą drugą największą liczbę na liście":
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
Pierwsza jest poprawna dla dobrze sformułowanego wejścia, ale pada na liście z mniej niż dwoma elementami i daje złą odpowiedź na duplikaty takie jak [5, 5, 3] (zwraca 5, co jest kwestionowane w zależności od specyfikacji). Druga jest dłuższa, ale każdy punkt ze schematu — przypadek brzegowy, prawidłowa logika, prawidłowy zwrot — jest jawny i ma własną linię, którą egzaminator może oznaczyć. Na egzaminie z czasem ograniczonym druga wersja prawie zawsze zdobywa więcej punktów, choć pisanie jej zajmuje więcej czasu.
Nie optymalizuj przedwcześnie, ale też nie zostaw oczywistych błędów
Pytania egzaminacyjne rzadko testują wiedzę Big-O, chyba że mówią o tym wprost. Jeśli polecenie mówi "napisz funkcję, która znajduje duplikaty", zagnieżdżona pętla O(n²) jest w porządku, chyba że polecenie określa duże wejście lub prosi o efektywne rozwiązanie. Poświęcanie czasu egzaminu na konwersję do podejścia opartego na zbiorze O(n), gdy nie było to proszone, to czas, który nie odzyskasz.
Powiedziawszy to, niektóre błędy zawsze cię będą kosztować, niezależnie od schematu:
- Używanie
==zamiastispowodujące błędy logiki (rzadko na egzaminach Python, ale pojawia się w pytaniach pełnych porównań) - Mutowanie listy podczas iteracji po niej —
for x in lst: lst.remove(x)to klasyczna pułapka egzaminacyjna, która produkuje cicho błędne wyniki - Zapomnienie
returni drukowanie zamiast tego — wiele autograderów sprawdza wartości zwracane, nie stdout - Off-by-one w
range()—range(len(nums))vsrange(len(nums) - 1)warto sprawdzić za każdym razem, gdy to napiszesz
Przeanalizuj swój kod ręcznie przed wysłaniem
Na egzaminach papierowych i większości egzaminów kodowania w przeglądarce nie możesz uruchamiać kodu. Wybierz jeden mały przykład i analizuj go linia po linii, zapisując wartości zmiennych w trakcie. To wyłapuje może 80% błędów logiki w poniżej dwie minuty, i to jest najwartościowsza rzecz, którą możesz zrobić z pozostałym czasem.
Dla funkcji rekurencyjnych przeanalizuj co najmniej dwa poziomy głębokości i jawnie napisz osiągnięty przypadek bazowy. Egzaminatorzy często przydzielają punkt tylko za wykazanie, że przypadek bazowy kończy się prawidłowo, oddzielnie od punktu za poprawność przypadku rekurencyjnego.
Zarządzaj czasem jak zasobem, nie jako czymś drugorzędnym
Jeśli sekcja otwartych pytań warta jest 9 punktów w trzech podpytaniach, zaplanuj mniej więcej równy czas i przejdź dalej, jeśli utknąłeś poza tym czasem — niedokończona, ale prawie poprawna część (b) jest warta więcej surowych punktów niż idealna część (a) i pusta część (c). Napisz funkcję prototypową z prawidłową sygnaturą i pass lub domysł, nawet jeśli nie możesz skończyć logiki; sama prawidłowa sygnatura jest czasem warta punktu ze schematu.
Więcej na temat pisania czystego, testowalnego Python poza salą egzaminacyjną oraz struktur danych, które stale pojawiają się w tych pytaniach, znajdziesz w powiązanych segmentach Python i Computer Science na Korra Studio.
Napisane z pomocą AI, zweryfikowane i opublikowane przez Michal Pilch (CISSP), Korra Studio.
To jedna notatka z bazy wiedzy Korra Studio — platforma łączy każdy temat z mentoringiem 1 na 1.
Zacznij za darmoarrow_forward