Python • kurs podstawowy • lekcja 23
sum(), min(), max(), sorted(), any() i all()
Lista wyników może być gotowa, a potrzebujesz tylko podsumowania.
Twój cel: Podsumujesz kolekcję i wybierzesz między any() a all().Listy, bool i pętle.
Co ma zrobić program?
sum dodaje liczby, min wybiera najmniejszą, max największą. sorted tworzy nową uporządkowaną listę; oryginalna pozostaje w dotychczasowej kolejności. reverse=True odwraca porządek sortowania.
any odpowiada, czy choć jeden element jest interpretowany jako prawdziwy. all odpowiada, czy wszystkie są tak interpretowane. Zaczniemy od jawnej listy bool, aby odróżnić „przynajmniej jeden” od „wszyscy”. Nie trzeba jeszcze poznawać generatorów.
Dla pustej listy sum daje 0, sorted daje [], any daje False, a all True: nie znaleziono elementu łamiącego warunek. Nie oznacza to, że ktokolwiek przeszedł test. min i max bez dodatkowych ustawień zgłaszają ValueError dla pustej listy. Średnia wymaga sprawdzenia długości przed dzieleniem.
Przewidź przed uruchomieniem
numbers = [8, 3, 5]
ordered = sorted(numbers)
print(sum(numbers), min(numbers), max(numbers))
print(ordered)
print(numbers)
checks = [True, False, True]
print(any(checks), all(checks))
Porównaj wynik i prześledź mechanizm
numbers pozostanie [8, 3, 5], ordered to [3, 5, 8]. Suma, minimum i maksimum to 16, 3 i 8. any da True, bo są elementy True; all da False, bo występuje False.
Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:
16 3 8
[3, 5, 8]
[8, 3, 5]
True False
| Operacja | Wynik | Czy zmienia wejście? |
|---|---|---|
| sorted([8, 3, 5]) | [3, 5, 8] | nie |
| any([True, False, True]) | True | nie |
| all([True, False, True]) | False | nie |
Zmień działający program
Utwórz listę ocen logicznych score >= 5 za pomocą pętli i append. Potem sprawdź, czy wszyscy osiągnęli próg.
Pierwsza wskazówka
Zachowaj działający punkt wyjścia. Zlokalizuj konstrukcję wskazaną w poleceniu i zmień tylko ten etap. Przed uruchomieniem zapisz oczekiwany efekt.
Porównaj swoją modyfikację
scores = [8, 3, 5]
passed = []
for score in scores:
passed.append(score >= 5)
print(all(passed))
Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:
False
Znajdź przyczynę problemu
Celowo błędny przykład diagnostyczny. Najpierw postaw hipotezę. Nie kopiuj tej wersji jako poprawnego rozwiązania.
Zamierzone działanie: Obsłuż brak danych przed obliczeniem średniej.
numbers = []
print(sum(numbers) / len(numbers))
Trop do diagnozy
Porównaj zamierzony rezultat z typami, nazwami i kolejnością instrukcji. Wskaż pierwsze miejsce, w którym zachowanie odbiega od celu.
Zastosuj w nowej sytuacji
Wskazówka do rozpoczęcia
Dobierz funkcję do pytania. Sprawdź osobno brak danych i różnicę między „ktoś” a „wszyscy”.
Zacznij od przygotowania danych. Pierwsza instrukcja przykładowego rozwiązania:
temperatures = [18, 22, 20]
Rozwiązanie do samodzielnej kontroli
temperatures = [18, 22, 20]
if len(temperatures) == 0:
print("Brak danych")
else:
print(min(temperatures), max(temperatures))
print(sorted(temperatures, reverse=True))
Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:
18 22
[22, 20, 18]
Porównaj dane wejściowe, wynik i powód użycia konstrukcji. Inna wersja kodu jest poprawna, jeśli realizuje te same wymagania.
Co zabierasz do kolejnego programu?
Dobierz funkcję do pytania. Sprawdź osobno brak danych i różnicę między „ktoś” a „wszyscy”.
Bez zaglądania do przykładu wyjaśnij własnymi słowami, jak główna konstrukcja prowadzi od danych do wyniku. Potem sprawdź wyjaśnienie, uruchamiając swój program.