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