Podstawy programowania w Pythonie

Transkrypt

Podstawy programowania w Pythonie
Podstawy programowania w Pythonie
Wykład 9
dr Andrzej Zbrzezny
Instytut Matematyki i Informatyki
Akademia Jana Długosza w Cz˛estochowie
12 grudnia 2012
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
1 / 25
Listy
Używanie listy jako stosu
Stos to liniowa struktura danych, w której dane dodawane sa˛ tylko
na szczyt stosu i tylko ze szczytu stosu sa˛ pobierane.
Jest to wiec
˛ bufor typu LIFO (ang. Last-In-First-Out) – ostatni na
wejściu, pierwszy na wyjściu.
Stosy sa˛ stosowane w systemach komputerowych na wszystkich
poziomach funkcjonowania systemów informatycznych.
Użycie listy w roli stosu jest bardzo łatwe:
Aby dodać element na szczyt stosu, należy użyć metody
append().
Aby pobrać elementu ze szczytu stosu, należy użyć metody pop()
bez podawania indeksu.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
2 / 25
Operacje na stosie
Przykład
>>>
>>>
>>>
>>>
[3,
>>>
6
>>>
[3,
>>>
5
>>>
[3,
stos = [] # pusty stos
stos = [3, 4, 5]
stos.append(6)
stos
4, 5, 6]
stos.pop()
stos
4, 5]
stos.pop()
stos
4]
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
3 / 25
Listy
Używanie listy jako kolejki
Kolejka to liniowa struktura danych, w której dane dodawane sa˛
na tylko końcu listy a pobierane sa˛ tylko z poczatku
˛
listy.
Jest to wiec
˛ bufor typu FIFO (ang. First-In-First-Out) – pierwszy na
wejściu, pierwszy na wyjściu.
Podobnie jak stosy, listy sa˛ stosowane w systemach
komputerowych na wszystkich poziomach funkcjonowania
systemów informatycznych.
Użycie listy w roli stosu jest bardzo łatwe:
Aby dodać element do kolejki, należy użyć metody append().
Aby pobrać elementu z kolejki, należy użyć metody pop(0)
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
4 / 25
Operacje na kolejce
Przykład
>>> kolejka = []
# kolejka pusta
>>> kolejka = ["Adam", "Tadeusz", "Michał"]
>>> kolejka.append("Eryk")
# przybywa Eryk
>>> kolejka.append("Jan")
# przybywa Jan
>>> kolejka.pop(0)
’ Adam’
>>> kolejka.pop(0)
’ Tadeusz’
>>> kolejka
[’Michał’, ’Eryk’, ’Jan’]
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
5 / 25
Zbiory
Podstawowe informacje
Python posiada również typ danych dla zbiorów.
Zbiór jest nieuporzadkowan
˛
a˛ kolekcja˛ nie zawierajac
˛ a˛ duplikatów.
Przy pomocy operatora in można testować przynależność
elementu do zbioru.
Zbiory umożliwiaja˛ wykonywanie takich podstawowych operacji
jak suma, przeciecie,
˛
różnica oraz różnica symetryczna.
Aby utworzyć zbiór należy użyć nawiasów {} lub funkcji set()
z argumentem bed
˛ acym
˛
obiektem iterowalnym.
Aby utworzyć zbiór pusty należy użyć funkcji set() bez
argumentów a nie nawiasów {}, ponieważ konstrukcja {} tworzy
pusty słownik.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
6 / 25
Zbiory
Przykład (Podstawowe operacje na zbiorach)
koszyk = {"gruszka", "kiwi", "gruszka", \
"cytryna", "kiwi", "banan", "mango"}
print(koszyk)
print("kiwi" in koszyk)
print("mandarynka" in koszyk)
a = set("abracadabra")
b = set("alacazam")
print("a =", a)
print("b =", b)
print("a - b =", a - b)
print("a | b =", a | b)
print("a & b =", a & b)
print("a ^ b =", a ^ b)
dr Andrzej Zbrzezny (IMI AJD)
#
#
#
#
różnica zbiorów
suma zbiorów
iloczyn zbiorów
różnica symetryczna
Podstawy programowania w Pythonie
12.12.2012
7 / 25
Zbiory
Przykład (Podstawowe operacje na zbiorach)
koszyk = {"gruszka", "kiwi", "gruszka", \
"cytryna", "kiwi", "banan", "mango"}
print("\n", koszyk)
lista = list(koszyk)
print("\n", lista)
lista.sort()
# sortowanie listy
print("\n", lista)
koszyk.clear()
for owoc in lista:
koszyk.add(owoc)
print("\n", koszyk, "\n")
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
8 / 25
Błedy
˛ i wyjatki
˛
Błedy
˛ składniowe
Błedy
˛ składniowe, znane również jako błedy
˛ parsingu, sa˛ być
może najbardziej powszechnym rodzajem błedów,
˛
z którymi na
poczatku
˛
maja˛ do czynienia uczacy
˛ sie˛ jezyka
˛
Python.
Rozważmy przykład:
>>> while True print("Hello")
File "<stdin>", line 1
while True print("Hello")
^
SyntaxError: invalid syntax
>>>
Parser powtarza na wyjściu błedny
˛
wiersz i wyświetla mała˛
„strzałk˛e”, wskazujac
˛ a˛ na najwcześniejszy punkt w wierszu gdzie
znaleziono bład.
˛
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
9 / 25
Błedy
˛ i wyjatki
˛
Błedy
˛ składniowe
Bład
˛ został wykryty w składniku poprzedzajacym
˛
strzałk˛e: w
powyższym przykładzie, bład
˛ wykryty został na instrukcji
wywołaniu funkcji print, z powodu braku znaku dwukropka (":")
przed ta˛ instrukcja.
˛
Sa˛ również wyświetlane nazwa pliku i numer linii, aby wiedzieć,
gdzie szukać błedu,
˛
w przypadku gdy na wejściu znajdował sie˛
skrypt.
W przypadku wpisania błednej
˛
instrukcji w interpreterze,
wyświetlana jest zamiast nazwy pliku nazwa <stdin>
oznaczajaca
˛ standardowe wejście.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
10 / 25
Błedy
˛ i wyjatki
˛
Błedy
˛ wykonania
Nawet gdy wyrażenie jest składniowo poprawne, może
spowodować bład
˛ podczas próby wykonania go.
Błedy
˛ wykryte podczas wykonania nazywane sa˛ wyjatkami
˛
i niekoniecznie musza˛ zakończyć program.
Wkrótce dowiemy sie˛ jak radzić sobie z nimi w programach
Pythona.
Wiekszość
˛
wyjatków
˛
nie jest obsługiwana przez programy
a objawiaja˛ sie˛ one w komunikatach o błedzie,
˛
jak w poniższych
przykładach.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
11 / 25
Błedy
˛ i wyjatki
˛
Przykład (Błedy
˛ wykonania)
>>> 10 * 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 4 * 3 + spam
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name ’spam’ is not defined
>>> "2" + 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert ’int’ object to str implicitly
>>>
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
12 / 25
Błedy
˛ i wyjatki
˛
Obsługa wyjatków
˛
W poniższym przykładzie użytkownik podaje dane na wejściu aż
do momentu, kiedy zostanie wprowadzona poprawna liczba
całkowita.
Przykład (Instrukcja try)
while True:
try:
a = int(input("Podaj liczb˛
e całkowita:
˛ "))
except ValueError:
print("To co podałeś nie jest liczba˛ całkowita")
˛
print("Spróbuj ponownie")
else:
print("Brawo! Podałeś liczb˛
e o wartości", a)
break
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
13 / 25
Błedy
˛ i wyjatki
˛
Działanie instrukcji try
Na poczatku
˛
wykonywana jest klauzula try (czyli instrukcje
pomiedzy
˛
try a except).
Jeżeli nie pojawi sie˛ żaden wyjatek
˛
klauzula except jest pomijana
i wykonanie instrukcji try uważa sie˛ za zakończone.
Jeżeli podczas wykonywania klauzuli try pojawi sie˛ wyjatek,
˛
reszta
niewykonanych instrukcji jest pomijana.
Nastepnie,
˛
w zależności od tego, czy jego typ pasuje do typów
wyjatków
˛
wymienionych w cz˛eści except, wykonywany jest kod
nastepuj
˛ acy
˛ w tym bloku, a potem interpreter przechodzi do
wykonywania instrukcji umieszczonych po całej instrukcji try.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
14 / 25
Błedy
˛ i wyjatki
˛
Działanie instrukcji try
W przypadku pojawienia sie˛ wyjatku,
˛
który nie zostanie
dopasowany do żadnego z wyjatków
˛
wymienionych w klauzuli
except, zostaje on przekazany do do nastepnych,
˛
zewnetrznych
˛
instrukcji try.
Jeżeli również tam nie zostanie znaleziony odpowiadajacy
˛ mu
blok except, wyjatek
˛
ten nie zostanie wyłapany, stanie
nieobsłużonym wyjatkiem,
˛
a wykonywanie programu zostanie
wstrzymane wraz z pojawieniem sie˛ komunikatu podobnego do
pokazanego uprzednio.
Aby umożliwić obsługe˛ wielu wyjatków,
˛
instrukcja try może
posiadać wiecej
˛
niż jedna˛ klauzule˛ except.
W takim przypadku, kod dla co najwyżej jednego wyjatku
˛
zostanie
wykonany.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
15 / 25
Błedy
˛ i wyjatki
˛
Działanie instrukcji try
Kody obsługi wyjatków
˛
wykonywane sa˛ tylko dla wyjatków,
˛
które
zostały zgłoszone w odpowiadajacej
˛ im cz˛eści try, a nie w innych,
sasiednich
˛
cz˛eściach except.
Klauzula except może zawierać nazwy wielu wyjatków,
˛
podanych
w formie listy otoczonej nawiasami okragłymi,
˛
np.
... except (TypeError, NameError):
...
pass
W ostatniej podanej klauzuli except można pominać
˛ nazwe˛ lub
nazwy wyjatków
˛
w celu obsłużenia dowolnego wyjatku.
˛
Można jej również użyć do wypisania komunikatu o błedzie
˛
i ponownie zgłosić wyłapany wyjatek
˛
(umożliwiajac
˛ w ten sposób
funkcji wywołujacej
˛ wyłapanie zgłoszonego wyjatku).
˛
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
16 / 25
Błedy
˛ i wyjatki
˛
Przykład
import sys
try:
f = open("myfile.txt")
s = f.readline()
i = int(s.strip())
except IOError as err:
print("Bład
˛ I/O error: {0}".format(err))
except ValueError:
print("Nie mog˛
e przekształcić danej", end=" ")
print("w liczb˛
e całkowita.")
˛
except:
print("Nieoczekiwany bład:",
˛
sys.exc_info()[0])
raise
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
17 / 25
Błedy
˛ i wyjatki
˛
Działanie instrukcji try
Instrukcja try...except wyposażona jest w opcjonalna˛ klauzule˛
else, która musi pojawić sie˛ za wszystkimi podanymi blokami
except.
Można po niej umieścić kod, który zostanie wykonany, jeżeli nie
zostanie zgłoszony wyjatek.
˛
Zastosowanie klauzuli else jest lepsze niż dodatkowy kod do
klauzuli try, ponieważ unika sie˛ przypadkowego złapania wyjatku,
˛
który nie został zgłoszony przez kod chroniony przez klauzule˛ try.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
18 / 25
Błedy
˛ i wyjatki
˛
Przykład (Klauzula else w instrukcji try)
def inputInt(prompt):
while True:
try:
a = int(input(prompt))
except:
print("To nie jest liczba całkowita")
print("Spróbuj ponownie")
else:
return a
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
19 / 25
Błedy
˛ i wyjatki
˛
Przykład (Klauzula else w instrukcji try)
def inputFloat(prompt):
while True:
try:
a = float(input(prompt))
except:
print("To nie jest liczba typu float")
print("Spróbuj ponownie")
else:
return a
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
20 / 25
Słowniki
Podstawowe informacje
Innym użytecznym typem danych w Pythonie jest słownik.
Słowniki spotykane sa˛ czasami w innych jezykach
˛
programowania
jako „pamieć
˛ asocjacyjna” lub „tablice asocjacyjne”.
W odróżnieniu od sekwencji, które sa˛ indeksowane liczbami,
słowniki indeksowane sa˛ kluczami, które moga˛ być obiektami
dowolnego, niemutowalnego typu, np. napisy i liczby zawsze
moga˛ być kluczami.
Listy niemutowalne również moga˛ zostać użyte jako klucze, jeżeli
zawieraja˛ napisy, liczby lub listy niemutowalne.
Nie można użyć zwykłych list jako kluczy, ponieważ można je
modyfikować za pomoca˛ metody append().
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
21 / 25
Słowniki
Podstawowe informacje
Najlepiej wyobrazić sobie słownik jako nieuporzadkowany
˛
zbiór
par klucz:wartość, z założeniem, że klucze sa˛ unikalne
(w jednym słowniku).
Para nawiasów klamrowych tworzy pusty słownik: {}.
Umieszczenie listy par klucz:wartość, oddzielonych
przecinkami w tych nawiasach dodaje poczatkowe
˛
pary
klucz:wartość do słownika.
W ten sposób słowniki sa˛ wyświetlane na standardowym wyjściu.
Głównymi operacjami na słownikach sa˛ dodawanie wartości
z jakimś kluczem i pobieranie wartości opatrzonej podanym
kluczem.
Możliwe jest usuwanie pary klucz:wartość za pomoca˛
instrukcji del.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
22 / 25
Słowniki
Podstawowe informacje
Jeżeli próbuje sie˛ przechować klucz, który istnieje już w słowniku,
poprzednia wartość zwiazana
˛
z tym kluczem jest zapominana.
Bład
˛ powstaje w wyniku próby pozyskania wartości spod klucza,
który nie istnieje w słowniku.
Metoda obiektu słownika keys() zwraca liste˛ wszystkich kluczy
używanych w słowniku, w porzadku
˛
losowym (jeżeli chce sie˛
uzyskać posortowana˛ liste˛ kluczy, należy zastosować metode˛
sort() na tej liście).
Aby sprawdzić obecność klucza k w słowniku d należy sprawdzić
czy klucz k należy do zbioru kluczy słownika d: k in d.keys().
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
23 / 25
Słowniki
Przykład (Podstawowe operacje na słownikach)
tel = {"jack": 4098, "sape": 4139}
tel["guido"] = 4127
print(tel)
print(tel["jack"])
del tel["sape"]
tel["irv"] = 4127; print(tel)
print("guido" in tel, "jack" not in tel)
print(list(tel.keys()))
print(sorted(tel.keys()))
print(list(tel.values()))
print(sorted(tel.values()))
print(list(tel.items()))
print(sorted(tel.items()))
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
24 / 25
Słowniki
Przykład (Podstawowe operacje na słownikach)
tel = {"jack": 4098, "sape": 4139}
tel["guido"] = 4127
print(tel)
try:
print(tel["jack"])
except:
print("Brak klucza \"jack\"")
try:
del tel["jacek"]
except:
print("Brak klucza \"jacek\"")
print(tel)
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
12.12.2012
25 / 25

Podobne dokumenty