Typy danych, cd. Łańcuchy znaków Typ danych string, jest rozumiany jako łańcuch znaków - liter, cyfr i symboli. Stringi definiuje się w podwójnych lub pojedyńczych cudzysłowach. typ_ kawy = " latte " typ_herbaty = zielona cena = " 10. 99" Są pewne znaki, które użyte w stringach sprawiają kłopoty. sentence = There s a snake in my boot! W powyższym wypadku Python uważa, że po There string doszedł do końca. Ten problem można rozwiązać na dwa sposoby. Albo użyć backslash przed pojedyńczym cudzysłowem wewnątrz stringa, sentence = There \ s a snake in my boot! albo użyć podwójnych cudzysłowów. sentence = " There s a snake in my boot!" Indeksacja Każdy znak w stringu ma przyporządkowany numer, tzw. indeks. W pythonie, podobnie jak w C indeksy zaczynamy liczyć od 0. W poniższym przykładzie do zmiennej p zostanie przypisana pierwsza litera słowa "pingwin", analogicznie w drugim do zmiennej i przypisana zostanie piąta litera słowa "burrito". p = " pingwin "[0] i = " burrito "[4] Poza prostym indeksowaniem zgodnie z pozycją stringi obsługują również bardziej ogólną formę indeksowania znaną jako wycinki (ang. slice). Polega ona na ekstrakcji całej części (wycinka) za jednym razem, np.: a = " Mielonka " print a [1:2] # Wyswietli znaki od pozycji 1 do 2 ie 1
W wycinku lewą domyślną granicą jest zero, prawą natomiast długość sekwencji, z której następuje wycinanie. print a [1:] ielonka print a [0:7] print a [:7] print a[: -1] # Wszystkie elementy bez ostatniego w latwiejszej postaci print a [:] # Calosc Mielonka Wynik zwracany jest w nowym obiekcie, bez zapisania zmian w pierwotnym stringu. W Pythonie wszystko jest obiektem. Co za tym idzie, podstawowe typy danych mają charakter obiektowy i posiadają wbudowane metody. Do działania na stringach można użyć zatem: len() - określa długość stringa lower() - zamienia wszystkie wielkie litery na małe upper() - zamienia wszystkie małe litery na wielkie str() - konwertuje zmienną na stringa imie = "Marlenka" waga = "342.24" #gram imie.lower() imie.upper() len(imie) str(waga) lub bez przypisania do zmiennej: "Marlenka".lower() Dlaczego niektóre metody wywoływane są w notacji kropkowej - jak string.funkcja(), a niektóre, jak len(imie) inaczej? 2
W tym wypadku funkcje wywoływane metodą kropkową - lower() i upper() działają tylko dla stringów, natomiast len() i str() również dla innych typów danych. Konkatenacja, czyli łączenie stringów print " Mielonka " + " i " + " jajka " Do łączenia stringów używamy operatora dodawania. W przypadku konkatenacji stringów z nie-stringami pomocna okazuje się funkcja konwersji str(), którą można zastosować bezpośrednio przy operacji łączenia, np.: print " Mam " + str (2) + " orzechy " + " kokosowe!" Przy wyświetlaniu stringów i zmiennych niekoniecznie trzeba używać operacji konkatenacji. W tym wypadku lepiej użyć operatora %. word_1 = " ZOO " word_2 = " place " print " Let s escape from this %s, it s such a stupid %s!" % (word_1, word2 ) Chcąc pobrać wartość zmiennej od użytkownika i wykorzystać ją przy wyświetleniu można zastosować następujący kod: name = raw_ input (" What is your name? ") print "Ah, so your name is %s" % ( name ) Niezmienność Żadna z dotychczas wykonywanych operacji nie zmieniła oryginalnego łańcucha znaków. Dzieje się tak dlatego, że operacje te działają w taki sposób, by w rezultacie zwrócić nowy łańcuch znaków, ponieważ łańcuchy są w Pythonie niezmienne. Nie mogą być zmienione już po utworzeniu. Można jednak zawsze stworzyć nowy łańcuch znaków i przypisać go do tej samej nazwy (zmiennej). >>>a Mielonka >>>a [0] = z (...) TypeError : str object does not support item assignment >>>a = z + a [1:] >>>a zielonka Każdy obiekt Pythona klasyfikowany jest jako zmienny (niemodyfikowalny) lub zmienny (modyfikowalny). Wśród typów podstawowych niezmienne są liczby, łańcuchy znaków oraz krotki. Listy i słowniki można dowolnie 3
modyfikować. Niezmienność gwarantuje, że obiekt pozostanie stały w czasie całego cyklu działania programu. Introspekcja jest mechanizmem pozwalającym postrzegać funkcje i moduły znajdujące się w pamięci jako obiekty, a także pobierać o nich informacje, np. określać typ obiektu, budowę klasy obiektu. Ćwiczenia Wykonaj zadania zapisując każde z nich osobno w pliku.py. Zadbaj, żeby były możliwe do sprawdzenia. 1. Utwórz stringa o dowolnej nazwie przypisując do niego zdanie There s no light here! w pojedyńczych cudzysłowach. Popraw błąd, który się pojawił. 2. Zdefiniuj trzy stringi, pierwszy będący wybranyn przedmiotem, drugi przymiotnikiem go opisującym, a trzeci ceną. Dokonaj konkatenacji korzystając z operatora + wg wzoru: To jest..., kosztowal... i jest bardzo.... Następnie korzystając z tego samego wzoru wyświetl utworzone zmienne używając operatora %. 3. Utwórz stringa z imieniem wymyślonego zwierzątka. Następnie utwórz zmienną podając jego wysokość w formacie zmiennoprzecinkowym. Korzystając z wbudowanych metod wyświetl: a. imię zwierzątka bez wielkich liter, b. imię wielkimi literami, c. ilość znaków jego imienia, d. wypisz zdanie przedstawiając swoje zwierzątko podając informację ile ma wzrostu, stosując konwersję zmiennej. 4. Utwórz zmienną o dowolnej nazwie i pobierz jej wartość od użytkownika. Następnie wyświetl ją w pełnym zdaniu. 5. Stwórz string o dowolnej nazwie przypisując mu dowolny lecz niepusty ciąg znaków. Bez nadpisania całego stringa wstaw na pierwsze miejsce (o indeksie 0) pierwszą literę swojego imienia, lub następną w alfabecie, jeśli jakimś trafem okażą się te same). Wytłumacz co się stało. Zaproponuj rozwiązanie problemu. 6. Znajdź dwie inne metody operujące na stringach i napisz dowolny mały program, który je wykorzystuje. 4
Źródła M. Lutz, Python - wprowadzenie, Helion, 2011 https://www.learnpython.org/ https://www.codecademy.com/courses/learn-python https://pl.wikipedia.org/wiki/python/ 5