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

Podobne dokumenty