Język programowania Python

Podobne dokumenty
Wstęp do informatyki. Python 1

1 Podstawy c++ w pigułce.

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

1 Podstawy c++ w pigułce.

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Typy danych, cd. Łańcuchy znaków

Programowanie w języku Python. Grażyna Koba

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Podstawy programowania. Python wykład 6

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

4. Funkcje. Przykłady

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Podstawy i języki programowania

lekcja 8a Gry komputerowe MasterMind

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

Listy, krotki, słowniki, funkcje

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Podstawy bioinformatyki 2017/18

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Podstawy Programowania Podstawowa składnia języka C++

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Podstawy bioinformatyki 2017/18

Pascal - wprowadzenie

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

1. Wypisywanie danych

Python dla początkujących. Małgorzata Niewiem AGH, GGiOŚ, Katedra Geoinformatyki i Informatyki Stosowanej SATIM Satelitarny Monitoring

Cw.12 JAVAScript w dokumentach HTML

Język ludzki kod maszynowy

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

JAVAScript w dokumentach HTML (1)

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Pętle. Dodał Administrator niedziela, 14 marzec :27

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Podstawy Programowania C++

JAVA?? to proste!! Autor: wojtekb111111

Kurs rozszerzony języka Python

Python wstęp do programowania dla użytkowników WCSS

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Algorytmy i struktury danych

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wykład 2 Składnia języka C# (cz. 1)

Podstawy programowania skrót z wykładów:

FUNKCJE TEKSTOWE W MS EXCEL

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Kiedy i czy konieczne?

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Ćwiczenie: JavaScript Cookies (3x45 minut)

Metody numeryczne Laboratorium 2

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Algorytm. a programowanie -

Lab 9 Podstawy Programowania

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Podstawy JavaScript ćwiczenia

Wykresy i interfejsy użytkownika

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Języki i metody programowania

LibreOffice Calc VBA

1 Powtórzenie wiadomości

7. Pętle for. Przykłady

do drukowania tekstu służy funkcja echo <?php echo "hello world!";?> jeżeli użyjemy jej kilka razy: <?php

Java Podstawy. Michał Bereta

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Powtórka algorytmów. Wprowadzenie do języka Java.

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Obliczenia, zmienne. Proste działania, zmienne, rodzaje zmiennych, proste operacje i działania na zmiennych.

Podstawy bioinformatyki 2017/18

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Liczby losowe i pętla while w języku Python

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Zaawansowany kurs języka Python

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Zasady programowania Dokumentacja

Część 4 życie programu

Transkrypt:

Język programowania Python Wrocławska Wyższa Szkoła Informatyki Stosowanej we Wrocławiu Piotr Kardasz, Wrocław, 2015r.

Spis treści WSTĘP... 1 1. INSTALACJA I KONFIGURACJA ŚRODOWISKA... 1 2. WPROWADZENIE DO POWŁOKI... 3 3. PIERWSZY PROGRAM... 3 4. ZMIENNE I ŁAŃCUCHY... 4 4.1. ZMIENNE... 4 4.2. ŁAŃCUCHY... 6 4.3. PROSTE SPOSOBY WPROWADZANIA DANYCH... 8 5. PODSTAWA SKŁADNI... 12 5.1. NIE NALEŻY STOSOWAĆ RAZEM SPACJI I TABÓW... 12 5.2. KLASY I OBIEKTY... 12 5.3. DŁUGOŚĆ KODU... 14 5.4. NAZWY... 14 6. SEKWENCJE... 15 6.1. ŁAŃCUCHY... 15 6.2. LISTY... 17 6.3. KROTKI... 19 6.4. SŁOWNIKI... 20 6.5. ZBIORY... 21 6.6. INNE TYPY DANYCH... 22 6.7. ĆWICZENIA... 23 7. TYPY DANYCH... 23 7.1. WBUDOWANE TYPY DANYCH... 23 7.2. TWORZENIE OBIEKTÓW ZE ZDEFINIOWANYCH TYPÓW... 25 7.3. OBIEKT NULL... 25 8. LICZBY... 26 9. ŁAŃCUCHY... 27 9.1. PORÓWNYWANIE... 27 9.2. OPERACJE MATEMATYCZNE... 27 9.3. INDEKSOWANIE I ODCINANIE... 28 9.4. METODY UŻYWANE W ŁAŃCUCHACH... 28 10. LISTY... 34

11. KROTKI... 39 12. SŁOWNIKI... 40 13. ZBIORY... 41 14. PRZYKŁADOWE OPERACJE MATEMATYCZNE... 45 15. KONTROLA PRZEPŁYWU DANYCH... 46 16. KONTROLA DECYZJI... 50 17. WYRAŻENIA WARUNKOWE... 52 18. WPROWADZANIE DANYCH... 53 19. OPERACJE NA PLIKACH... 54 20. FUNKCJE... 56 21. BŁĘDY... 58 PRACA Z MODUŁAMI... 59 BIBLIOGRAFIA... BŁĄD! NIE ZDEFINIOWANO ZAKŁADKI.

Wstęp Poniższy skrypt został stworzony z myślą o przedstawieniu podstawowych zagadnień związanych z programowaniem w języku Python. Podane poniżej informacje powinny pomóc zrozumieć nie tylko aspekty charakterystyczne dla tego języka programowania, ale również poszerzyć wiedzę w zakresie działania samego programowania obiektowego. Skrypt został stworzony z myślą o osobach, które dopiero zaczynają przygodę z programowaniem, a Python jest ich pierwszym językiem, którego chcą się nauczyć.ze względu na ograniczoną objętość, nie uwzględnia on poziomu zaawansowanego. Kod programu w skrypcie, został wyróżniony na ciemnych polach, by można go było go łatwo zrozumieć i zinterpretować, jest to ważne, ponieważ w Pythonie przywiązuje się uwagę do tzw. białych znaków. Elementy na które czytelnik powinien zwrócić szczególną uwagę zostały otoczone pomarańczową ramką, dzięki temu łatwiej wychwycić ich większe znaczenie. W skrypcie występuje też taka oto charakterystyczna czcionka. Wyszczególnione są nią zazwyczajelementy w tekście związane bezpośrednio z kodem programu, jak na przykład funkcje, czy polecenia. Czcionką wyróżnione są także wyniki działania poszczególnych programów, które nie są w żaden sposób formatowane. 1. Instalacja i konfiguracja środowiska Python jest opartym na licencji open-source, wysoko poziomowym, językiem programowania, który znajduje szeroki wachlarz zastosowań w różnych zadaniach programistycznych. Został on stworzony przez Guido Van Rossum, w latach 90, a swoją nazwę zawdzięcza programowi komediowemu Flying Circus, w reżyserii Monty Pythona. Język programowania cieszy się szczególnie dużą popularnością wśród administratorów systemów, jest też za łatwym językiem do nauki przez początkujących programistów. Z drugiej strony Python jest wykorzystywany przez NASA w celu stworzenia inteligentnego systemu planowania lądowania. Jest to język multiplatformowy, co oznacza że posiadając odpowiednie biblioteki, to napisany kod powinien uruchomić się zarówno na MS Windows, Linux i MAC OS. W celu korzystania z języka programowania Python, należy na początku go pobrać i uruchomić. 1

MS Windows Dla systemu MS Windows istnieją 2 popularne instalatory: 1. ActivePython- zawierający kompletną wersję Pythona, IDE z edytorem kodu, oraz kilka rozszerzeń dla systemu MS Windows. 2. Instalator z Python.org- samo środowisko programistyczne. W zależności od wybranej wersji, aby napisać pierwszy program, należy uruchomić PythonWin IDE lub Python GUI. Zaleca się również modyfikację ścieżki systemowej w celu uzyskania dostępu do komendy Python, niezależnie od katalogu. W tym celu należy wykonać poniższe kroki: wybrać START, kliknąć prawym przyciskiem myszy na komputer, wybrać właściwości, wybrać zaawansowane ustawienia systemu, wybrać zmienne środowiskowe, w zmiennych systemowych wybrać ścieżkę, i po znaku : wkleić: C:\Python27 Gdzie folder Python27 oznacza domyślny katalog instalacji języka, przy aktualnej wersji języka programowania. W przypadku instalacji nowszej wersji, albo zmiany katalogu podczas instalacji, należy podać swoją ścieżkę. Linux W przypadku korzystania z systemu Linux instalacja jest jeszcze bardziej bezobsługowa. Większość dystrybucji systemu zawiera Pythona w swoich repozytoriach. Aby go zainstalować w systemie Debian i pochodnych (Ubuntu,Mint itp.) należy wykonać polecenie w terminalu: apt-getinstallpython aby uruchomić interaktywną powłokę, należy wpisać w terminalu: Python Istnieje również oczywiście możliwość samodzielnej kompilacji języka ze źródeł, w tym celu należy go pobrać z adresu: http://www.python.org/ftp/python/ 2

Polecane zintegrowane środowiska programistyczne ( IDE) Aby ułatwić sobie pracę, należy zainstalować również inne IDE np. Eclipse, razem z odpowiednimi wtyczkami (PyDEV), lub Emacs razem z Pythonmode. Kod na potrzeby tego poradnika powstawał w IntelIJ IDEA. Każdy z tych programów można znaleźć na stronie producenta, a ich instalacja jest zależna od systemu operacyjnego, jest to jednak operacja na tyle prosta, że nie została tutaj omówiona. 2. Wprowadzenie do powłoki Python w swoim pakiecie instalacyjnym zawiera dwie powłoki. Pierwszą z nich jest powłoka interaktywna, za pomocą której można debugować oraz uruchamiać aplikacje,czy też sprawdzać działanie poszczególnych funkcji. Powłoka jest bardzo elastyczna i można wykorzystać ją do wielu celów, Poniżej jako przykład przedstawiono kalkulatorsłużący do obliczania pola trójkąta: >>>print ("program do obliczania pola trójkąta") program do obliczania pola trójkąta >>> a=4 >>> h=2 >>> 0.5*a*h >>> 4 W powłoce można też wykonywać inne zadania matematyczne, bez użycia zmiennych, na przykład: >> 1 + 1 2 Drugim typem powłoki jest powłoka normalna. Pozwala ona na uruchamianie skryptów zakończonych rozszerzeniem.py przez praser. 3. Pierwszy program Pierwszy, podstawowy program będzie uruchamiany od razu poprzez interpreter. Należy utworzyć nowy katalog, gdzie będą przechowywane wszystkie pliki nowych programów (w przypadku MS Windows, najlepiej aby znajdował się on bezpośrednio na dysku twardym). Następnie należy uruchomić wybrane przez siebie IDE, lub dowolny edytor tekstu i przepisać poniższy kod[1]: 3

Następie należy zapisać plik jako pierwszy_program.py, wejść do katalogu w którym się on znajduje, i uruchomić poleceniem: Python pierwszy_program.py Jako wynik działania programu w rezultacie powinniśmy otrzymać: Hello, world! W przypadku posiadania zintegrowanego środowiska programistycznego, programów nie będzie trzeba za każdym razem uruchamiać poleceniem. Zazwyczaj mają one wbudowane funkcje, które robią to za użytkownika. Zaleca się poświęcenie chwili czasu na poznanie funkcjonalności wybranego przez siebie IDE. 4. Zmienne i łańcuchy W tym rozdziale przedstawione zostaną informacje, czym różnią się zmienne (ang. Variables) i łańcuchy (ang. Strings), oraz jak ich używać. 4.1. Zmienne Zmienna, jest czymś co przechowuje wartość, która może się zmieniać. Jest ona swojego rodzaju pudełkiem, w którym można trzymać poszczególne elementy, dowolnie wyciągać je, zmieniać, i umieszczać ponownie. Można używać zmiennych aby przechowywać dane różnego typu, zacznijmy od danych liczbowych: W powyższym kodzie utworzono zmienną o nazwie zyciakota (jak wiadomo koty mają 9 żyć). Następnie wykorzystano funkcję print(), aby uzyskać informację o zawartości tejzmiennej. Powszechnie w programowaniu zmienne zaczynają się z małej litery, natomiast zmienne składające się z dwóch wyrazów mają to do siebie, że ich druga część zaczyna się z dużej litery. Zasada jest prosta nazwę zmiennej umieszczamy po lewej stronie znaku równości, a wartość po prawej. 4

Polskie znaki Aby w Pythonie używać bez obaw i ograniczeń polskich znaków, należy na samej górze pliku z kodem dodać linijkę: Polskich, ani innych regionalnych znaków nie powinno się jednak stosować w innym wypadku niż wewnątrz łańcuchów, w których jest to wymagane. Modyfikacje Możemy dowolnie modyfikować wartość zmiennych. Wynikiem działania programu: będzie: 8 7 W powyższym przykładzie zadeklarowana została zmienna cukierki, do której przypisano początkowo liczbę całkowitą (ang. Integer) równą 8. Osobę, która miała wcześniej do czynienia z innymi językami programowania (jak choćby JAVA czy C++) w zdumienie wprowadzić może fakt, że w nie zadeklarowano rodzaju zmiennej. Otóż należy wiedzieć, że w Pythonie nie ma czegoś takiego jak deklaracja, czy inicjacja zmiennej. Dla przykładu, wynikiem działania programu: rok = 365 # ilość pozostałych dni życia kota print rok rok = "przestępny" # charakterystyka roku print rok będzie: 365 przestępny Powyżej, do tej samej zmiennej, linijka pod linijką przypisano zarówno wartości liczbowe całkowite, jak i ciąg znaków, a mimo to interpreter języka nie zwrócił żadnego błędu. 5

Ważne: Interpreter rozróżnia wielkość liter w zmiennych, dlatego też zmienna Kot, nie jest tożsama ze zmienną kot. 4.2. Łańcuchy Upraszczając, string jest po prostu listą znaków. Znak zaś, jest tym co można wpisać z klawiatury, jak np. litera, cyfra czy hashtag. Na przykład: witaj jest wartością typu String. Ma ona 5 znaków. Wartości string mogą mieć też spacje. Np. witaj czytelniku ma16 znaków i zawiera też jedną spację. Nie ma limitów liczby znaków, które może zawierać pojedynczy string może on mieć zarówno milion znaków, jak i ani jednego (te ostatnie nazywane są jako puste łańcuchy, ang. emptystrings). Występują trzy sposoby deklarowania stringów w Pythonie: pojedynczym cytowaniem( ), podwójnym cytowaniem( ), oraz potrójnym cytowaniem ( ). W każdym z tych przypadków, należy zakończyć łańcuch w taki sam sposób, w jaki został utworzony. Na przykład: W rezultacie otrzymuje się wynik: jestem stringiem z pojedynczym cytowaniem jestem stringiem z podwójnym cytowaniem jestem stringiem z potrójnym cytowaniem W takiej sytuacji nasunąć się może słuszne pytanie: A co w przypadku kiedy zechcę zacytować tekst w zmiennej?, jest to możliwe poprzez użycie znaków backslasha \\ : W tensposób dwa pierwsze, wykonane print() będą wyglądać tak samo: I wtedy powiedziałem, nie wejdziesz I wtedy powiedziałem, nie wejdziesz Stało się tak, ponieważ sam backslash jest uznawany za tzw. escpaing symbol, który stosuje się w momencie gdy w stringu trzeba dokonać pewnej szybkiej widocznej zmiany, jaką 6

jest w tym wypadku cytowanie, bez potrzeby użytkowania np. dodatkowych zmiennych. Użycie escaping symbol wprowadza większą czytelność kodu. Ważne jest, aby pamiętać o tym, że gdyby zaszła potrzeba umieszczenia w stringu \, to tak naprawdę należy umieścić dwa \\. Dlatego właśnie trzeci przykład zwróci wynik: Ten print wyświetli tylko trzy backshlashe: \ \ \ Aby umożliwić lepsze zrozumienie escaping symbol, poniżej w tabeli 4.1 znajduje się większa ilość znaków możliwa do wykorzystania wraz z krótkim wyjaśnieniem. Tabela 4.1. Lista escaping symbol [2] Escape Sequence Znaczenie \newline Ignored \\ Backslash (\) \ Single quote ( ) \ Doublequote ( ) \a ASCII Bell (BEL) \b ASCII Backspace (BS) \f ASCII Formfeed (FF) \n ASCII Linefeed (LF) \r ASCII Carriage Return (CR) \t ASCII HorizontalTab (TAB) \v ASCII VerticalTab (VT) \ooo ASCII character with octalvalueooo \xhh ASCII character with hexvaluehh. Operacje na łańcuchach Pierwszy przykład programu przedstawionego w skrypcie wyglądał tak: Aby połączyć ze sobą dwa łańcuchy, należy użyć operatora +. Po wykonaniu kodu: otrzymano: Hello, world! Warto zwrócić uwagę, że na końcu stringa Hello występuje spacja. Gdyby nie została tam użyta, wynik działania programu wyglądałby tak: 7

Hello,world! Do powtarzania łańcuchów można natomiast użyć operatora *. W wyniku działania programu: Otrzymano: Witam Witam Witam Witam Witam Witam Witam Witam Witam Witam W celu sprawdzenia długości łańcucha, należy użyć funkcji len(), która w prosty sposób policzy ilość znaków w łańcuchu. Jej nazwę można łatwo zapamiętać, ponieważ jest skrótem od angielskiego słowa length (długość). Aby sprawdzić ilość znaków w wyrażeniu Hello, World należy wykonać: Otrzymano: 13 4.3. Proste sposoby wprowadzania danych W powyższych rozdziałach przedstawiono działanie zarówno zmiennych jak i łańcuchów, aby podsumować zdobytą wiedzę, należy wykorzystać je razem, w tym celu konieczne jest przypisanie łańcucha do zmiennej: Po wykonaniu programu powyżej, otrzymano: Jak się masz? W programie powyżej, stworzono zmienną o nazwie pytanie i przypisano do niej łańcuch Jak się masz?. Następnie w funkcji print() jako argumentu użyto zmiennej pytanie, co spowodowało jej wypisanie na ekranie. Warto zwrócić uwagę na to, że aby wyświetlić zmienną, musi ona zostać wpisana jako argument funkcji bez cudzysłowów, w przeciwnym razie, w tym wypadku wynik programu byłby następujący: pytanie Warto teraz pójść o krok dalej, i sprawić, aby użytkownik mógł samemu wprowadzać dane do programu, dzięki czemu możliwa będzie interakcja. Aby tego dokonać, należy użyć funk- 8

cji raw_input() w przypadku używania Pythona w wersji < 3, oraz funkcji input() w przeciwnym wypadku. Przykładowe wykonanie powyższego programu może wyglądać następująco: Co zamierzasz zjeść na obiad? pizze A więc mówisz, że pizze, To brzmi super! W powyższym programie, przypisano łańcuch Co zamierzasz zjeść na obiad, do zmiennej pytanie, następnie wywołano funcjęprint(), i jako jej argument podano zmienną pytanie, co spowodowało wyświetlenie na ekranie pytania: Co zamierzasz zjeść na obiad. Następnie do zmiennej odpowiedz, przypisalisano funkcję funkcję raw_input(), odpowiedzialną za pobranie danych od użytkownika. Na końcu do funkcji print(), jako argument wpisano łańcuch, w którym wykorzystano znak + w celu wstawienia zmiennej do łańcucha. Zarówno funkcja raw_input() jak iinput() działa w podobny sposób, mianowicie oczekuje ona na odpowiedź od użytkownika, i kończy swoje działanie w momencie, kiedy zostanie wciśnięty klawisz enter. Łańcuchy i numery razem W przypadku wykorzystania zarówno łańcuchów, jak i numerów, często mogą pojawić się błędy. W celach naukowych, warto uruchomić poniższy kod programu: Powyższy program jest jednak wadliwy i się nie uruchomi, a interpreter powinien zwrócić błąd: Traceback (most recentcalllast): File "/Users/pawelwiejkut/IdeaProjects/Python-skrypt/zmienne.py", line 43, in <module> dodajdziesiec = liczba /2 TypeError: unsupported operand type(s) for /: 'str' and 'int' 9

Gdzie wystąpił błąd? Otóż interpreter zwrócił błąd o nazwie TypeError, który oznacza problem z typami użytych informacji. Uproszczając Python nie jest w stanie zinterpretować typów danych, które zostały użyte razem (w tym przypadku liczba i łańcuch). Kompilator uważa domyślnie, że wartość wczytana od użytkownika jest łańcuchem (a nie tak jak w przypadku powyższego programu liczbą). To jeszcze nie koniec problemów w powyższym programie. W momencie kiedy użyto funkcji print() według błędnego założenia, kompilator powinien połączyć łańcuch Jeśli podzielimy twoją liczbę przez 2 otrzymamy: wraz z wynikiem dzielenia, pozyskanym ze zmiennej liczba. Kompilator nie wie jednak jak ma wykonać tą operację operator + potrafi bowiem jedynie łączyć ze sobą dwie wartości o tym samym typie danych, więc nawet gdyby ominąć TypeError, w momencie pobrania danych do zmiennej liczba poprzez wyjaśnienie interpreterowi z jakiego typu zmienną ma do czynienia to błąd powtórzyłby się w momencie wywołania zmiennej. Jak rozwiązać powyższe problemy? Otóż należy skorzystać z dwóch funkcji: 1. Int() służy do konwersji danych na liczbę całkowitą 2. Str() służy do konwersji danych na łańcuch Poprawioną wersję programu przedstawiono poniżej: Teraz kod kompiluje się bez problemu, ale w związku z użyciem funkcji int(), działa poprawnie jedynie w przypadku kiedy użytkownik programu wprowadzi do niego liczbę całkowitą, jest to tzw. funkcja wbudowana. Więcej funkcji przedstawiono w tabeli 4.2. Tabela 4.2. Funkcje wbudowane[3]. abs() divmod() input() open() staticmethod() all() enumerate() int() ord() str() any() eval() isinstance() pow() sum() basestring() execfile() issubclass() print() super() bin() file() iter() property() tuple() bool() filter() len() range() type() bytearray() float() list() raw_input() unichr() callable() format() locals() reduce() unicode() chr() frozenset() long() reload() vars() classmethod() getattr() map() repr() xrange() 10

cmp() globals() max() reversed() zip() compile() hasattr() memoryview() round() import () complex() hash() min() set() delattr() help() next() setattr() dict() hex() object() slice() dir() id() oct() sorted() Dokładny opis przedstawionych powyżej funkcji można znaleźć w oficjalnej dokumentacji języka dostępnej pod adresem: https://www.python.org/doc/ gdzie można rozwiać wszystkie swoje możliwości. 4.4. Ćwiczenia 1. Napisz program, który pobierze od użytkownika łańcuch, a następnie zwróci jego liczbę znaków. 2. Napisz program, który pobierze od użytkownika liczby i łańcuchy, a następnie wyświetli je razem. 3. Napisz program, który pobierze od użytkownika łańcuch, oraz liczbę jego powtórzeń, a następnie wyświetli ten łańcuch tyle razy ile użytkownik wskaże w liczbie. Ważne: Istnieją jeszcze inne sposoby na wprowadzenie zmiennej do łańcucha. Można użyć znaku % : W celu wstawienia 2 zmiennych należy w tym przypadku wykonać: Możemy również użyć funkcji format(): 11

5. Podstawa składni 5.1. Nie należy stosować razem spacji i tabów Ponieważ w Pythonie ważną rzeczą są tzw. białe znaki, w postaci spacji, dlatego nie należy ich zastępować. Pomimo tego, że w edytorze mogą wyglądać one tak samo, to będą błędnie interpretowane. 5.2. Klasy i obiekty W pytonie jak w każdym innym języku zorientowanym obiektowo istnieją zbiory danych zwane obiektami, które mają za zadanie reprezentacje koncepcji modelu systemu.obiekty w Pythonie są tworzone za pomocą szablonów nazywanych klasami[4]. Mają one atrybuty, które reprezentują różne części kodu, i dane które zawierają obiekty. W celu lepszego zrozumienia obiektów, poniżej umieszczono rysunek, który pomoże zrozumieć ich zastosowanie: 1. Klasa szablon dla obiektu. Jest to definicja zestawu cech i funkcjonalności danego elementu, nie zawierającego konkretnych wartości. Przykładowe elementy klasy autobus: ilość drzwi, rodzaj autobusu, barwy miasta, kolor felg, marka 2. Obiekt- jest to konkretna reprezentacja klasy np. marka Ikarus, typ: jednoczłonowy, kolor malowania: wrocławski. 12

Przykładowe elementy obiektu ikarus: ilość drzwi =2, rodzaj autobusu= jednoczłonowy, barwy miasta = Wrocław, kolor felg = srebrny, marka = Ikarus, Aby dostać się do atrybutów obiektu, należy po jego nazwiepostawić kropkę i dodać nazwę atrybutu. Założyć można, że konieczne jest uzyskanie dostępu do zmiennej iloscdrzwi w obiekcie ikarus klasy autobus. Aby to zrobić należy: Warto też wiedzieć, jak dostać się do funkcji zawartej w klasie. Można na przykład hipotetycznie założyć, że w przedstawionym obiekcie autobus, istnieje atrybut kolornadwozia, który ma za zadanie połączyć ze sobą zmienne kolorwiodacy i kolordrugi, aby go użyć w przypadku ikarusa należałoby wykonać: 13

5.3. Długość kodu W sytuacji, kiedy programista ma za zadanie zbudowanie dużego programu należy podzielić go na mniejsze części kodu, tak aby stał się on bardziej czytelny, oraz aby ułatwić późniejsze zmiany w jego kodzie tymosobom, które nie są zaangażowane w jego tworzenie. Ponadto podzielenie kodu, na poszczególne jego części pomaga zapobiec błędom wynikającym np. z powtarzających się nazw zmiennych, ponieważ wyodrębniony kod w swoim wnętrzu może stać się zupełnie niezależny od reszty programu. W Pythonie można wyodrębnić części kodu korzystając z funkcji lub modułów. Każdy z nich ma różne sposoby uzyskiwania dostępu do zwracanych przez nie danych. 5.4. Nazwy Właściwie nauka programowania w języku Python mogłaby nie zawierać koncepcji przestrzeni nazw (namespaces), ponieważ są one bardzo podobne do atrybutów.jest ona jednak uniwersalna i używana w każdym języku programowania. Python posiada wbudowaną funkcję dir(), która umożliwia lepsze ich zrozumienie. Używa się jej np. gdy uruchomiony zostanie interpreter Pythona w interactivemode: Type%"help",%"copyright",%"credits"%or%"license"%for%more%information.% >>>%dir()% [' builtins ',%' doc ',%' name ',%' package ']% >>>%% Zadania Stwórz klasę mieszkanie, oraz obiekt moje mieszkanie, i wyświetl wszystkie informacje o nim. 14

6. Sekwencje Sekwencje pozwalają na przechowywanie danych w zorganizowany i wydajny sposób. W Pythonie występują cztery typy sekwencji[5]: Łańuchy Listy Krotki Zbiory Kontenerami dla danych sekwencyjnych są słowniki i zestawy. 6.1. Łańcuchy W poprzednich rozdziałach omówiono już po części łańcuchy, oraz ich zastosowanie. Nie znalazła się tam natomiast informacja, jak można dostać się do ich poszczególnych znaków. Aby tego dokonać należy używać nawiasów kwadratowych: Po wykonaniu kodu program wyświetli: W i a e Indeksy są numerowane od 0, na przykładzie przedstawionego łańcucha Witaj Świecie numerowanie wygląda następująco: W i t a j Ś w i e c i e 0 1 2 3 4 5 6,7,8 9 10 11 12 13 14 UWAGA: Aby zapisać znak w UNICODE, (w tym wpadku UTF-8) Python rezerwuje w swojej pamięci aż 3 znaki. Jest to ważne, ponieważ aby wyświetlić samo Ś należy podać zakres [6:8], więcej informacji o wyświetlaniu łańcucha z zakresu przedstawiono poniżej. 15

Istnieje również sposób aby wyświetlać elementy łańcucha licząc je od końca: W i t a j Ś w i e c i e 14 13 12 11 10 9 8,7,6 5 4 3 2 1 0 Aby tego dokonać należy używać w nawiasach kwadratowych kolejnych numerów znaków liczonych od końca wraz ze znakiem -. Program po wykonaniu powyższego kodu zwróci wynik: e a w j Jak wspomniano powyżej znak :, umożliwi zwrócenie całego zakresu łańcucha w podanym przedziale, na przykład po wykonaniu programu: Otrzymano: Św Witaj Ś Witaj Św Witaj Świecie Iecie Dzieje się tak, ponieważ wszystko przed znakiem : można rozumieć jako lewą stronę łańcucha, natomiast po znaku - jako prawą stronę łańcucha. Dlatego też zapis: print "Witaj Świecie"[:-5] można rozumieć jako polecenie: wyświetl wszystkie znaki od początku łańcucha do piątego od końca znaku. 16

6.2. Listy Listy, zawierają różne typy danych, gdzie każda pozycja ma swój przypisany numer. Listy tworzy się poprzez użycie nawiasów kwadratowych []. Na przykład pusta lista może być zainicjowana za pomocą polecenia: Zawartość listy należy oddzielić przecinkami: Listy nie muszą zawierać oczywiście jednego typu danych, można również mieszać w nich łańcuchy i numery: Podobnie do łańcuchów, listy również są numerowane od 0. Aby dostać się do wybranego elementu listy należy wstawić numer interesującej nas pozycji w nawiasy kwadratowe. Na przykład: Powyższy program zwróci wynik: jajka mleko 42 63 Identycznie, jak w przypadku łańcuchów, można używać tutaj liczb ujemnych w celu uzyskania dostępu do elementów listy liczonych od końca. Sprawdzanie długości listy Aby sprawdzić ilość elementów w zadanej tablicy, należy użyć znanej już funkcji len().[6] Jako argument, funkcja przyjmuje w tym wypadku nazwę tablicy. W przypadku powyższej tablicy zawartosc, aby zwrócić liczbę elementów tablicy należy: Funkcja zwraca liczbę wszystkich elementów w tablicy, jednak wykonanie programu: Zwróci błąd: 17

IndexError: list index out of range Stało się tak, ponieważ elementy tablicy numerowane są od 0. Aby dostać się do ostatniego elementu tablicy przy użyciu funkcjilen(), należy odjąć 1 od całkowitej ilości elementów zwracanych przez funkcję: 63 Nadpisywanie elementów listy Elementy listy mogą być nadpisywane w taki sam sposób jak zmienne: ['jajka', 'mleko', 'woda', 'ciastka'] jabłko Dodawanie elementów do listy Istnieje kilka metod dodania elementu do listy. Jedną z nich jest użycie metody append(): ['jajka', 'mleko', 'woda', 'ciastka'] ['jajka', 'mleko', 'woda', 'ciastka', 'kawa'] Jeśli zajdzie potrzeba dodania elementu do listy na określone miejsce należy użyć funkcji insert(): ['jajka', 'mleko', 'woda', 'ciastka'] ['rogale', 'jajka', 'mleko', 'woda', 'ciastka'] Kasowanie elementów z listy Kasowanie wybranego elementu z listy odbywa się poprzez użycie funkcji del(): 18

W efekcie lista ulegnie samoczynnemu uporządkowaniu: ['rogale', 'jajka', 'mleko', 'woda', 'ciastka'] ['jajka', 'mleko', 'woda', 'ciastka'] Po skasowaniu jednego z elementów, bez żadnej ingerencji ze strony programisty, pozycja jajka znów wróciła na swoje pierwotne miejsce, i jest dostępna dlauzytkownika po indeksem 0 (zakupy[0]). Zależności pomiędzy listami Listy mają specyficzne zależności. Jeśli na przykład utworzymy i przypiszemy listę zakupymarka do listy zakupyani, a następnie nastąpi usunięcie elementu z listy zakupów Marka, wówczas na liście Ani ta zmiana również wystąpi. Na przykład po wykonaniu programu: Otrzymano wynik: ['rogale', 'mleko', 'woda', 'ciastka'] ['rogale', 'mleko', 'woda', 'ciastka'] Warto zwrócić uwagę, że sytuacja ta ma miejsce mimo tego, że przypisanie nastąpiło przed usunięciem elementu.takie zachowanie Pythona można obejść używając znaku :. W poniższym programie problem ten nie zostanie już zaobserwowany: 6.3. Krotki Krotki są bardzo zbliżone do list, z tą różnicą, że są one niezmienne[7]. Jeśli raz zostaną ustawione nie ma sposobu na ich zmianę. Nie można dodawać do nich elementów, zmieniać 19

ich, ani usuwać. Poza tym ich użycie i obsługa jest bardzo zbliżona do list. Deklaracja wygląda następująco: W przypadku gdyby zaszła potrzeba zadeklarowania dwóch krotek w jednej linijce należy użyć nawiasów () : Nawiasy mogą wyrządzić jednak szkody w napisanym programie i należy na nie uważać. W poniższym przypadku, obie deklaracje krotek są poprawne: ('drewno', 'grafit', 'farba', 'gumka') ('drewno', 'farba', 'gumka') Jednak kiedy użyjemy wewnątrz dodatkowych nawiasów, mogą pojawić się niespodziewane problemy. Po wykonaniu poniższego programu: Kompilator zwróci: 3 3 Stało się tak, ponieważ, zastosowany nawias sprawił, że wartości w nim ( farba,gumka ) traktowanesą jako osobna krotka. 6.4. Słowniki Słowniki podobnie do list są modyfikowalne ich zawartość można dodawać, zmieniać, i usuwać z niej wybrane elementy. Elementy w słownikach różnią się między innymi tym od list, że nie mają przypisanych numerów[8]. Każdy element słownika składa się z dwóch członów: klucza umożliwiającego identyfikację i jego wartości. Można sobie wyobrazić, że jest to taka sama budowa jak w przypadku listy, z tym, że w liście zmiana klucza nie jest możliwa (jest on ciągły i automatycznie przypisywany do każdego elementu począwszy od 0). Deklaracja słownika odbywa się poprzez użycie nawiasów {} oraz :. Na przykład: 20

{'odpowiedz': 12, 'olowek': 'przyzad do pisania'} 12 przyzad do pisania 2 Dodawanie kolejnych elementów Aby dodać kolejne elementy do słownika należy zadeklarować je podobnie jak zmienne: {'odpowiedz': 12, 'olowek': 'przyzad do pisania'} {'odpowiedz': 12, 'olowek': 'przyzad do pisania', 'nowy element': 'nowa wartosc'} 6.5. Zbiory Zbiory (ang. sets) są podobne do list, są jednak nieuporządkowane i nie pozwalają na zduplikowanie wartości. Elementy w zbiorach nie są przyporządkowane ani do poszczególnych wartości (jak w listach czy krotkach), ani do ustalonego klucza (jak w krotkach)[9]. Zbiorów warto jednak używać, ponieważ są one znacznie szybsze dla dużej liczby pozycji. Pozwalają one na szybsze wprowadzanie, kasowanie i sprawdzanie istnienia elementu. Zbiory cechują się również wsparciem dla operacji matematycznych, takich jak na przykład odejmowanie dwóch zbiorów od siebie. set([(23, 4), 99, 'lancuch']) Pozostałe operacje na zbiorach są bardzo podobne do tych poruszanych w poprzednich przypadkach w tym rozdziale: 21

UWAGA: W przypadku zbiorów, elementy są nieuporządkowane, ich kolejność nie jest w żaden sposób określona, i może ulegać zmianie. Zbiory mogą zawierać tylko niezmienne typy danych takie jak: liczby całkowite, łańcuchy i kortki. Do zbiorów nie można przypisywać list, słowników i innych zbiorów (za wyjątkiem tzw. zamrożonych zbiorów, które przedstawiono poniżej). Zamrożone zbiory Zależność pomiędzy zmrożonymi zbiorami (ang. frozenset) i zbiorami, jest zbliżona do zależności pomiędzy krotkami i listami. Zamrożony zbiór, to niezmienna wersja zbioru. Aby go użyć, należy posłużyć się funkcjąfrozenset(): frozenset(['wartosc', (18, 7), 100]) 6.6. Inne typy danych Python zawiera również inne typy danych sekwencji, od tych przedstawionych powyżej, są one jednak rzadziej używane i muszą być zaimportowane ze standardowego modułu przed ich użyciem: array - lista, która może zawierać jedynie wartości jednorodne, collections.default słownik, który zamiast błędu, zwraca wartość domyślną, w wypadku kiedy element nie zostanie odnaleziony, collections.deque- kolejka o dwóch końcach, ułatwia szybkie manipulowanie po obu jej stronach heapq- priorytet kolejki Queaue- kolejka stworzona do używania przez programy wielowątkowe. Lista też może być stosowana jako kolejka w jednowątkowym kodzie. 22

6.7. Ćwiczenia 1. Napisz program, który wstawi dwie cyfry 2,8 do listy. Następnie usunie 8 z listy. 2. Napisz program, który wstawi cyfry 2,8 do kortki. 3. Napisz program który skonstruuje krotke, której jednym z elementów będzie zamrożony zbiór. 7. Typy danych Typy danych pozwalają na określenie, kiedy dany obiekt może coś zrobić, a kiedy nie ma to sensu. Różne typy pozwalają również na zidentyfikowanie, czy w danym miejscu wykorzystywana będzie liczba (1,2,3), znak ( a, b, c ), czy wartość logiczna (prawda, fałsz). Inne języki programowania mogą określić, czy operacja ma sensdla obiektu, upewniając się, że obiekt nigdy nie może być przechowywany gdzieś, gdzie operacja zostanie na nim wykonana. Python jednak tak nie robi. Zamiast tego przechowuje typ obiektu i sprawdza czy operacja ma sens, podczas gdy jest ona wykonywana (jest to nazywane dynamicznym typowaniem). Dlatego tak ważne w Pythonie jest debugowanie programów 7.1. Wbudowane typy danych Wbudowane w język programowania typy danych dzieli się na kilka klas: typy numeryczne (ang. numerictypes), sekwencje (ang. sequences), zestawy i mapowania (ang. sets and mappings). boolean typ danych zawierający dwie wartości: Prawda i Fałsz. Użyteczny w przypadku wyrażeń warunkowych. Inne wbudowane typy danych przedstawiono poniżej, jednak niektóre z nich, dostępne są tylko w wybranych wersjach Pythona: Typy numeryczne: int- ang. integers, typ liczb całkowitych w Pythonie 2.* ograniczony do9223372036854775807 w Pythonie 3* nieograniczony, long ang. longintegers, liczby całkowite o nie ograniczonym rozmiarze, istnieje tylko w Pythonie 2.*, float typ zmiennoprzecinkowy, 23

complex ang. complexnumbers, typ liczb zespolonych.. Sekwencje: str ang. string typ reprezentujący sekwencje 8 bitowych znaków w Pythonie 2.*, byte sekwencja liczb całkowitych w przedziale 0-255, dostępna tylko w Python 3.*, list lista, tuple krotka. Zestawy: set- nieuporządkowany zbiór unikatowych obiektów, dostępny od wersji Pythona 2.6, frozen set- podobnie do zestawu, nieuporządkowany zbiór, jednak nie zmienny, również dostępny odpythona w wersji 2.6. Mapowania: dict typ słownikowy, każdy element listy (klucz) związany jest z odpowiadającą mu wartością. Szczegółowy podział typów danych przedstawiono w tabeli 7.1. Tabela 7.1.Szczegółowy podział typów danych Nazwa obiektu Kategoria Czy podlega zmianą? int, float, long, complex Typy numeryczne TAK str Sekwencje TAK bytes Sekwencje TAK tuple Sekwencje TAK frozen set Zestawy TAK bytearray Sekwencje NIE list Sekwencje NIE set Zestawy NIE dict Mapowania NIE 24

Tylko zmienne obiekty obsługują metody które umożliwiają zmianę obiektu w miejscu, takim jak zmiana przypisania kawałka sekwencji. Ważne jest aby pamiętać, że zmienne w Pythonie są w rzeczywistości odwołaniami do obiektów w pamięci. Na przykład przypisanie obiektu do zmiennej: spowodowało, że zmienne q,w,e prowadzą do obiektów 1, asd,['start', 999, ('to','bardzo','wazne')]. Są one przechowywane gdzieś w pamięci urządzenia, jako wygodny sposób dostępu. W przypadku zmiany przypisania zmiennej: Zmienia się jedynie obiekt. Jak wspominano wcześniej, tylko zmienne obiekty mogą być zmieniane w miejscu. 7.2. Tworzenie obiektów ze zdefiniowanych typów Poszczególne liczby całkowite mogą być wprowadzane na kilka sposobów: 1. liczby dziesiętne mogą być wprowadzane bezpośrednio, 2. liczby szesnastkowe mogą być wprowadzone przez poprzedzenie 0x lub 0X (0xff - hex FF lub 255 w systemie dziesiętnym) 3. format ósemkowy zależy od wersji Pythona: 1. Python 2.*- format ósemkowy może być wprowadzany poprzez poprzezenie 0 2. Python 3.* format ósemkowy może być wprowadzony oporzez poprzedzenie 0o lub 0O 7.3. Obiekt NULL W Pythonie, podobnie jak w innych językach programowania, występuje obiekt NULL, który dosłownie można przetłumaczyć jako obiekt, który na nic nie wskazuje - None. Jest to domyślna wartość każdego obiektu, zanim zostanie wypełniony on wartościami lub danymi. 25

8. Liczby Jak już wspominano, Python w wersji 2.* wspiera 4 typy numeryczne int, long, float i complex. W wersji 3.* typ long został porzucony, i zastępuje go typ int, który jest na tę chwilę nie ograniczony pod względem długości. W Pythonie oczywiście nie jest konieczne deklarowanie jakiego rodzaju zmiennej zamierza się użyć zostanie to zrobione automatycznie. Aby sprawdzić z jakiego rodzaju jest dana zmienna, możemy użyć funkcji type(): <type 'int'> <type 'long'> <type 'float'> <type 'complex'> Wcześniej, jako jeden z pierwszych programów w skrypcie, opisany został kalkulator. Jak wspominano, nie dzielił on poprawnie z resztą, teraz przyszedł czas na wyjaśnienia dlaczego tak się działo. Jest to nic innego jak minusy związane z brakiem deklaracji zmiennych przez użytkownika. Otóż w wersji 2.* po użyciu operatora / na dwóch liczbach całkowitych otrzymuje się trzecią liczbę całkowitą. Aby obejść takie zachowanie kompilatora, można dać mu do zrozumienia, że jedna z naszych zmiennych jest liczbą zmiennoprzecinkową (float). Nastąpi wtedy tzw. promocja typu, na skutek której wynik również będzie przedstawiany jako liczba zmiennoprzecinkowa. Począwszy od Pythona w wersji 2.2, jest jeszcze inne wyjście, polegające na zaimportowaniu modułufrom future import division (aby po załadowaniu modułu wykonać dzielenie z wynikiem całkowitym należy użyć operatora // ). W Pythonie 3.* natomiast, rezultatem użycia operatora / będzie zawsze prawidłowy, zmiennoprzecinkowy wynik. : 2 2.5 2.5 26

2.5 2 9. Łańcuchy 9.1. Porównywanie Łańcuchy są takie same, kiedy zawierają taką samą treść, są takiej samej długości, zawierają tyle samo miejsca w pamięci, oraz gdy znak jest dokładnie na tym samym miejscu. W programowaniu występują różne sposoby na sprawdzenie równości łańcuchów, w Pythonie najlepiej jest używać do tego celu operatora is w postaci == : True True True False False 9.2. Operacje matematyczne Są dwa typy operacji matematycznych, które można wykonywać na łańcuchach w Pythonie dodawanie i mnożenie. Dodawanie łańcuchów, to nic innego, jak powiązanie ich razem, mnożenie natomiast może służyć zarówno powiązaniu, jak i powtarzaniu: w wb wbwbwbwbwb 27

Występują sytuacje, w których należy sprawdzić występowanie zawartości jednego łańcucha w drugim. W Pythonie operator in, zwraca on wartość True jeśli pierwsza wprowadzona do niego wartość odpowiada drugiej: False True 9.3. Indeksowanie i odcinanie Wcześniejsze rozdziały zawierają już opis procederu wyświetlania poszczególnych znaków ze zmiennych. Teraz informacje te muszą zostać uzupełnione o ważną kwestię nie można do istniejącego łańcucha przypisać innej wartości podanej w zakresie[10]: Obie powyższe próby skończą się niepowodzeniem. 9.4. Metody używane w łańcuchach W tabeli 9.1, przedstawiono najczęstsze metody używane w łańcuchach. Tabela 9.1. Najczęstsze operacje wykonywane w łańcuchach capitalize center count decode encode endswith expandtabs find index isalnum isalpha isdigit islower isspace istitle isupper join ijust lower lstrip replace rfind rindex rjust rsrip split splitlines startswith strip swapcase title translate upper zfill Funkcje is*() W skład omawianych funkcji wchodzą: Isalnum(), isalpha(), isdigit(), isuper(), isspace() and istitle(). isalnum() zwraca True, jeżeli łańcuch zawiera cyfry, isalpha() zwraca True, jeżeli łańcuch zawiera tylko litery, isdigit() zwraca True, jeżeli łańcuch zawiera tylko cyfry, 28

isuper zwraca True, jeżeli znaki w łańcuchu są tylko duże, isspace zwraca True jeżeli łańcuch zbudowany jest jedynie z białych znaków, istitle zwraca True, jeżeli pierwszy znak w pierwszym wyrazie łańcucha jest duży, a reszta znaków mała. Przykłady wykorzystania powyższych funkcji przedstawiono poniżej: Metody Title, Upper, Lower, Swapcase, Capitalize W Pythonie istnieje grupa metod odpowiedzialna za zmiany w wielkości znaków, są to między innymi: title() metoda odpowiedzialna za zwiększenie pierwszego znaku w pierwszym wyrazie łańcucha. upper() metoda odpowiedzialna za powiększanie wszystkich znaków w łańcuchu, lower() metoda odpowiedzialna za pomniejszanie wszystkich znaków w łańcuchu, swapcase() metoda odpowiedzialna za zmianę małych znaków w duże, a dużych w małe. capitalize() metoda odpowiedzialna za zwiększanie wszystkich znaków w łańcuchu. Przykłady wykorzystania powyższych funkcji przedstawiono powyżej: 29

macintosh to znana odmiana jablek w USA Macintosh To Znana Odmiana Jablek W Usa MACINTOSH TO ZNANA ODMIANA JABLEK W usa MACINTOSH TO ZNANA ODMIANA JABLEK W USA macintosh to znana odmiana jablek w usa Macintosh to znana odmiana jablek w usa Metoda count Jeżeli niezbędne będzie policzenieilości wystąpień danego znaku w łańcuchu, należy użyć metody count(): Metoda, jako argument przyjmuje znak, którego ilość wystąpień jest później zwracana: 2 Metody strip, rstrip, lstrip Grupa metod odpowiedzialna za usuwanie białych znaków z łańcucha. Funkcje lstrip() i rstrip() usuwają znaki odpowiednio z lewej i prawej strony łańcucha. Funkcja strip() natomiast, usuwa białe znaki zarówno z lewej, jak i prawej strony: Witajcie w Pythonie Witajcie w Pythonie Witajcie w Pythonie Witajcie w Pythonie Metoda strip() może być również używana do usuwania innych typów danych: 30

www.onet.pl.onet.pl.onet. Metody ljust, rjust, center Aby wyrównać tekst w podanym przez siebie zakresie, należy wykorzystać metody: ljust() wyrównuje tekst do lewej, rjust() wyrównuje tekst do prawej, center() wyrównuje tekst do środka Przykłady wykorzystania metod przedstawiono poniżej: linux linux linux Metoda join Aby połączyć rozdzielone ze sobą łańcuchy (np. całą listę) należy użyć funkcji join(): 1+2+3+4+5+6+7 1-2-3-4-5-6-7 Metody find, index, rfind, rindex W celu określenia lokalizacji szukanego przez użytkownikaciągu znaków (bądź znaku) w łańcuchu należy użyć funkcji: 1. find(), index() w celu otrzymania numeru znaku podanego jako argument(liczonego od lewej strony łańcucha), 31

2. rfind(), r.index() w celu otrzymania numeru znaku podanego jako argument (liczonego od prawej strony łańcucha). Przykłady użycia powyższych funkcji przedstawiono powyżej: Stallman jest tworca G Richard Metoda replace Aby zastąpić jeden znak, innym znakiem w łańcuchu, należy skorzystać z metody raplce(): Microsoft jest tworca Linuksa Linus Torvaldis jest tworca Linuksa Metoda expandtabs Aby zastąpić znak tabulacji, odpowiednią ilością spacji, należy użyć metody expandtabs(): to lancuch z testowy 20 to lancuch z testowy 31 Metoda jako argument może przyjmować ilość spacji, która zastępuje znak tabulacji: 32

to lancuch z testowy 20 to lancuch z testowy 21 Metoda split Jeżeli zajdzie potrzeba podzielenia łańcucha i umieszczenia go w liście, należy użyć funkcji split(): Gratulacje, umiesz coraz wiecej! ['Gratulacje,', 'umiesz', 'coraz', 'wiecej!'] ['Grat', 'lacje, ', 'miesz coraz wiecej!'] Jako argument, metoda przyjmuje znak według którego może podzielić łańcuch na poszczególne elementy listy. 33

Ćwiczenia 1. Napisz program który zmienia pierwszą literę łańcucha na dużą, stworzy listę z jego wyrazów, a następnie policzy występowanie znaku i 2. Napisz program który zamieni łańcuch testowy na testowy (1). 10. Listy Tworzenie Jak wcześniej opisano w rozdziale z sekwencjami, aby utworzyć listę, należy umieścić jej elementy w nawiasach kwadratowych[11]: Na podstawie powyższego przykładu, nasuwają się dwa wnioski: Listy mogą zawierać różne typy danych, w tym na przykład: liczby całkowite, łańcuchy i klasę autobus Klasy mogą być dodawane w locie do listy. Świadczy o tym stworzenie w ostatnim elemencie klasy, nowej instancji klasy autobus. Tworzenie list na skróty Aby szybko utworzyć listę zawierającą podstawowe elementy, o zadanym rozmiarze można użyć operatora * : [0, 0, 0, 0, 0] Metoda ta może być stosowana dla różnego typu danych: ['witaj', 'witaj', 'witaj'] Łączenie list Listy można łączyć ze sobą na kilka sposobów. Najłatwiejszym z nich jest skorzystanie ze znanego już operatora + : 34

Następnym sposobem jest użycie metody extend(): Kolejną możliwość dodania wartości do listy oferuje metoda append(): ['q', 'w', 'e', ['r', 't', 'y']] W powyższym przypadku wartości ['r', 't', 'y']], nie są jednak elementami listy. Metoda append() zawsze dodaje tylko jeden element na końcu listy, więc jeżeli zamysłem jest połączenie dwóch list razem, należy użyć metody extend(). Pobieranie elementów listy Podobnie jak w przypadku łańcuchów, elementy list mogą być wyszukiwane po numerach znaków: 2 [2, 7.0] Porównywanie list Listy podobnie do łańcuchów można porównać za pomocą operatora == : True 35

Listy mogą być również porównywane za pomocą operatorów > i < : False False Sortowanie list Aby posortować listę, należy użyć funkcji sort(): [3, 7, 8, 'e', 'q', 'w'] Można również użyć funkcji sorterd [3] (): Funkcja sorted() różni się tym od sort(), że nie wykonuje ona operacji bezpośrednio na łańcuchu. Literacja Aby jedynie wyświetlić kolejno wszystkie elementy na liście należy dokonać literacji: q w e Możemy też dokonać literacji z modyfikacją elementów listy: 36

[2, 3, 4, 8, 9, 10] Usuwanie elementów Aby usunąć element z listy znając jego numer indeksu możemy użyć metody pop(): [2, 3, 4] [2, 3] lub metody del(): [2, 3, 4] [2, 3] Jeśli lokalizacja znaku w łańcuchu nie jest określona, możemy użyć metody remove(): ['w', 'e', 3, 8, 7] Można również usunąć te elementy z listy, które nie spełniają wymaganych warunków: [3, 4] Działania arytmetyczne W Pythonie jest kilka wbudowanych funkcji, które umożliwiają działania arytmetyczne, takie jakmaximum(),minimum(), i sum(): 37

9 3 27 6.75 Funkcje te działają również w przypadku łańcuchów: w e Kopiowanie list Kopiowanie list można podzielić na dwa rodzaje: kopiowanie płytkie i kopiowanie głębokie.kopiowanie płytkie, charakteryzuje się problemem o którym wspomniano już w przypadku sekwencji, a mianowicie po zmianie elementu w skopiowanej liście, zmieni się on także w oryginalnej: [2, 'w', 'e', 8] [2, 'w', 'e', 8] W przypadku kopiowania głębokiego, problem ten nie występuje: ['q', 'w', 'e', 8] [2, 'w', 'e', 8] Usuwanie zawartości listy Aby usunąć zawartość listy można użyć po prostu użyć funkcji del() i jako argumenty podać cały zakres listy: 38

[] Zadania 1. Utwórz listę, składającą się z elementów: ['ab', 'ac', 'ad', 'bb', 'bc', 'bd']. 2. Spraw aby lista wyglądała następująco: ['ab', 'ad', 'bc']. 3. Z listy [82,89,71,932,098] wybierz automatycznie największą wartość, następnie podziel przez najmniejszą. 4. Wyświetl kolejno całą zawartość listy: ['hb', 'ay', 'ak', 'bb', 'bc', 'bd']. 11. Krotki Krotki mogą być tworzone niezależnie, lub mogą być skonwertowaną listą, aby dokonać konwersji należy użyć metody tuple(): Krotki mogą być też tworzone z elementów oddzielonych przecinkami: ('a', 'b', 'c', 'd') Operacje na krotkach W związku z tym, że krotki z założenia są niezmienne, nie działają na nich operacje mające zastosowanie w przypadku list, takie jak np. append() czy też zwykłe przypisania wartości. Można jednak połączyć dwie krotki w jedną za pomocą operatora + : 39

12. Słowniki Jak wspominano w poprzednim rozdziale dotyczącym sekwencji, słowniki są typem danych bardzo zbliżonym do listy, różniącym się jednak od nich sposobem dostępu do danych. W słownikach bowiem indeks nie jest nadawany automatycznie dla każdego elementu (1,2,3), a nadaje go użytkownik. Poniżej przedstawiono przykład przypisywania i usuwania wartości ze słownika: {'computerclass': 'pc'} {} Porównywanie słowników Aby porównać dwa różne słowniki, należy użyć znanego już ze skryptu operatora == : False True Operacje na słownikach Operacje na słownikach są dość specyficzne, głównie z uwagi na brak przypisywanego automatycznie klucza. Aby wyświetlić wszystkie klucze w wybranym słowniku należy użyć funkcji keys(): ['q', 'r', 'e', 'w'] Można również wyświetlić wszystkie wartości elementów korzystając z metody keys(): [1, 'alltimefirst keyboard keys', 3, 2] 40

Łączenie słowników Aby połączyć ze sobą dwa słowniki, należy użyć metody update(): {'e': 3, 'i': 'alltimefirst keyboard keys', 'q': 9, 'r': 'alltimefirst keyboard keys', 't': 7, 'w': 2, 'y': 8} UWAGA: W przypadku gdy w słowniku występują dwa takie same klucze, a użyta zostanie metoda update(), wtedy wartość klucza ze słownika podanego jako argument metody update()zastąpi wcześniejszą. Usuwanie elementów słownika Aby usunąć element słownika, należy użyć znanej już funkcji del(): {'q': 1, 'e': 3, 'w': 2} 13. Zbiory Przykładowe operacje na zbiorach przedstawiono poniżej. Aby stworzyć zbiór, a następnie dodać do niego elementy można użyć metod add() i update(). W celu wykonania literacji po wszystkich elementach zbioru, trzeba użyć pętli for(): Operacje matematyczne na zbiorach Zbiory w matematyce charakteryzują się specyficzną grupą operacji, które można na nich wykonać, zalicza się do nich między innymi wyświetlanie elementów wspólnych zbiorów, czy ich łączenie. Przykłady tego typu operacji przedstawiono poniżej: 41

set(['szafa']) set(['stolik', 'barek', 'biurko', 'komoda', 'szafa']) set(['stolik', 'biurko']) set(['komoda', 'stolik', 'barek', 'biurko']) False False Dodawanie elementów do zbiorów Istnieje kilka sposobów dodawania elementów do zbiorów, jeśli zbiór jeszcze nie istnieje można użyć metody set(): set([0, 1, 2, 3]) set(['s', 'e', 't']) Ponieważ w powyższym przykładzie jedynie utworzono zbiory,a jako argumentu funkcji set() użyto bezpośrednio łańcucha test, spowodowało to podział każdej z liter na osobny element. Z uwagi na to, że wartości w zbiorach nie mogą się powtarzać, funkcjaprint() zwróciła tylko jeden znak t. Istnieją dwa sposoby na dodanie wartości do istniejących zbiorów: set(['stolik', 'szafa', 'biurko', 13]) set([4, 5, 'biurko', 13, 'stolik', 'szafa']) 42

Kopiowanie zbiorów W celu skopiowania zbioru należy użyć metody copy(): set(['stolik', 'szafa', 'biurko']) set(['stolik', 'biurko', 'szafa']) Sprawdzanie zawartości W przypadku list, można w bardzo prosty sposób sprawdzić, czy poszukiwany element znajduje się w zbiorze[12]. W tym celu należy skorzystać z operatora in : True False Usuwanie zawartości Jest kilka sposobów usunięcia zawartości ze zbiorów. Pierwszym z nich jest użycie metody remove(): set(['stolik', 'szafa']) W przypadku stosowania tej metody, podczas usunięcia elementu, który jest na liście, wyświetli ona błąd KeyError, a działanie programu zostanie przerwane. Z tego powodu lepiej używać metody discard(): 43

Powyższy kod po wykonaniu nie zwróci żadnego wyniku, ponieważ jako argument metody, podana została wartość, która nie istnieje w zbiorze. Może pojawić się potrzeba wyczyszczenia wszystkich elementów zbioru. W tym celu należy użyć metody clear(): set([]) Literacja Aby dokonać literacji przez wszystkie elementy zbioru należy użyć pętli: stolik szafa biurko 44

14. Przykładowe operacje matematyczne Poniżej przedstawiono wzór, który umożliwia przeliczenie kilowatów na konie mechaniczne: KM = KW 1.359621155 Wzór, po przetworzeniu na kod programu może wyglądać następująco: Poniżej w tabeli 9.2 przedstawiono najczęściej używane operatory w Pythonie: Tabela 9.2. Najczęściej używane operatory w Pythonie Działanie matematyczne Składnia w Pythonie Nazwa x + y x+y dodawanie x y x-y odejmowanie x y x/y dzielenie x y x*y mnożenie [x y] x//y x mod y x%y modulo (reszta z dzielenia) y -y liczba ujemna y abs(y) wartość bezwzględna x y x**y potęgowanie y math.sqrt(y) pierwiastek UWAGA: Aby stworzyć pierwiastek kwadratowy za pomocą polecenia math.sqrt(), należy wcześniej zaimportować niezbędną bibliotekę math: 45

Dostosowywanie wyniku Wyniki obliczeń matematycznych nie zawsze kończą się uzyskaniem liczby całkowitej, i czasami wynik działania programu może wyglądać na przykład tak: 2.2360679775 Domyślnie Python zwraca jedynie 10 znaków po przecinku, co jednak w przypadku gdy oczekuje się od programu tylko 2-3 znaków? Wtedy należy zastosować zaokrąglenie, czyli funkcję round(). Funkcja round() przyjmuje dwa argumenty: liczbę którą należy zaokrąglić, oraz ilość miejsc po przecinku: 15. Kontrola przepływu danych W Pythonie występują trzy główne możliwości (kategorie) kontroli przepływu danych: Pętle Gałęzie Zapytania funkcyjne Jako zaawansowane formy kontroli przepływu danych uważa się generatory, i porównywania list, jednak nie zostaną one omówione w skrypcie, zapytania funkcyjne natomiast zostaną omówione w kolejnym rozdziale. Pętle Pętle są bardzo użyteczną częścią w każdym języku programowania. Można by było wręcz stwierdzić, że bez pętli, programowanie nie miałoby większego sensu. Nie trudno bowiem wyobrazić sobie sytuację, w której musimy wczytać/sprawdzić 100 różnych wartości. W Pythonie występują dwa rodzaje pętli[13]: while pętla, której działanie można przetłumaczyć jako: dopóki warunek jest prawdziwy, powtarzaj kod pętli. Jako, że pętla ta nie ma na stałe przypisanego zakresu działania, to ilość jej przebiegów, w większej mierze zależy od innego czynnika na przykład tego co wprowadzi użytkownik podczas wykonywania programu: 46

3 2 1 Powyższykod można przetłumaczyć w następujący sposób: dopóki x nie będzie mniejszy od 0, wyświetl wartość x, pomniejsz x o 1. Widać tutaj sporą różnicę we wspominanym już wcześniej braku ograniczenia, dlatego wewnątrz pętli znalazł się zapis x=x-1, pomniejszający wartość x dzięki temu program nie popadł w ciągłą pętle i zakończył poprawnie pracę. Zarówno w pętlach, jak i w gałęziach, można również używać polecenia else. Elsepozawala przerwać działanie pętli while, w przypadku, gdy nie może ona spełnić już zadanej zależności: 3 2 1 3 Istnieje także inny sposób na zatrzymanie działania pętli, jest nim użycie wyrażenia break : Jeśli zajdzie potrzeba przejścia do kolejnej literacji pętli, bez czekania na wynik poprzedniej, należy użyć continue : 47