http://math.uni.lodz.pl/~rodakt/geoinformacja/15_miast.csv http
Transkrypt
http://math.uni.lodz.pl/~rodakt/geoinformacja/15_miast.csv http
1 Zapisa¢ na dysku (w katalogu w którym piszemy programy pythonowe) plik http://math.uni.lodz.pl/~rodakt/geoinformacja/15_miast.csv Plik ten zawiera list¦ 15 najwi¦kszych miast Europy. Pierwsza linia pliku to nagªówek. Separatorem pola jest tabulator ('\t'). (a) Napisa¢ program, który wy±wietli zawarto±¢ pliku. (b) Stworzy¢ nowy plik 15_miast_kropka.csv, w którym wszystkie przecinki dziesi¦tne zostaj¡ podmienione na kropki. (c) Napisa¢ program, który wy±wietla nagªówek oraz linie tabeli opisuj¡ce miasta o liczbie ludno±ci mieszcz¡cej si¦ w zadanym przedziale. W kolumnie Miejsce nale»y zastosowa¢ now¡ numeracj¦. (d) Wy±wietli¢ tabel¦ wraz z dodatkow¡ kolumn¡ Nadwy»ka, która jest ró»nic¡ liczby ludno±ci w zespole miejskim i w mie±cie. (e) Wy±wietli¢ tabel¦ posortowan¡ malej¡co ze wzgl¦du na liczb¦ ludno±ci zamieszkuj¡cej zespóª miejski. 2 Podobnie jak wy»ej, zapisa¢ na dysku plik http://math.uni.lodz.pl/~rodakt/geoinformacja/kghm.txt Plik ten zawiera list¦ notowa« gieªdowych spóªki KGHM. Format pliku to csv, pozycje oddzielone s¡ przecinkami. Druga i trzecia kolumna zawiera odpowiednio dat¦ i cen¦ otwarcia. (a) Zbudowa¢ sªownik, którego klucze to daty, a warto±ci to ceny otwarcia. (b) Napisa¢ funkcj¦ cena(data), która zwraca cen¦ otwarcia dla daty data, o ile klucz data istnieje. W przeciwnym razie funkcja zwraca False. (c) Napisa¢ funkcj¦ zysk(data_kupna, data_sprzedazy, liczba_akcji), która zwraca zysk na podstawie daty kupna, sprzeda»y i ilo±ci akcji. Je±li daty kupna lub sprzeda»y nie ma w±ród kluczy, to funkcja powinna informowa¢ o tym u»ytkownika. (d) Napisa¢ funkcj¦ srednia(rok), która zwraca ±redni¡ cen¦ otwarcia za rok rok. 3 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. (a) Napisa¢ funkcj¦ szyfruj(lancuch) przyjmuj¡c¡ jako argument ªa«cuch znaków, a zwracaj¡c¡ ªa«cuch zaszyfrowany wedªug powy»szego schematu. Warto wcze±niej napisa¢ funkcj¦ szyfruj¡c¡ pojedy«czy znak. (b) Uogólnienie: Napisa¢ funkcj¦ szyfruj(lancuch, klucz). Argument lancuch, to ªa«cuch, który ma by¢ zaszyfrowany, argument klucz, to te» ªa«cuch, który ma peªni¢ rol¦ klucza analogicznie do wy»ej podanego 'malinowebuty'. a«cuch klucz musi speªnia¢ nast¦puj¡ce dwa warunki: by¢ niezerowej, parzystej dªugo±ci i nie zawiera¢ repetycji. W funkcji szyfruj nale»y u»y¢ funkcji testuj¡cej, czy dany klucz speªnia wymienione warunki. Je±li tak, to funkcja nic nie zwraca (czyli zwraca None); je±li nie, to funkcja wywoªuje wyj¡tek ValueError z czytelnym komentarzem. 1 4 Zaimplementuj gr¦ Losowy NIM. Zasady s¡ nast¦puj¡ce. Na stosie le»¡ 23 kamienie. Uczestnicy, w tym przypadku komputer i czªowiek, pobieraj¡ na zmian¦ ze stosu 1, 2, 3 lub 4 kamienie. Czªowiek pobiera kamienie wedªug swego uznania, natomiast komputer ich liczb¦ losuje. Gr¦ wygrywa ten kto zabierze ostatnie kamienie ze stosu, tak »e przeciwnik nie mo»e ju» wykona¢ ruchu. Przed rozpocz¦ciem gry komputer powinien pyta¢, kto wykonuje pierwszy ruch, a na zako«czenie informowa¢, kto wygraª. 5 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: 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 random import t u r t l e d e f b l a d z e n i e ( kat_widzenia = 40 , k r o k i =[0 , 2 , 4 ] ) : z a p i s = open ( ' zuczek . txt ' , 'w' ) z a p i s . w r i t e ( ' 0 0\n ' ) zuczek = t u r t l e . T u r t l e ( ) 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 ) zuczek . forward ( krok ) zuczek . 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 ) ) 6 Napisa¢ funkcj¦ basename(sciezka, sufiks, separator). Argument sciezka, to ªa«cuch, który ma by¢ ±cie»k¡ dost¦pu. Pozycje w ±cie»ce mog¡ by¢ rozdzielone tak slashem ('/') jak i backslashem ('\'). separator jest domy±lnie ustawiony na '\' ale dopuszcza te» warto±¢ '/'. Argument sufiks jest ªa«cuchem i jest domy±lnie ustawiony na pusty ªa«cuch. Funkcja basename zwraca fragment ªa«cucha sciezka wyst¦puj¡cy po ostatnim lub po przedostatnim separatorze w zale»no±ci od tego czy ±cie»ka ko«czy si¦ separatorem czy nie. Je±li sufiks jest niepusty i wyst¦puje faktycznie jako suks w ±cie»ce, to te» jest pomijany. Przykªady: basename ( ' / home/tomek/Dokumenty / ' ) ' Dokumenty ' basename ( ' Dokumenty/ tex / r e d u c t i o n . tex ' ) 2 ' r e d u c t i o n . tex ' basename ( ' Dokumenty/ tex / r e d u c t i o n . tex ' , s u f i k s = '. tex ' ) ' reduction ' 3