Kodowanie projektu w Pythonie, budowa modulowa, funkcje
ð Podstawa programowa: II.1+II.2Masz juz specyfikacje i pseudokod - teraz czas zamienic je w dzialajacy program. Kluczowa zasada: programuj modularnie - dziel kod na male, niezalezne funkcje.
Dobrze zorganizowany program sklada sie z funkcji, z ktorych kazda odpowiada za jedno konkretne zadanie:
# Struktura modulowa programu - Quiz edukacyjny
def wczytaj_pytania(nazwa_pliku):
"""Wczytuje pytania z pliku CSV."""
pytania = []
with open(nazwa_pliku, "r", encoding="utf-8") as f:
for linia in f:
czesci = linia.strip().split(";")
pytanie = {
"tresc": czesci[0],
"odpowiedzi": czesci[1:5],
"poprawna": czesci[5]
}
pytania.append(pytanie)
return pytania
def wyswietl_pytanie(pytanie, numer):
"""Wyswietla pytanie i opcje odpowiedzi."""
print(f"\nPytanie {numer}: {pytanie['tresc']}")
for i, odp in enumerate(pytanie['odpowiedzi']):
print(f" {chr(65+i)}) {odp}")
def sprawdz_odpowiedz(pytanie, odpowiedz):
"""Sprawdza, czy odpowiedz jest poprawna."""
return odpowiedz.upper() == pytanie['poprawna'].upper()
def zapisz_wynik(imie, wynik, maksymalny):
"""Zapisuje wynik do pliku."""
with open("wyniki.txt", "a", encoding="utf-8") as f:
f.write(f"{imie}: {wynik}/{maksymalny}\n")
def main():
"""Glowna funkcja programu."""
print("=== QUIZ EDUKACYJNY ===")
imie = input("Podaj swoje imie: ")
pytania = wczytaj_pytania("pytania.csv")
import random
random.shuffle(pytania)
punkty = 0
for i, pyt in enumerate(pytania, 1):
wyswietl_pytanie(pyt, i)
odp = input("Twoja odpowiedz (A/B/C/D): ")
if sprawdz_odpowiedz(pyt, odp):
print("Dobrze!")
punkty += 1
else:
print(f"Zle! Poprawna: {pyt['poprawna']}")
print(f"\nWynik: {punkty}/{len(pytania)}")
zapisz_wynik(imie, punkty, len(pytania))
if __name__ == "__main__":
main()
liczba_punktow zamiast x)def wczytaj_pytania(nazwa_pliku):
"""Wczytuje pytania z pliku z obsluga bledow."""
try:
with open(nazwa_pliku, "r", encoding="utf-8") as f:
pytania = []
for nr, linia in enumerate(f, 1):
czesci = linia.strip().split(";")
if len(czesci) != 6:
print(f"Ostrzezenie: linia {nr} ma zly format")
continue
pytania.append({
"tresc": czesci[0],
"odpowiedzi": czesci[1:5],
"poprawna": czesci[5]
})
return pytania
except FileNotFoundError:
print(f"Blad: Nie znaleziono pliku '{nazwa_pliku}'")
return []
except Exception as e:
print(f"Blad: {e}")
return []
Wiele projektow wymaga zapisu i odczytu danych z plikow. Pamietaj o uzywaniu encoding="utf-8" i instrukcji with:
# Zapis do pliku
with open("dane.txt", "w", encoding="utf-8") as f:
f.write("Linia tekstu\n")
# Odczyt z pliku
with open("dane.txt", "r", encoding="utf-8") as f:
zawartosc = f.read()
# Dopisywanie do pliku
with open("dane.txt", "a", encoding="utf-8") as f:
f.write("Nowa linia\n")
pass) i polacz je w main(). Potem stopniowo wypelniaj kazda funkcje kodem.
Stworz plik Python ze szkieletem swojego projektu. Zdefiniuj wszystkie planowane funkcje (z docstringami) i pass w ciele. Napisz funkcje main(), ktora wywoluje je w odpowiedniej kolejnosci.
Zaimplementuj najwazniejsza funkcje swojego projektu (np. wczytywanie danych lub glowna logike). Przetestuj ja oddzielnie, upewniajac sie, ze dziala poprawnie.
Zaimplementuj co najmniej 3 funkcje swojego projektu i polacz je w dzialajacy program. Program powinien juz wykonywac swoje glowne zadanie, nawet jesli brakuje mu dodatkowych funkcji.
Dodaj do swojego programu obsluge bledow: try/except dla operacji na plikach, walidacje danych wejsciowych od uzytkownika (np. sprawdzanie, czy podano liczbe, czy odpowiedz jest z dozwolonego zakresu).