Rozdział 13 · Automatyzacja z funkcjami

Refaktoryzacja projektów rozdziału 12

Weźmy trzy ukończone wersje poprzedniego rozdziału i przekłóńmy je z jednego długiego scenariusza w zestaw zrozumiałych funkcji, a zachowanie na zewnątrz pozostanie takie samo.

Refaktoryzacja: zmiana struktury, a nie zachowanie

Refaktoryzacja
Refaktoryzacja polega na poprawie wewnętrznej struktury programu bez celowego zmieniania jego działań zewnętrznych. Już widzieliśmy ten termin w rozdziale 12 (§12.9, Quiz) — tutaj stosujemy go do kilku projektów z rzędu.

Quiz

viktorina_do.py
# DO - Jeden długi scenariusz (Rozdział 12, §12.9)
score = 0
for q in questions:
    user_answer = input(q["question"] + " ").strip().lower()
    if user_answer == q["answer"]:
        score += 1
viktorina_posle.py
def ask_question(question):
    return input(question["question"] + " ").strip().lower()

def check_answer(user_answer, question):
    return user_answer == question["answer"]

def run_quiz(questions):
    score = 0
    for q in questions:
        user_answer = ask_question(q)
        if check_answer(user_answer, q):
            score += 1
    return score

Analizator tekstu

analizator_posle.py
def normalize_text(text):
    return text.lower().split()

def count_words(words):
    return len(words)

def count_unique(words):
    return len(set(words))

Notes

zapisnaya_knizhka_posle.py
def add_contact(contacts, name, phone):
    contacts[name] = phone

def find_contact(contacts, name):
    return contacts.get(name)

def remove_contact(contacts, name):
    del contacts[name]

Główny program staje się czytelnym opisem algorytmu

do_glavnaya.py
text = input(„Tekst: ”)
text = text.lower()
words = text.split()
count = len(words)
unique = set(words)
unique_count = len(unique)
counts = {}
for word in words:
    counts[word] = counts.get(word, 0) + 1
# ... Jeszcze 40 linijek ...
posle_glavnaya.py
text = input(„Tekst: ”)
clean = normalize_text(text)
stats = analyze_text(clean)
show_report(stats)
Główną zaletą refaktoryzacji jest czytelność na najwyższym poziomie
Właściwa wersja brzmi niemal jak zwykłe zdanie: „pobierz tekst, normalizuj, analizuj, pokaż raport.”
Challenge
Turtle też jest refaktoryzowany

Weź kod choinki lub mandali z rozdziału 12 i wydziel osobną funkcję dla jednego poziomu/promienia — dokładnie tak, jak studio wielokątów w §13.26 wydziela draw_polygon().

Praktyka: refaktoryzacja projektu z rozdziału 12
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →