Etap 1. Instrukcja warunkowa

advertisement
Zajęcia – częśd II
Etap 1. Instrukcja warunkowa
Służy do sprawdzenia jakiegoś warunku. Umieszczone po niej – po wcięciu – instrukcje wykonają się tylko,
jeżeli warunek ten był spełniony.
Przykłady:
if 'c' in 'abecadło':
print("W wyrazie 'abecadło' występuje literka 'c'")
wiek = 18
if wiek == 18:
print("Wszystkiego najlepszego z okazji osiągnięcia pełnoletności !")
Do porównywania ze sobą różnych wartości można użyd wielu operatorów. Tabelka opisująca je znajduje się
poniżej.
Etap 2. Pętle
Sekwencje:
Do tworzenia sekwencji, których elementy należą do ciągu arytmetycznego, używamy funkcji range:
print range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Pojedynczy parametr oznacza koniec (tj. pierwszy element nie należący do) sekwencji (pierwszym elementem
zawsze jest zero). Aby wyświetlid kwadraty liczb od 0 do 9, napiszemy:
for x in range(10):
print x,' do potegi 2 =',x*x
Aby zmienid pierwszy element tworzonej sekwencji używamy funkcji range z dwoma parametrami (początek i
koniec):
print range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Aby wyświetlid kwadraty liczb od 3 do 9, napiszemy:
for x in range(3,10):
print x,' do potegi 2 =',x*x
Aby zmienid krok pomiędzy elementami tworzonej sekwencji używamy funkcji range z trzema parametrami
(początek, koniec i krok):
print range(1,10,2)
[1, 3, 5, 7, 9]
Zadania do wykonania w tym momencie:
1. odwrócid kolejnośd elementów od 1 do 9
2. wyświetlid kwadraty liczb malejąco od 9 do 1
3. wyświetlid kwadraty liczb nieparzystych malejąco od 9 do 1
Formatowanie liczb
Celem pętli często jest wyświetlenie kolumny liczb czy liczby w określonym formacie. Służy do tego tzw. Ciąg
formatujący, który składa się ze znaku %, po którym następują opcje formatowania, ilośd znaków
przeznaczonych do wyświetlenia oraz typ danej do wyświetlenia (przy czym tylko trzeci element – tj. typ
danych jest wymagany). Typ danej sygnalizujemy pojedynczą literą. I tak:

Litera s oznacza napis (konwertuje każdy typ danych na tekst), np.: print "%s" % 1
Proszę sprawdzid, co będzie rezultatem wykonania kodu:
print "%s" % range(6)
A co: print "%s" % "txt" ?

Litera c oznacza pojedynczy znak w kodzie ASCII, np.: print "%c" % "A"
Sprawdź jaki znak zostanie wyświetlony po wykonaniu kodu: print "%c" % 077?
A jaki dla kodu: print "%c" % 33

Litera i oznacza dziesiętną liczbę całkowitą (konwertuje kompatybilny typ danych na liczbę całkowitą),
np.: print "%i" % 0xff co da w efekcie 255
A co da w efekcie: print "%i" % 2.2
Albo

print "%i" % "11"
Litera f oznacza liczbę zmiennopozycyjną w postaci ułamka dziesiętnego, np.: print "%f" % 123
Co da w efekcie 123.000000
A co będzie wynikiem kodu: print "%f" % 1.23 ?
Ustalenie długości pola do wyświetlenia tekstu
Czasami istnieje potrzeba wyświetlenia tekstu w określonej formie: np. kolumnowej. Wtedy można
prawdziwie dostrzec zalety formatowania. Jeżeli chcemy ustalid długośd wyświetlenia każdej liczby np. na wartośd 4
wystarczy użyd następującej formy: print "%4i” % x
for x in range(1,10,1):
print "%4i" % x
Formatując liczby zmiennopozycyjne możemy także ustalid nie tylko całkowitą długośd, ale także liczbę
wyświetlanych miejsc po przecinku (np. na 3):
for x in range(5,100,10):
print "Pierwiastkiem liczby %2i jest %5.3f" % (x,x**0.5)
Zadania do wykonania w tym momencie:
1. wyświetlid liczby oraz ich kwadraty (od 1 do 10), przy czym liczby bez kwadratów na długości 4 znaków, a ich
kwadraty na długości 6 cyfr.
Pętle zagnieżdżone
Pętle mogą zawierad inne pętle – mówimy wtedy o nich, że są zagnieżdżone. Spróbujmy wygenerowad
tabliczkę mnożenia:
for x in range(1,11):
print # przejście do nowego wiersza
for y in range(1,11):
print "%3i" % (x*y)
Etap 3. Ł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 3 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 = '.'
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.
Metoda Split jest bardzo użyteczna
Metoda ta zwraca listę wszystkich słów w łaocuchu, stosując *str+ jako separator. Dzieli ona wszystkie wyrazy w łaocuchu
oddzielone białą spacją. Można też wybrad ile podziałów ma byd dokonanych i za to odpowiada parametr *num+.
Składnia jest następująca: str.split(str="", num=string.count(str))
Efektem wykonania następującego kodu:
str = „222-066-68-83”
print str.split('-');
będzie:
['222', '066', '68', '83']
Zadania do wykonania z drugiej części zajęd:
1. 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
2. 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
3. Wczytaj pełne imię użytkownika. Jeżeli jego ostatnia litera to 'a', wypisz komunikat, że jest kobietą.
Co się stanie jeżeli użytkownik wpisze swoje imię wielkimi literami? Rozwiąż ten problem na dwa
sposoby. Wskazówka: użyj odpowiedniej metody.
imie = input('Podaj swoje pełne imię: ')
if imie[-1] == 'a' or imie[-1] == 'A':
print('Jesteś kobietą')
Etap 3. 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
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
Przebieg
Przebieg
Przebieg
Przebieg
Przebieg
pętli
pętli
pętli
pętli
pętli
pętli
0
1
2
3
4
5
element
element
element
element
element
element
Rafał
Kazio
Jasio
Jasio
Ala
Adam
Opcjonalny drugi parametr pozwala na podanie liczby, od której startujemy.
for nr, element in enumerate(lista, 1):
print("Przebieg pętli", nr, "element", element)
Przebieg
Przebieg
Przebieg
Przebieg
Przebieg
pętli
pętli
pętli
pętli
pętli
1
2
3
4
5
element
element
element
element
element
Rafał
Kazio
Jasio
Jasio
Ala
Przebieg pętli 6 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 do wykonania:
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']
Tuple
Tuple jest to zbiór elementów, nie możemy go sortowad ani nie możemy wykonywad innych bardziej skomplikowanych
metod.
tuple = ( 'abcd', 786 , 2.23, 'john', 70.2
tinytuple = (123, 'john')
print
print
print
print
print
print
tuple
#
tuple[0]
#
tuple[1:3]
#
tuple[2:]
#
tinytuple * 2
#
tuple + tinytuple
)
wyświetli całą listę
wyświetli tylko 1 element listy
Wyświetli elementy od 2 do 4 w kolejności
wyświetli elementy zaczynając od 3-go
wyświetli listę dwa razy
# wyświetli połączone listy
Wynik:
('abcd', 786, 2.23, 'john', 70.200000000000003)
abcd
(786, 2.23)
(2.23, 'john', 70.200000000000003)
(123, 'john', 123, 'john')
('abcd', 786, 2.23, 'john', 70.200000000000003, 123, 'john')
To w przypadku Tuple jest niepoprawne, gdyż próbujemy zaktualizowad tuple – a to jest niedozwolone
działanie.
Listy
Lista to rozbudowana wersja tuple. Listę możemy sortowad, kasowad z niej elementy.
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']
print
print
print
print
print
print
list
#
list[0]
#
list[1:3]
#
list[2:]
#
tinylist * 2 #
list + tinylist
wyświetli całą listę „lista”
wyświetli tylko 1 element listy
Wyświetli elementy od 2 do 4 w kolejności
wyświetli elementy zaczynając od 3-go
wyświetli listę dwa razy
# wyświetli połączone listy
Wynik:
['abcd', 786, 2.23, 'john', 70.200000000000003]
abcd
[786, 2.23]
[2.23, 'john', 70.200000000000003]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.200000000000003, 123, 'john']
Słowniki
Słowniki podobne są do list, by wyświetlid określony wpis wystarczy podad jego klucz nazwa_słownika*"nazwa_klucza"+. Podany przykład iteracji zwraca pod zmienną i nazwę klucza tak więc by wyświetlid i
klucze i wartości musieliśmy użyd również nazwa_słownika*"nazwa_klucza"+. Słownik należy traktowad jak listę
zawierającą obiekty poindeksowane za pomocą kluczy.
bar = {"imie" : "jurek", "nazwisko" : "lepper"}
print bar["imie"]
for i in bar:
print i + " - " +bar[i]
nazwa = { "klucz" : "wartość",
"klucz" : "wartość" }
Efekty będzie następujący:
jurek
imie - jurek
nazwisko – Lepper
Próba odwołania się do nieistniejącego klucza spowoduje błąd wykonywania skryptu. Jeżeli może zdarzyd się sytuacja że
klucz może nie istnied to warto skorzystad z metody słownika has_key:
if bar.has_key("imie"):
print bar["imie"]
dict = {}
dict['one'] = "This is one"
dict[2]
= "This is two"
tinydict = {'name': 'john','code':6734, 'dept': 'sales'}
print
print
print
print
print
dict['one']
dict[2]
tinydict
tinydict.keys()
tinydict.values()
#
#
#
#
#
wyświetli
wyświetli
wyświetli
wyświetli
wyświetli
wartość dla klucza ‘one’
wartość dla klucza 2
cały słownik
wszystkie klucze
wszystkie elementy
Wynik
This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'john'}
['dept', 'code', 'name']
['sales', 6734, 'john']
Zadania do wykonania z części pierwszej zajęd:
1. Napisz program wypisujący Inwokację z Pana Tadeusza. Zadbaj o poprawne łamanie wierszy. Zadanie
wykonaj na dwa sposoby: raz korzystając z jednej funkcji print, drugi raz skorzystaj z niej dla każdej linii
wiersza. Rozwiązanie:
# Metoda pierwsza
print('''Litwo! Ojczyzno moja! ty jesteś jak zdrowie;
Ile cię trzeba cenić, ten tylko się dowie,
Kto cię stracił. Dziś piękność twą w całej ozdobie
Widzę i opisuję, bo tęsknię po tobie.''')
# Metoda druga
print('Litwo! Ojczyzno moja! ty jesteś jak zdrowie;')
print('Ile cię trzeba cenić, ten tylko się dowie,')
print('Kto cię stracił. Dziś piękność twą w całej ozdobie')
print('Widzę i opisuję, bo tęsknię po tobie.')
2.
Wczytaj od użytkownika imię, nazwisko i jego wiek, a następnie wypisz te informacje jedna pod drugą
w trzech kolejnych linijkach. Rozwiązanie
imie = input('Podaj swoje imię: ')
nazwisko = input('Podaj swoje nazwisko: ')
wiek = input('Podaj swój wiek: ')
print(imie)
print(nazwisko)
print(wiek)
3. 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ą')
4. Wypisz w pętli kwadraty liczb od 1 do 199 włącznie.
for i in range(1, 200):
print(i * i)
5. 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')
6.
Sprawdź czy w Pythonie zachowywana jest kolejnośd działao w wyrażeniach wykorzystujących mnożenie i
dodawanie.
wynik = 2 + 2 * 2
print(wynik) # 6 - jest zachowywana
Słowniki i pętle for
Do deklaracji słownika (ang. dictionary) używamy nawiasów klamrowych.
slownik = {'imie': 'Jan', 'nazwisko': 'Kowalski', 'wiek': 12, 'zawód': 'spawacz'}
for klucz, wartosc in slownik.items():
...
print(klucz + ': ' + str(wartosc))
...
imie: Jan
nazwisko: Kowalski
wiek: 12
zawód: spawacz
Słownik przetrzymuje pary wartości: nazwę pola (ang. keyword) oraz jego wartośd (ang. value). Poza metodą
items(), która zwraca kolejne pary klucz-wartośd, można wyświetlid w pętli również same klucze lub same
wartości.
for klucz in slownik.keys():
print(klucz)
imie
nazwisko
wiek
zawód
for wartosc in slownik.values():
print(wartosc)
Jan
Kowalski
12
spawacz
Klasa słownika definiuje również wiele dodatkowych metod pozwalających aktualizowad dane, usuwad czy
pobierad wartości kluczy.
print słownik
{'imie': 'Jan', 'nazwisko': 'Kowalski', 'wiek': 12, 'zawód': 'spawacz'}
slownik.clear() # Wyczyszczenie zawartości słownika
print slownik
{}
slownik.update({'literka': 'a', 'cyferka': 7}) # Aktualizacja słownika o nowe wartości
print slownik
{'cyferka': 7, 'literka': 'a'}
slownik.update(zwierzatko='kot', kolor='blekitny') # Aktualizacja słownika o nowe
wartości
print slownik
{'kolor': 'blekitny', 'zwierzatko': 'kot', 'cyferka': 7, 'literka': 'a'}
print slownik.get('cyferka') # Pobranie wartości przypisanej do klucza 'cyferka'
7
print slownik['literka'] # Pobranie wartości przypisanej do klucza 'literka'
'a'
slownik.pop('literka') # Pobranie z równoczesnym usunięciem ze słownika
print slownik
{'kolor': 'blekitny', 'zwierzatko': 'kot', 'cyferka': 7}
del slownik['cyferka'] # Usunięcie ze słownika
print slownik
{'kolor': 'blekitny', 'zwierzatko': 'kot'}
print len(slownik) # Ilość elementów
Download