--- title: Python 4.2 --- ```python= import random """ W tym programie znajduje sie kilka prostych funkcji demonstrujacych operacje na listach. [!] oznacza, ze w danym miejscu konieczne jest dopisanie (ew. zmiana) istniejacego kodu. Prawidlowy wynik dzialania programu znajduje sie na stronie KNO """ def parzysta(n): return n % 2 == 0 # Ups, wszystkie liczby sa parzyste [!] # Po poprawieniu funkcja dalej powinna miec 1 wiersz # # Funkcje, ktore licza cos dla listy # def suma1(L): "Sumowanie elementow listy" wynik = 0 for element in L: wynik += element return wynik def suma2(L): "Sumowanie elementow listy, iteracja po indeksach. W funkcji jest drobny blad." wynik = L[0] for indeks in range(1, len(L)): wynik += L[indeks] return wynik def suma_parzystych(L): "Suma parzystych elementow listy. W tej funkcji rowniez jest blad. Powinienes skorzystac z funkcji parzysta" wynik = 0 for element in L: if parzysta(element): wynik += element return wynik # # Funkcje (procedury), ktore robia cos dla listy (ale nie modyfikuja listy) # def ze_spacjami(n, k): "Jak liczba n zajmuje mniej niz k znakow, to dodaje z tylu odpowiednia liczbe spacji (lub znakow '_' do wyboru)" s = str(n) length = len(s) if length < k: s += " " * (k - length) return s def histogram(L): "Wypisuje histogram dla listy L. Liczba z gwiazdkami nie powinna sie sklejac, gwiazdki powinny zaczynac sie w czwartej kolumnie" for liczba in L: print(ze_spacjami(str(liczba), 3) + "*" * liczba) # # Funkcje (procedury), ktore modyfikuja liste, bedaca argumentem # def powieksz_liczby(L): "funkcja powieksza wszystkie elementy listy L. Nie zwraca niczego istotnego (wywolujemy ja jako procedure)" for i in range(len(L)): L[i] += 1 def normalizuj(L): "funkcja odejmuje od kazdego elementu listy L srednia wartosc wszystkich elementow tej listy" srednia = sum(L) / len(L) for i in range(len(L)): L[i] -= srednia def znormalizowana(L): "Funkcja zwraca znormalizowana liste. Powinna wykorzystac funkcje znormalizuj, nie moze zmieniac swojego argumentu. W funkcji jest blad." normalizuj(L) return L # # Funkcje, ktore tworza nowe listy # def powiekszone_parzyste_z_zerami(L): """ Funkcja zwraca liste, w ktorej wszystkie parzyste liczby zostaja powiekszone o 1, a nieparzyste pominiete. Dodatkowo w wyniku po kazdej liczbie dodany jest dodatkowy element, rowny 0 """ wynik = [] for n in L: if parzysta(n): wynik.append(n + 1) # Jesli wolisz: wynik += [n+1] wynik.append(0) # Znowu, mozna: wynik += [0] return wynik def madrzejsza(L): """ Funkcja zwraca "madrzejsza" wersje listy L. Pomija w niej krotkie slowa (dlugosc <= 3), jako nie dosc madre, dodatkowo po kazdym slowie dodaje jakies madre slowo z listy madrych slow. Implementacja ponizej mocno rozmija sie ze specyfikacja. """ madre_slowa = ["istotnie", "zasadniczo", "rudymentalnie", "rustykalnie", "radykalnie", "hej"] wynik = [] wynik += L for i in range(len(L)): slowo = random.choice(madre_slowa) if len(slowo) > 3: wynik.append(slowo) return wynik ################################################################################### # Demonstracja dzialania ################################################################################### L = [1, 2, 3, 4, 5] print("Dla listy " + str(L) + " suma elementow rowna sie") print(suma1(L)) print(suma2(L)) print("Jak zsumujemy tylko parzyste, to otrzymamy") print(suma_parzystych(L)) print("") H = [1, 2, 3, 4, 5, 6, 7, 4, 8, 4, 8, 2, 2, 1, 10] print("Histogram dla listy " + str(H)) histogram(H) print("") print("Zaczynamy od " + str(L) + " i zwiekszamy 4 razy") powieksz_liczby(L); print(L) # raczej nie uzywamy srednikow, ale tu nie moglem sie powstrzymac powieksz_liczby(L); print(L) powieksz_liczby(L); print(L) powieksz_liczby(L); print(L) L = [1, 2, 3, 4, 5] L2 = L[:] print("") print("Zaczynamy od " + str(L2) + " i normalizujemy 3 razy") normalizuj(L2); print(L2) normalizuj(L2); print(L2) normalizuj(L2); print(L2) print("Dlaczego ciagle to samo?") print("O, i znowu:") print(znormalizowana(L)) print("Oczywiscie mamy " + str(L) + " == [1,2,3,4,5]") print("") print("Powiekszamy parzyste, pomijamy nieparzyste i wstawiamy 0 po") print(powiekszone_parzyste_z_zerami(L)) print("Cos madrego na zakonczenie:") Dane = "nauka programowania w pythonie wcale nie jest taka trudna".split() print(" ".join(madrzejsza(Dane))) ```