1 Struktury danych
Transkrypt
1 Struktury danych
1 Struktury danych 1.1 Listy Podstawy 1. Stwórz list¦ pust¡. Jaka jest jej warto±¢ boolowska? Jaka jest warto±¢ boolowska listy niepustej? 2. Stwórz list¦ kolejnych kwadratów kwadraty = [1, 4, 9, 16, 25] 3. Sprawd¹ w interpreterze co oznacza kwadraty[i] dla ró»nych indeksów i. 4. Dodaj do listy kwadraty liczb¦ 36. 5. Rozszerz kwadraty o list¦ [64, 70, 'to nie jest kwadrat', 91]. 6. Wstaw 49 na odpowiednie miejsce. 7. Usu« 'to nie jest kwadrat' korzystaj¡c z metody remove. 8. Usu« 75 korzystaj¦c z instrukcji del. 9. Podmie« warto±¢ 91 na 81 stosuj¡c przypisanie. 10. Ile elementów maj¡ kwadraty? 11. Korzystaj¡c w wycinania wy±wietl a) ostatni element listy; b) wszystko poza ostatnim; c) wszystko poza dwoma ostatnimi; d) trzy pierwsze; e) podlist¦ [36, 49, 64]. 12. Korzystaj¡c z wycinania podmie« w lst = [1, 2, 'a', 'b', 'c', 6, 7] podlist¦ ['a', 'b', 'c'] przez [3, 4, 5]. 13. Zmie« kolejno±¢ listy kwadraty na przeciwn¡. 14. Stwórz list¦ a) zawieraj¡c¡ 10 kopii ªa«cucha 'a'; b) kolejno 10 kopii ªa«cucha 'a' i 20 kopii ªa«cucha 'b'; c) stosuj¡c metod¦ count sprawd¹ ile razy w li±cie wyst¦puj¡ ªa«cuchy 'a' i 'b'; d) sprawd¹ dziaªanie metody index. 1 15. Przedstaw macierz 1 2 3 4 5 6 7 8 9 jako list¦ list. W jaki sposób dostajemy si¦ do elementów tej macierzy? Jak mo»emy je modykowa¢? 16. Wykonaj w interpreterze przypisania: lst = [1, 2, 3] lst_new = lst lst[1] = 'niespodzianka' Ile jest równa lst_new? 17. ...a teraz? lst = [1, 2, 3] lst_new = lst[:] lst[1] = 'kolejna niespodzianka' 18. Czym ró»ni si¦ metoda sort od wbudowanego polecenia sorted? Wykonaj testy w interpreterze. 19. Do czego sªu»y metoda pop? Jak to sprawdzi¢ korzystaj¡c z wbudowanej komendy help? 20. Stwórz list¦ zawieraj¡c¡ a) liczby od 1 do 100; b) dodatnie wielokrotno±ci 11 mniejsze ni» 1000; c) co pi¡t¡ liczb¦ od 100 do -100. Wyra»enia listowe 1. Przetestuj dziaªanie operatorów in, not in na listach. 2. Oblicz sum¦ wszystkich liczb naturalnych mniejszych ni» milion i b¦d¡cych kwadratami. Odp. 332833500. 3. Zbuduj list¦ zawieraj¡c¡ liczby naturalne a) mniejsze ni» 1000 i niepodzielne przez 3; b) mniejsze ni» 1000 i niepodzielne przez 7 i 11; c) mniejsze ni» 1000, podzielne przez 3 ale niepodzielne przez 7 i 11. 4. Zbuduj list¦ list zawieraj¡c¡ tabliczk¦ mno»enia. 2 1.2 Krotki (tuple) 1. Stwórz pust¡ krotk¦. Jaka jest jej warto±¢ boolowska? 2. Stwórz krotk¦ zawieraj¡c¡ jeden element. Jaka jest jej warto±¢ w terminach boolowskich? 3. Jak zamieni¢ krotk¦ na list¦ i odwrotnie? 4. Niech krotka = ([1, ' a'], 3). Co si¦ stanie po wykonaniu przypisania krotka[0][0] = 0? A w tym przypadku krotka[0] = [0, 'a'] lub krotka[1] = 4? 5. Wykonaj instrukcj¦ pon, wt, sr, czw, pt = 1, 2, 3, 4, 5 Co si¦ kryje pod zmiennymi pon, wt,...? 6. A w tym przypadku? imie, nazwisko, ocena, (dzien, miesiac, rok) = 'Adam', 'Mickiewicz', 5, (1, 1, 1850) 7. Wykonaj przypisanie a, b = 1, 1. Jak b¦d¡ si¦ zmienia¢ warto±ci a i b po kolejnych wykonaniach a, b = b, a+b? 1.3 Zbiory 1. Stwórz zbiór pusty. Jak tutaj wygl¡daj¡ warto±ci boolowskie? 2. Korzystaj¡c z konstruktora set usu« powtórzenia w li±cie [1, 1, 2, 2, 2, 3]. 3. Przetestuj dziaªanie metod zbiorów add, update, discard, remove, pop. 4. Niech s1 = set([1, 2, 3, 4, 5]), s2 = set([3, 4, 5, 6]). Przetestuj na s1 i s2 dziaªanie metod union, intersection, difference, symmetric_difference. 5. Wyznacz wszystkie liczby nie wi¦ksze od 106 , które s¡ jednocze±nie drugimi i trzecimi pot¦gami. 1.4 Sªowniki 1. Przetestuj warto±ci boolowskie dla sªowników. Zwró¢ uwag¦, »e instrukcja d = {} deniuje pusty sªownik a nie zbiór. 2. Ró»ne sposoby deniowania sªowników: 3 s0 = {'imie': 'Bartek', 'wiek': 800} s1 = dict(imie='Bartek', wiek=800) #Tutaj klucz musi byc lancuchem s2 = dict([('imie', 'Bartek'), ('wiek', 800)]) s3 = {} s3['imie'] = 'Bartek' s3['wiek'] = 800 3. Zbuduj sªownik skªadaj¡cy si¦ z par k: 10. k**2, gdzie k przebiega zakres od 1 do 4. Zbuduj sªownik zawieraj¡cy tabliczk¦ mno»enia. 5. Przetestuj dziaªanie metod sªowników keys, values, items. 6. Wykonaj instrukcje: sl = {'a': 1, 'b': 2} sl.get('a', 'brak litery') sl.get('c', 'brak litery') 7. Elementy sªownika mo»na usuwa¢ poleceniem del lub metodami pop, popitem. 1.5 a«cuchy znaków Listy, krotki i ªa«cuchy znaków zaliczamy do wi¦kszej klasy obiektów nazywanych sekwencjami. Elementy sekwencji s¡ ponumerowane (od zera, chyba »e sekwencja jest pusta) i ustawione w okre±lonym porz¡dku. Listy s¡ sekwencjami mutowalnymi, krotki i ªa«cuchy niemutowalnymi. 1. Sprawd¹, »e ªa«cuchy znaków obsªuguj¡ wyra»enia: a) indeksowania, b) konkatenacji, c) powtórzenia (brania wielokrotno±ci), d) brania wycinka, e) obliczania dªugo±ci, f) przynale»no±ci, g) iteracji. 2. Przetestuj dziaªanie metod ªa«cuchów: find, replace, split, lower, upper, title, strip. 3. Jakie warto±ci w kodzie ASCII maj¡ znaki 'A' i 'Z'? U»yj funkcji ord. 4. Stwórz list¦ litery zawieraj¡c¡ wszystkie du»e litery ªaci«skie w kolejno±ci alfabetycznej. Wykorzystaj funkcj¦ chr i wyra»enie listowe. 4 5. U»yj metody join do stworzenia ªa«cucha zawieraj¡cego wszystkie du»e litery ªaci«skie odzielone przecinkiem i spacj¡. 2 Pierwsze programy. Operacje wej±cia wyj±cia Przykªad 1. Witaj ±wiecie! print('Witaj swiecie') Przykªad 2. ita. Program przeliczaj¡cy temperatur¦ mi¦dzy skalami Celsjusza i Fahrenhe- print('''Program dokonuje konwersji temperatury miedzy skalami Celsjusza i Fahrenheita. Podaj kierunek konwersji''') kierunek = input('F-->C (podaj F), C-->F (podaj C): ').lower() while kierunek not in ['f', 'c']: kierunek = input('Podaj F lub C: ').lower() temp = float(input('Podaj temperature: ')) if kierunek == 'F': temp1 = (temp-32)*5/9 print(temp, '\u00b0F = ', round(temp1, 1), '\u00b0C') else: temp1 = 32 + 9/5*temp print(temp, '\u00b0C = ', round(temp1, 1), '\u00b0F') 5 Prosty kalkulator. dodaj = lambda a, b: a + b odejmij = lambda a, b: a - b pomnoz = lambda a, b: a * b podziel = lambda a, b: a / b Przykªad 3. dzialania = {'+': dodaj, '-': odejmij, '*': pomnoz, '/': podziel} print('Wykonam jedno z czterech dzialan na liczbach calkowitych a i b.') koniec = False while not koniec: a = int(input('Podaj a: ')) b = int(input('Podaj b: ')) dz = input('Wybierz rodzaj dzialania (+, -, *, /): ') wynik = dzialania[dz](a, b) if dz == '/': odp = '%d %s %d = %.2f' % (a, dz, b, wynik) else: odp = '%d %s %d = %d' % (a, dz, b, wynik) print(odp) czy_dalej = input('Chcesz wykonac kolejne rachunki (t/n)? ').lower() if czy_dalej == 'n': koniec = True wiczenie 1. Napisz program, który pobiera od u»ytkownika rok i nazw¦ miesi¡ca a nast¦pnie wypisuje dªugo±¢ tego miesi¡ca w dniach. Uwzgl¦dnij lata przest¦pne. wiczenie 2. Kelwina. Zmodykuj program z przykªadu 2, tak aby obsªugiwana te» byªa skala U»ywaj¡c klucza ma-li-no-we-bu-ty mo»na zaszyfrowa¢ wiadomo±¢ wymieniaj¡c znaki le»¡ce wewn¡trz tych samych sylab klucza: m → a, a → m, l → i, i → l, itd. Znaki, których nie ma w kluczu pozostawia si¦ bez zmian. Przykªadowo tekst ziemia jest pªaska wymaga wymienienia 9 znaków i po zaszyfrowaniu ma posta¢ zlwalm jwsy pªmskm. Powtórne zaszyfrowanie przywraca pierwotn¡ posta¢ tekstu. Napisz program, który pobiera od u»ytkownika ªa«cuch a nast¦pnie wy±wietla go w postaci zaszyfrowanej. wiczenie 3. Napisz program szyfruj¡cy, analogiczny do tego w zadaniu 3, ale tym razem klucz ma by¢ wprowadzany przez u»ytkownika. Program powinien sprawdza¢, czy klucz jest poprawny: je±li tak, to jest on u»yty do szyfrowania tekstu, je±li nie, to program informuje o tym fakcie u»ytkownika a nast¦pnie u»ywa domy±lnego klucza malinowebuty. wiczenie 4. wiczenie 5. Zmodykuj program z zadania 4 tak, aby szyfrowaª caªy plik tekstowy. Napisz program zliczaj¡cy, ile jest w danym pliku tekstowym linii, zda«, sªów i liter. Przyjmujemy, »e zdanie zawsze ko«czy si¦ kropk¡, znakiem zapytania lub wykrzyknikiem. wiczenie 6. 6 Uczony (powiedzmy pan N.) obserwuje ruch »uczka na pªaskiej powierzchni z zaznaczonym ukªadem kartezja«skim. Pan N. jest zainteresowany dªugo±ci¡ drogi jak¡ pokona »uczek podczas obserwacji. W zwi¡zku z tym uczony w równych odst¦pach czasu odczytuje wspóªrz¦dne opisuj¡ce aktualne poªo»enie »uczka, a nast¦pnie dopisuje je do pliku zuczek.txt w postaci dwóch liczb rzeczywistych w jednej linii i oddzielonych spacj¡. Przykªadowa posta¢ pliku: wiczenie 7. 0 0 1 . 5 −1 2 . 3 − 0.5 Pan N. za dobre przybli»enie drogi pokonanej przez »uczka b¦dzie uwa»aª sum¦ odlegªo±ci mi¦dzy kolejnymi poªo»eniami »uczka zapisanymi w pliku. Nale»y napisa¢ program, który wczytuje plik zuczek.txt, a nast¦pnie oblicza i zwraca t¦ sum¦ zaokr¡glon¡ do dwóch miejsc po przecinku. Dla powy»szych danych odpowiedzi¡ b¦dzie 2.75. Podana ni»ej funkcja korzysta z moduªu turtle aby modelowa¢ ruch »uczka. Wspóªrz¦dne s¡ zapisywane do pliku zuczek.txt. import import def random turtle b l a d z e n i e ( kat_widzenia = 4 0 , k r o k i =[0 , 2 , 4 ] ) : with open ( ' z u c z e k . t x t ' , 'w ' ) a s z a p i s : z a p i s . w r i t e ( ' 0 0\n ' ) zuczek = t u r t l e . Turtle ( ) f o r i i n range ( 1 0 0 ) : krok = random . c h o i c e ( k r o k i ) ; kat = kat_widzenia ∗ ( random . random ( ) − 0 . 5 ) z u c z e k . f o r w a r d ( krok ) z u c z e k . r i g h t ( kat ) x , y = zuczek . xcor ( ) , zuczek . ycor ( ) z a p i s . w r i t e ( '%f %f \n ' % ( x , y ) ) Strona stooq.pl zawiera historyczne notowania gieªdowe rozmaitych spóªek w plikach formatu csv. Pan Kowalski, który jest analitykiem nansowym, jest czasem ciekawy jak wygl¡da ±redni kurs akcji spóªki za caªy rok. Nale»y napisa¢ program, który b¦dzie udzielaª odpowiedzi na to pytanie. Na wej±ciu program pyta u»ytkownika o nazw¦ pliku zawieraj¡cego dane w formacie csv (zakªadamy, »e dane te s¡ ju» na dysku) oraz rok. Je»eli w roku tym spóªka nie emitowaªa »adnych akcji, to program o tym informuje i ko«czy dziaªanie. W przeciwnym razie drukuje ±redni¡ arytmetyczn¡ cen akcji z tego roku. Jako cen¦ akcji za dany okres przyj¡¢ median¦ z ceny otwarcia, zamkni¦cia, maksymalnej i minimalnej. wiczenie 8. Plik populationbycountry19802010millions.csv zawiera liczb¦ ludno±ci w milionach dla ró»nych krajów ±wiata za lata 1980 2010. wiczenie 9. 7 1. Napisz program znajduj¡cy te kraje, które wykazuj¡ najwi¦kszy i najmniejszy wzgl¦dny przyrost ludno±ci od roku 1980 do 2010. We¹ pod uwag¦ tylko te kraje, które maj¡ kompletny zestaw danych. 2. Napisz program zwracaj¡cy N kolejnych pa«stw o najwi¦kszej (najmniejszej) populacji danego roku. 8