• Nie Znaleziono Wyników

Etap 1: Listy i krotki Listy

N/A
N/A
Protected

Academic year: 2021

Share "Etap 1: Listy i krotki Listy"

Copied!
7
0
0

Pełen tekst

(1)

Etap 1: Listy i krotki Listy

Listy są jednym z najważniejszych typów danych. Można się z nimi spotkad w Visual Basicu. W tym języku są określane jako tablice.

Definiowanie list

li=["a","b","mpilgrim","z","przykład"] #(1) print li

efekt:

[’a’,’b’,’mpilgrim’,’z’,’przykład’]

print li[0] #(2)

efekt:

’a’

print li[4] #(3)

efekt:

’przykład’

1. Najpierw zdefiniowaliśmy listę pięcioelementową. Zauważmy, że lista zachowuje swój oryginalny porządek i nie jest to przypadkowe. Lista jest uporządkowanym zbiorem elementów ograniczonym nawiasem kwadratowym.

2. Lista może byd używana tak jak tablica zaczynająca się od 0.Pierwszymelementem niepustej listy o nazwie li jest zawsze li[0].

3. Ostatnim elementem pięcioelementowej listy jest li*4+,ponieważ indeksy są liczone zawsze od 0.

Ujemne indeksy w listach

print li

[’a’,’b’,’mpilgrim’,’z’,’przykład’]

print li[-1] #(1)

’przykład’

print li[-3] #(2)

’mpilgrim’

1. Za pomocą ujemnych indeksów odnosimy się do elementów idących od kooca do początku tzn. li[-1] oznacza ostatni element, li[- 2] przedostatni, li[-3] odnosi się do3 od kooca elementu itd. Ostatnim elementem niepustej listy jest zawsze li[-1].

2. Jeśli ciężko ci zrozumied o co w tym wszystkim chodzi, możesz pomyśled o tym w tens posób: li[-n]==li[len(li)-n].

len to funkcja zwracająca ilośd elementów listy. Tak więc w tym przypadku:

li[-3]==li[5-3]==li[2].

Wycinanie list print li

[’a’,’b’,’mpilgrim’,’z’,’przyklad’]

print li[1:3] #(1)

[’b’,’mpilgrim’]

print li[1:-1] #(2)

[’b’,’mpilgrim’,’z’]

print li[0:3] #(3)

[’a’,’b’,’mpilgrim’]

1. Możesz pobrad podzbiór listy, który jest nazywany “wycinkiem”(ang. slice), poprzez określenie dwóch indeksów. Zwracaną wartością jest nowa lista zawierająca wszystkie elementy z listy rozpoczynające się od pierwszego wskazywanego indeksu (w tym przypadku li*1+) i idąc w górę kooczy na drugim wskazywanym indeksie, niedołączającego (w tym przypadku li*3+).

Kolejnośd elementów względem wcześniejszej listy jest także zachowana.

2. Możemy także podad ujemną wartośd któregoś indeksu. Wycinanie wtedy także dobrze zadziała. Jeśli to pomoże, możemy pomyśled tak: czytamy listę od lewej do prawej, pierwszy indeks określa pierwszy potrzebny element, a drugi określa element, którego nie chcemy. Zwracana wartośd zawiera wszystko między tymi dwoma przedziałami.

(2)

3. Listy są indeksowane od zera tzn. w tym przypadku li*0:3+ zwraca pierwsze trzy elementy listy, rozpoczynając od li*0+,a koocząc na li*2+, ale nie dołączając li*3+.

Dodawanie elementów do listy print li

[’a’,’b’,’mpilgrim’,’z’,’przykład’]

li.append("nowy") #(1)

print li

[’a’,’b’,’mpilgrim’,’z’,’przykład’,’nowy’]

li.insert(2,"nowy") #(2)

print li

[’a’,’b’,’nowy’,’mpilgrim’,’z’,’przykład’,’nowy’]

li.extend(["dwa","elementy"]) #(3)

print li

[’a’,’b’,’nowy’,’mpilgrim’,’z’,’przykład’,’nowy’,’dwa’,’elementy’]

1. Dodajemy pojedynczy element do kooca listy za pomocą metody append.

2. Za pomocą insert wstawiamy pojedynczy element do listy. Numeryczny argument jest indeksem, pod którym ma się znaleźd wstawiana wartośd; reszta elementów, która znajdowała się pod tym indeksem lub miała większy indeks, zostanie przesunięta o jeden indeks dalej. Zauważmy, że elementy w liście nie muszą byd unikalne i mogą się powtarzad; w przykładzie mamy dwa oddzielne elementy z wartością ’nowy’ – li[2] i li[6].

3. Za pomocą extend łączymy listę z inną listą. Nie możemy wywoład extend z wieloma argumentami, trzeba ją wywoływad z pojedynczym argumentem–listą. W tym przypadku ta lista ma dwa elementy.

Przeszukiwanie list print li

[’a’,’b’,’nowy’,’mpilgrim’,’z’,’przykład’,’nowy’,’dwa’,’elementy’]

print li.index("przykład") #(1)

5

print li.index("nowy") #(2)

2

print li.index("c") #(3)

Traceback(mostrecentcalllast):

File"<stdin>",line1,in?

ValueError:list.index(x):x not in list

print "c" in li #(4)

False

1. index znajduje pierwsze wystąpienie pewnej wartośd w liście i zwracajego indeks.

2. index znajduje pierwsze wystąpienie wartości w liście. W tym przykładzie, ’nowy’ występuje dwa razy–w li[2] i li[6],ale metoda index będzie zawsze zwracad pierwszy indeks, czyli 2.

3. Jeśli wartośd nie zostanie znaleziona, Python zgłosi wyjątek. Takie zachowanie nie jest często spotykane w innych językach, w wielu językach w takich przypadkach zostaje zwrócony niepoprawny indeks. Takie zachowanie Pythona jest dosyd dobrym

posunięciem, ponieważ umożliwia szybkie wychwycenie błędu w kodzie, a dzięki temu program nie będzie błędnie działał operując na niewłaściwym indeksie.

4. Aby sprawdzid czy jakaś wartośd jest w liście używamy słowa kluczowego in, który zwraca True, jeśli wartośd zostanie znaleziona lub False jeśli nie.

Usuwanie elementów z listy print li

[’a’,’b’,’nowy’,’mpilgrim’,’z’,’przykład’,’nowy’,’dwa’,’elementy’]

li.remove("z") #(1)

print li

[’a’,’b’,’nowy’,’mpilgrim’,’przykład’,’nowy’,’dwa’,’elementy’]

li.remove("nowy") #(2)

print li

[’a’,’b’,’mpilgrim’,’przykład’,’nowy’,’dwa’,’elementy’]

li.remove("c") #(3)

Traceback(mostrecentcalllast):

File"<stdin>",line1,in?

ValueError:list.remove(x):x not in list

print li.pop() #(4)

’elementy’

(3)

print li

[’a’,’b’,’mpilgrim’,’przykład’,’nowy’,’dwa’]

1. remove usuwa pierwszą występującą wartośd w liście.

2. remove usuwa tylko pierwszą występującą wartośd. W tym przypadku ’nowy’ Występuje dwa razy, ale li.remove("nowy") usuwa tylko pierwsze wystąpienie.

3. Jeśli wartośd nie zostanie znaleziona w liście , Python wygeneruje wyjątek. Naśladuje on w takich sytuacjach postępowanie metody index.

4. pop jest ciekawą metodą, która wykonuje dwie rzeczy: usuwa ostatni element z listy i zwraca jego wartośd. Metoda ta różni się od li[-1] tym, że li*-1] zwraca jedynie wartośd, ale nie zmienia listy, a od li.remove(value) tym, że li.remove(value) zmienia listę, ale nie zwraca wartości.

Krotki

Krotka(ang. tuple) jest niezmienną listą. Zawartośd krotki określamy tylko podczas jej tworzenia. Potem nie możemy już jej zmienid.

Definiowanie krotki

t=("a","b","mpilgrim","z","element") #(1) print t

(’a’,’b’,’mpilgrim’,’z’,’element’)

print t[0] #(2)

’a’

print t[-1] #(3)

’element’

print t[1:3] #(4)

(’b’,’mpilgrim’)

1. Krotki definiujemy w identyczny sposób jak listę, lecz z jednym wyjątkiem–zbiór elementów jest ograniczony w nawiasach okrągłych, zamiast w kwadratowych.

2. Podobnie jak w listach, elementy w krotce mają określony porządek. Są one indeksowane od 0,więc pierwszym elementem w niepustej krotce jest zawsze t[0].

3. Ujemne indeksy idą od kooca krotki, tak samo jak w listach.

4. Krotki także można wycinad. Kiedy wycinamy listę, dostajemy nową listę. Podobnie, gdy wycinamy krotkę dostajemy nową krotkę.

Dzielenie łaocuchów znaków

li=[’pwd=secret’,’database=master’,’uid=sa’,’server=mpilgrim’]

s=";".join(li) print s

’pwd=secret;database=master;uid=sa;server=mpilgrim’

print s.split(";") #(1)

[’pwd=secret’,’database=master’,’uid=sa’,’server=mpilgrim’]

print s.split(";",1) #(2)

[’pwd=secret’,’database=master;uid=sa;server=mpilgrim’]

1. split, przeciwieostwo funkcji join, dzieli łaocuch znaków na wieloelementową listę. Separator(w przykładzie ‘‘;’’) nie będzie występował w żadnym elemencie zwracanej listy, zostanie pominięty.

2. Do funkcji split możemy dodad opcjonalny drugi argument, który określa, na jaką maksymalną liczbę kawałków ma zostad podzielony łaocuch.

tekst.split(separator,1) – jest przydatnym sposobem dzielenia łaocucha na dwa fragmenty. Pierwszy fragment dotyczy łaocucha znajdującego się przed pierwszym wystąpieniem separatora (jest on pierwszym elementem zwracanej listy), a drugi fragment zawiera dalszy fragment łaocucha znajdującego się za pierwszym znalezionym separatorem (jest drugim elementem listy). Dalsze separatory nie są brane pod uwagę.

Kodowanie znaków: Znaki jako liczby i na odwrót

print ord(’a’) #(1)

97

print chr(99) #(2)

(4)

’c’

print ord(’%’)

37 #(3)

print chr(115)

’s’

print chr(261)

Traceback(mostrecentcalllast): #(4) File"<stdin>",line1,in?

ValueError:chr()argnotinrange(261) print chr(188)

’\xbc’ #(5)

1. Funkcji ord zwraca liczbę, która odpowiada danemu symbolowi. W tym przypadku literze “a” odpowiada liczba 97.

2. Za pomocą funkcji chr dowiadujemy się, jaki znak odpowiada danej liczbie. Liczbie 99 odpowiada znak “c”.

3. Procent(“%”) odpowiada liczbie 37.

4. Każdy symbol odpowiada liczbie z zakresu od 0 do 255. Liczba 261 nie mieści się w jednym bajcie, dlatego wyskoczył nam wyjątek.

5. Co prawda liczba 188 mieści się w 8-bitach, ale nie mieści się w standardzie ASCII i dlatego tego symbolu Python nie może jednoznacznie zinterpretowad. W systemie kodowania ISO8859-2 liczba ta odpowiada znakowi “ź”, ale w systemie

Kodowania Windows-1250 (znany też jako CP-1250) znakowi “ˇ L”.

Unikod w Pythonie

print ord(u"ą")

261 #(1)

print unichr(378) #(2)

1. W unikodzie polski znak“ą” jednoznacznie odpowiada cyfrze 261.

2. Za pomocą funkcji unichr, dowiadujemy się jakiemu znakowi odpowiada dana liczba. Liczbie 378 odpowiada polska litera “ź”.

Python automatycznie zakoduje wypisywany napis unikodowy, aby został poprawnie wyświetlony na naszym systemie.

Łaocuchy znaków

Metody Listy

list(s) - konwertuje sekwencję s na listę

s.append(x) - dodaje nowy element x na koocu s

s.count(x) - zlicza wystąpienie x w s

s.index(x) - zwraca najmniejszy indeks i, gdzie s[i] == x

s.pop([i]) - zwraca i-ty element i usuwa go z listy. Jeżeli nie podamy parametru to usunięty zostanie ostatni element

s.remove(x) - odnajduje x i usuwa go z listy s

s.reverse() - odwraca w miejscu kolejnośd elementów s

s.sort([funkcja]) - Sortuje w miejscu elementy. "funkcja" to funkcja porównawcza

 s.find(s1) – szuka gdzie w lancuchu s wystapil lancuch s1

Metody Napisowe

s.capitalize() - zmienia pierwszą literę na dużą

s.center(długośd) - Centruje napis w polu o podanej długości

s.count(sub) - zlicza wystąpienie podciągu sub w napisie s

s.isalnum() - sprawdza czy wszystkie znaki są alfanumeryczne (a więc: cyfry i litery "a"-"z", "A"-"Z", "0"-"9")

s.isdigit() - sprawdza czy wszystkie znaki są cyframi

s.islower() - sprawdza czy wszystkie litery są małe

s.isupper() - sprawdza czy wszystkie litery są duże

s.join(t) - łączy wszystkie napisy na liście t używając s jako separatora

l = ['a', 'b', 'c']

s = '.'

(5)

print s.join(l)

s.lstrip() - usuwa początkowe białe znaki

s.replace(old, new) - zastępuje stary podciąg nowym

s.rstrip() - usuwa koocowe białe znaki

s.split(separator) - dzieli napis używają podanego separatora

s.strip() - usuwa początkowe i koocowe białe znaki

print "ala ma kota a kot ma alę".islower() True

print "ala ma kota a kot ma alę".isalpha() False

Python odpowie nam na nasze pytania, zwracając True (czyli „Prawda”) lub False (czyli „fałsz”). Ostatnie porównanie sprawdzało, czy nasze zdanie zawarte w napisie „

ala ma kota a kot ma alę

” składa się wyłącznie z liter. Niestety, występują tam spacje - stąd wartośd False.

Etap 2. Listy i pętla for

Krotki posiadają jedną wadę - są niezmienne (jednak dzięki temu szybsze). Tej przypadłości nie posiadają listy (ang. list), które po stworzeniu możemy edytowad. Tworząc listę, używamy nawiasów kwadratowych.

>>> lista = ['Ala', 'Basia']

>>> lista[0]

'Ala'

>>> lista[-1]

'Basia'

>>> lista[:1]

['Ala', 'Basia']

>>> lista.index('Basia') 1

>>> for imie in lista:

... print(imie) ...

Ala Basia

Możemy również analogicznie odwoływad się do kolejnych elementów oraz fragmentów. Również pętla for działa identycznie, jak dla krotek. Listy jednak pozwalają nam podmieniad swoje elementy i sortowad je.

print lista.insert(1,’Jasio') ['Ala', 'Jasio', 'Basia']

print lista.append('Kazio') # Dodaj Kazia na koniec listy ['Ala', 'Jasio', 'Basia', 'Kazio']

print lista.pop(2) # Usuń Basię z listy ['Ala', 'Jasio', 'Kazio']

print lista.extend(['Jasio', 'Adam', 'Rafał']) # Rozszerz listę o kolejne osoby ['Ala', 'Jasio', 'Kazio', 'Jasio', 'Adam', 'Rafał']

print lista.sort() # Posortuj

['Adam', 'Ala', 'Jasio', 'Jasio', 'Kazio', 'Rafał']

print lista.reverse() # Odwróć

['Rafał', 'Kazio', 'Jasio', 'Jasio', 'Ala', 'Adam']

print lista.count('Jasio') # Ilu mamy Jasiów?

2

print len(lista) # Ilość elementów 6

Oczywiście, możemy także używad ich w głównych rolach z pętlą for tak samo jak krotki.

for element in lista:

print(element)

Rafał Kazio

(6)

Jasio Jasio Ala Adam

Numerowanie pętli

Python może również numerowad nam kolejne przebiegi pętli. Efekt ten uzyskujemy dzięki funkcji enumerate.

for nr, element in enumerate(lista):

print("Przebieg pętli", nr, "element", element)

Przebieg pętli 0 element Rafał Przebieg pętli 1 element Kazio Przebieg pętli 2 element Jasio Przebieg pętli 3 element Jasio Przebieg pętli 4 element Ala Przebieg pętli 5 element Adam

Zapis nr, element to nic innego, jak zapisanie dwuelementowej krotki zwracanej przez enumerate do dwóch zmiennych: nr i element.

Stringi w pętli for

for literka in "abcdefghijk123ABC":

print(literka)

a b c d e f g h i j k 1 2 3 A B C Zadania:

1. Wczytaj od użytkownika listę wyrazów. Następnie wyświetl je posortowane alfabetycznie.

2. Wczytaj od użytkownika listę wyrazów. Następnie wyświetl je w odwrotnej kolejności.

Rozwiązanie zadania 1:

wyrazy = raw_input("podaj wyrazy: ") wyrazy = wyrazy.split(',')

print wyrazy wyrazy.sort() print wyrazy Efekt wykonania następujący:

podaj wyrazy: ewa,ela,ola,ala ['ewa', 'ela', 'ola', 'ala']

['ala', 'ela', 'ewa', 'ola']

jurek

(7)

Zadania do wykonania :

1. Zapytaj użytkownika o ostatnią literę jego pełnego imienia. Jeżeli jest ona równa literce 'a', wypisz komunikat 'Jesteś kobietą '. Rozwiązanie

ostatnia_litera = input('Podaj swoją ostatnią literę pełnego imienia: ') if ostatnia_litera == 'a':

print('Jesteś kobietą')

2. Wypisz w pętli kwadraty liczb od 1 do 199 włącznie.

for i in range(1, 200):

print(i * i)

3. Z użyciem pętli wyświetl 100 razy napis 'Nie będę więcej jadł kredy na lekcjach'.

for i in range(100):

print('Nie będę więcej jadł kredy na lekcjach')

4. Sprawdź, na którym miejscu znajduje się rule w tekście:

"Three Rings for the Elven-kings under the sky,|

Seven for the Dwarf-lords in their halls of stone, Nine for Mortal Men doomed to die,

One for the Dark Lord on his dark throne

In the Land of Mordor where the Shadows lie.< ;br /> One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them

In the Land of Mordor where the Shadows lie".

Rozwiązania

print """Three Rings for the Elven-kings under the sky, ... Seven for the Dwarf-lords in their halls of stone, ... Nine for Mortal Men doomed to die,

... One for the Dark Lord on his dark throne ... In the Land of Mordor where the Shadows lie.

... One Ring to rule them all, One Ring to find them,

... One Ring to bring them all and in the darkness bind them ... In the Land of Mordor where the Shadows lie""".find('rule') 256

5. Ile razy występuje w nim słówko Ring?

print """Three Rings for the Elven-kings under the sky, ... Seven for the Dwarf-lords in their halls of stone, ... Nine for Mortal Men doomed to die,

... One for the Dark Lord on his dark throne ... In the Land of Mordor where the Shadows lie.

... One Ring to rule them all, One Ring to find them,

... One Ring to bring them all and in the darkness bind them ... In the Land of Mordor where the Shadows lie""".count('rule') 1

6. Jaki będzie wycinek łaocucha (slice) jeśli a = "blueberry":

 a[2:3]

 a[2:]

 a[:3]

 a[:]

 a[-1:-3]

 a[:-1]

 a[1:1]

Cytaty

Powiązane dokumenty

1) Przed użyciem klawisza pamięci trzeba ją WYZEROWAĆ! Za to punkty nie były odejmowane na kartkówce, ale to najważniejsza czynność w każdej procedurze używającej

Porównanie stê¿eñ dwutlenku azotu pomierzonych za pomoc¹ bezobs³ugowej stacji monitoruj¹cej oraz zarejestrowanych na wybranej stacji pomiarowej Fundacji ARMAAG.. ruj¹cej, a tym

Dopiero później tośmy się dowiedzieli, że Gienia [Kopf] do niego [Antoniego Teklaka]. pisała – były kontakty,

Sixty women read a story, depending on the condition, and answered questions about their temporal self-esteem (Heatherton and Polivy, 1991). Temporal self-esteem refers to a

By solving the Marchenko equations, the Green’s function can be retrieved between a virtual receiver in the subsurface to points at the surface (no physical receiver is required at

Synopsis To study the potential role of low energy secondary electrons in focused electron beam induced deposition.. (FEBID) we have studied FEBID using

Dodatkowo pozwala on także na prostsze tworzenie wielopoziomowych list bez konieczności tworzenia zagnieżdżonych środowisk (poziom listy jest określany przez ilość

W drodze analizy ekonometrycznej ustalono na- stępujące elementy proproduktywnej struktury zatrudnienia w dużych przedsię- biorstwach budowlanych: strukturę według