• Nie Znaleziono Wyników

Etap 1. Instrukcja warunkowa

N/A
N/A
Protected

Academic year: 2021

Share "Etap 1. Instrukcja warunkowa "

Copied!
11
0
0

Pełen tekst

(1)

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.

(2)

Etap 2. Pętle

Sekwencje:

Do tworzenia sekwencji, których elementy należą do ciągu arytmetycznego, używamy funkcji range:

>>> 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):

>>> 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):

>>> 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" ?

(3)

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)

(4)

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 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))

Przykład:

(5)

str = "Line1-abcdef \nLine2-abc \nLine4-abcd";

print str.split( );

print str.split(' ', 1 );

Wynik:

['Line1-abcdef', 'Line2-abc', 'Line4-abcd']

['Line1-abcdef', '\nLine2-abc \nLine4-abcd']

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

"""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?

>>> """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('Ring') 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', 'Ola', 'Basia']

>>> lista[0]

'Ala'

(6)

>>> lista[-1]

'Basia'

>>> lista[:2]

['Ala', 'Ola']

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

>>> for imie in lista:

... print(imie) ...

Ala Ola 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.

>>> lista.insert(1) = 'Jasio' >>> lista

['Ala', 'Jasio', 'Basia']

>>> lista.append('Kazio') # Dodaj Kazia na koniec listy >>> lista

['Ala', 'Jasio', 'Basia', 'Kazio']

>>> lista.pop(2) # Usuń Basię z listy >>> lista

['Ala', 'Jasio', 'Kazio']

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

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

>>> lista.sort() # Posortuj >>> lista

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

>>> lista.reverse() # Odwróć >>> lista

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

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

2

>>> 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 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

Opcjonalny drugi parametr pozwala na podanie liczby, od której startujemy.

(7)

>>> for nr, element in enumerate(lista, 1):

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

Przebieg pętli 1 element Rafał Przebieg pętli 2 element Kazio Przebieg pętli 3 element Jasio Przebieg pętli 4 element Jasio Przebieg pętli 5 element 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']

(8)

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 tuple # wyświetli całą listę

print tuple[0] # wyświetli tylko 1 element listy

print tuple[1:3] # Wyświetli elementy od 2 do 4 w kolejności print tuple[2:] # wyświetli elementy zaczynając od 3-go print tinytuple * 2 # wyświetli listę dwa razy

print tuple + tinytuple # 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 list # wyświetli całą listę „lista”

print list[0] # wyświetli tylko 1 element listy

print list[1:3] # Wyświetli elementy od 2 do 4 w kolejności print list[2:] # wyświetli elementy zaczynając od 3-go print tinylist * 2 # wyświetli listę dwa razy

print list + tinylist # 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']

(9)

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 dict['one'] # wyświetli wartość dla klucza ‘one’

print dict[2] # wyświetli wartość dla klucza 2 print tinydict # wyświetli cały słownik

print tinydict.keys() # wyświetli wszystkie klucze print tinydict.values() # wyświetli 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,')

(10)

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

(11)

spawacz

Klasa słownika definiuje również wiele dodatkowych metod pozwalających aktualizowad dane, usuwad czy pobierad wartości kluczy.

>>> słownik

{'imie': 'Jan', 'nazwisko': 'Kowalski', 'wiek': 12, 'zawód': 'spawacz'}

>>> slownik.clear() # Wyczyszczenie zawartości słownika >>> slownik

{}

>>> slownik.update({'literka': 'a', 'cyferka': 7}) # Aktualizacja słownika o nowe wartości >>> slownik

{'cyferka': 7, 'literka': 'a'}

>>> slownik.update(zwierzatko='kot', kolor='blekitny') # Aktualizacja słownika o nowe wartości

>>> slownik

{'kolor': 'blekitny', 'zwierzatko': 'kot', 'cyferka': 7, 'literka': 'a'}

>>> slownik.get('cyferka') # Pobranie wartości przypisanej do klucza 'cyferka' 7

>>> slownik['literka'] # Pobranie wartości przypisanej do klucza 'literka' 'a'

>>> slownik.pop('literka') # Pobranie z równoczesnym usunięciem ze słownika >>> slownik

{'kolor': 'blekitny', 'zwierzatko': 'kot', 'cyferka': 7}

>>> del slownik['cyferka'] # Usunięcie ze słownika >>> slownik

{'kolor': 'blekitny', 'zwierzatko': 'kot'}

>>> len(slownik) # Ilość elementów

Cytaty

Powiązane dokumenty

Materiał edukacyjny wytworzony w ramach projektu „Scholaris – portal wiedzy dla nauczycieli&#34;.. współfinansowanego przez Unię Europejską w ramach Europejskiego

Jeśli mimo wszystko spotkasz się jednak z kimś spoza domowników, trzymaj się od niego w odległości dwóch metrów. (czyli mniej więcej pięciu

Przestrzeganie terminu jest istotne, ponieważ dopiero po tym, jak wszyscy uczestnicy zajęć ją wypełnią będę mogła przygotować harmonogram prezentacji na zajęcia, a

Jako PRACĘ DOMOWĄ , bardzo proszę zrobić ćwiczenia znajdujące się w karcie pracy (PRESENT SIMPLE-ĆWICZENIA).. PRACĘ DOMOWĄ proszę przesłać na maila do PIĄTKU, 22.05.2020

Ludzie często zobowiązują się do czegoś, często też nie wywiązują się ze swoich zobowiązań i uważają, że nic takiego się nie stało.. Spróbujcie

Załóżmy, że ustawiliśmy płyty z rysunku 24.16a i b blisko siebie i równo- legle (rys. Płyty są przewodnikami, dlatego też po takim ich ustawieniu ładunek nadmiarowy na

ułóż nadgarstek jednej ręki na środku klatki piersiowej poszkodowanego (dolna połowa mostka poszkodowanego), nadgarstek drugiej dłoni ułóż na grzbiecie

 gdy nie uda się dopasować wartości zmiennej (lub obliczonego wyrażenia) do żadnej wartości występującej po słowie case, wykonywane są instrukcje