Podstawy programowania Python wykład 6
Funkcja wbudowana chr() Wywołanie funkcji chr() z argumentem m zwraca łańcuch znaków reprezentujący znak, którego punktem kodowym w Unicode jest liczba całkowita m. Przykład: chr(80) zwraca łańcuch znaków 'P'. Zakres wartości dla argumentu funkcji chr(): < 0, 1114111> (0x10FFFF w systemie szesnastkowym). Jeżeli wartość argumentu funkcji chr() jest poza tym zakresem, to zostanie wygenerowany błąd ValueError.
Przykład 1 def main(): # Litery alfabetu angielskiego drukuj_znaki(65, 90) # duże litery drukuj_znaki(97, 122) # małe litery drukuj_znaki(48, 57) # cyfry drukuj_znaki(90,97) def drukuj_znaki(lewy, prawy): for j in range(lewy, prawy + 1): print(chr(j), end = ' ') print() main()
Funkcja wbudowana ord() Wywołanie funkcji ord() z argumentem będącym ciągiem reprezentującym jeden znak Unicode, zwraca liczbę całkowitą reprezentującą punkt kodowy w Unicode tego znaku. Na przykład: ord('a') zwraca liczbę całkowitą 65, ord('\uffff') zwraca liczbę 65535, ord('\u0010ffff') zwraca liczbę 1114111. Funkcja ord() jest funkcją odwrotną do funkcji chr(): ord(chr(65)) = 65 chr(ord('a')) = 'A' dr
Przykład 2 def main(): drukuj_numery_znakow("0123456789") drukuj_numery_znakow("ąćęłńóśźż") drukuj_numery_znakow("ąćęłńóśźż") def drukuj_numery_znakow(lancuch): for s in lancuch: print(s, ":", ord(s), end = ' ') print() main()
Łańcuchy znaków - napisy Oprócz liczb Python może również manipulować łańcuchami znaków, które można wyrazić w różny sposobów. Mogą one być objęte: znakami apostrofu lub znakami cudzysłowu: >>> 'informatyka' 'informatyka' >>> "informatyka" 'informatyka' >>> 'A\'propos' "A'propos" >>> "A'propos" "A'propos" Łańcuchy znaków mogą być także objęte potrójnymi znakami apostrofu lub potrójnymi znakami cudzysłowu.
Łańcuchy znaków - napisy Interpreter wypisuje wynik działań na napisach w ten sam sposób, w jaki są one wprowadzane. Są one objęte apostrofami lub cudzysłowami i zawierają ewentualnie inne znaki poprzedzone znakiem ukośnika (\) tak, aby w sposób dokładny pokazać zawartość napisu. Łańcuch znaków objęty jest parą cudzysłowów, jeśli zawiera tylko apostrofy, w przeciwnym wypadku objęty jest parą apostrofów.
Operacje na łańcuchach Łańcuchy znaków mogą być sklejane za pomocą operatora + i powielane za pomocą operatora *. >>> print("ala" + " ma " + "kota") Ala ma kota >>> print(3 * ":) ") :) :) :)
Łańcuchy znaków Łańcuchy znaków można indeksować. Pierwszy znak w łańcuchu ma indeks (numer porządkowy) 0. Nie istnieje osobny typ obejmujący pojedyncze znaki znak jest po prostu napisem o długości jeden. Łańcuchy znaków w Pythonie nie mogą być modyfikowane. Próba przypisania do zaindeksowanej pozycji w łańcuchu powoduje powstanie błędu. >>> s = "programowanie" >>> s[0] = "P" Traceback (most recent call last): File «stdin>", line 1, in <module> TypeError: str object does not support item assignment
Podłańcuchy znków Podłańcuchy znaków mogą zostać wyspecyfikowane za pomocą notacji tzw. wykrawania dwóch indeksów przedzielonych dwukropkiem: >>> "programowanie"[0:3] 'pro' >>> "programowanie"[3:6] 'gra' >>> "programowanie"[6:] 'mowanie' Indeksy wykrawania posiadają użyteczne argumenty domyślne: pominięty pierwszy indeks posiada domyślną wartość zero, pominięty drugi domyślnie równy jest długości łańcucha znaków, którego dotyczy wykrawanie.
Operacja wykrawania posiada następującą użyteczną własność: łańcuchy s[:i] + s[i:] są równe. >>> "world"[:3] + "world"[3:] == "world" True Niepoprawne indeksy wykrawania obsługiwane są dość ostrożnie: indeks, który jest zbyt duży, zastępowany jest długością łańcucha, ograniczenie górne, które jest mniejsze od ograniczenia dolnego, powoduje powstanie pustego napisu. >>> "programowanie"[:19] 'programowanie' >>> "programowanie"[3:2] ''
Wykrojenia cd. Aby wyznaczyć podciąg, licząc od prawej strony danego napisu, używa się indeksów będących liczbami ujemnymi: >>> "programowanie"[-1] # Ostatni znak 'e' >>> "programowanie"[-2] # Przedostatni znak 'i' >>> "programowanie"[-3:] # Trzy ostatnie znaki 'nie' >>> "programowanie"[:-1] # Wszystkie, prócz ostatniego 'programowani' Ujemne wykrojenia, które przekraczają ograniczenia napisu są skracane. Wbudowana w interpreter funkcja len() zwraca długość łańcucha. dr hab.
Porównywanie łańcuchów Napisy można porównywać przy użyciu standardowych operatorów relacyjnych: ==,! =, <, <=, > i >=. Wynik porównania zgodny jest porządkiem leksykograficznym wyznaczonym przez wartości punktów kodowych w Unicode znaków biorących udział w porównaniu. >>> "Windows" < "linux" True >>> "Windows" < "Linux" False >>> "mama" < "ala" False
Czy podnapis? Operator in służy do testowania czy dany napis jest podnapisem innego napisu. Operator not in służy do testowania czy dany napis nie jest podnapisem innego napisu. >>> "gram" in "programowanie" True >>> "program" in "programowanie" True >>> "nie" in "programowanie" True >>> "grama" in "programowanie" False
Łańcuchy znaków metody capitalize() zwraca kopię napisu z pierwszym znakiem zmienionym na wielką literę. count(napis[, poczatek[, koniec]]) zwraca ilość nienachodzących na siebie wystąpień napisu napis w zakresie [poczatek:koniec]. Opcjonalne argumenty początek i koniec są interpretowane tak samo, jak w operacji wycinania. endswith(przyrostek[, poczatek[, koniec]]) zwraca wynik sprawdzenia, czy napis jest zakończony napisem przyrostek. Przy wystąpieniu argumentu początek, sprawdzenie rozpoczyna się od tego znaku. Przy wystąpieniu argumentu koniec porównanie zakończy się na tym znaku. expandtabs([wielkość]) Zwraca kopię napisu ze wszystkimi znakami tabulacji zastąpionymi przez znaki spacji. Jeśli wielkość nie zostanie podana, przyjmuje się rozmiar tabulacji jako 8 znaków.
Łańcuchy znaków metody find(podnapis[, początek[, koniec]]) Zwraca najniższy indeks takiego wystąpienia napisu podnapis, aby napis był zawarty w wycinku [początek:koniec]. Opcjonalne argumenty początek i koniec są interpretowane tak samo, jak w operacji wycinania. Zwraca -1 jeśli napis podnapis nie został znaleziony. UWAGA: Funkcja find() powinna być używana tylko wtedy, gdy chcemy poznać pozycję napisu podnapis w danym napisie. Jeżeli chcemy tylko sprawdzić czy napis podnapis występuje w danym napisie, to należy użyć operatora in: podnapis in napis. isalnum() zwraca wynik sprawdzenia, czy wszystkie znaki napisu są znakami alfanumerycznymi i napis składa się przynajmniej z jednego znaku. isalpha() zwraca wynik sprawdzenia, czy wszystkie znaki napisu są literami i napis składa się przynajmniej z jednego znaku.
Łańcuchy znaków metody isdigit() zwraca wynik sprawdzenia, czy wszystkie znaki napisu są cyframi. islower() zwraca wynik sprawdzenia, czy wszystkie litery napisu są małymi literami i napis zawiera przynajmniej jedną mała literę. isspace() wraca wynik sprawdzenia, czy wszystkie znaki napisu są białymi znakami i napis składa się przynajmniej z jednego znaku. istitle() zwraca wynik sprawdzenia, czy napis ma strukturę tytułu, to znaczy każdy wyraz napisu musi zaczynać się wielką literą i składać wyłącznie z małych liter lub znaków nieliterowych. isupper() zwraca wynik sprawdzenia, czy wszystkie litery napisu są wielkimi literami i napis zawiera przynajmniej jedną wielka literę.
Łańcuchy znaków metody ljust(szerokość) zwraca kopię napisu wyrównaną do lewej w napisie o szerokości szerokość. Wypełnienie jest uzyskane za pomocą znaków spacji. Jeśli szerokość jest mniejsza od len(s) zwracany jest oryginalny napis. lower() zwraca kopię napisu zamienionego na małe litery. lstrip([chars]) zwraca kopię napisu z usuniętymi znakami z początku napisu. W przypadku, gdy argument chars nie został podany, lub ma wartość None, usunięte zostaną białe znaki. Jeżeli argument ten jest podany i nie ma wartości None, musi być typu napisowego. Z początku napisu, na rzecz którego wywołana została ta metoda, zostaną usunięte znaki wchodzące w skład argumentu chars.
Łańcuchy znaków metody replace(stary, nowy[, ile]) zwraca kopię napisu z wszystkimi wystąpieniami napisu stary zastąpionymi przez nowy. Jeśli zostanie podany argument ile, zostanie zastąpiona tylko podana ilość wystąpień. rfind(napis [,początek [, koniec]]) zwraca najwyższy indeks wystąpienia napisu napis, takiego, aby napis był zawarty w przedziale [początek, koniec). Opcjonalne argumenty początek i koniec są interpretowane tak samo, jak w operacji wycinania. Zwraca -1 jeśli napis nie został znaleziony. rjust(szerokość) zwraca kopię napisu wyrównaną do prawej w napisie o szerokości szerokość. Wypełnienie jest uzyskane za pomocą znaków spacji. Jeśli szerokość jest mniejsza od len(s) zwracany jest oryginalny napis.
Łańcuchy znaków metody rstrip([chars]) zwraca kopię napisu z usuniętymi znakami z końca napisu. W przypadku, gdy argument chars nie został podany lub ma wartość None, usunięte zostaną białe znaki. Jeżeli argument ten jest podany i nie ma wartości None, musi być typu napisowego. Z końca napisu, na rzecz którego wywołana została ta metoda, zostaną usunięte znaki wchodzące w skład argumentu chars. startswith(prefix[, start[, end]]) zwraca wynik sprawdzenia, czy napis zaczyna się napisem prefix. Przy wystąpieniu argumentu start, sprawdzenie rozpoczyna się od tego znaku. Przy wystąpieniu argumentu end porównanie zakończy się na tym znaku. strip([chars]) zwraca kopię napisu z usuniętymi znakami z początku i końca napisu. W przypadku, gdy argument chars nie został podany lub ma wartość None, usunięte zostaną białe znaki. Jeśli argument ten jest podany i nie ma wartości None, musi być typu napisowego. Z początku i końca napisu, na rzecz którego wywołana została ta metoda, zostaną usunięte znaki wchodzące w skład argumentu chars.
Łańcuchy znaków metody swapcase() zwraca kopię napisu z małymi literami zamienionymi na wielkie, a wielkimi na małe. title() zwraca kopię napisu zamienioną na strukturę tytułu, to znaczy każdy wyraz napisu zostaje zamieniony na rozpoczynający się wielką literą z pozostałymi literami zamienionymi na małe. upper() zwraca kopię napisu z wszystkimi literami zamienionymi na wielkie litery. zfill(szerokość) zwraca napis uzupełniony z lewej strony zerami do podanej szerokości. W przypadku, gdy wartość argumentu jest mniejsza od długości napisu, zostanie zwrócony oryginalny napis.
Krotka Krotka (ang. tuple) to struktura danych będąca odzwierciedleniem matematycznej n-ki, tj. uporządkowanego ciągu wartości. Elementy krotki nie muszą być tego samego typu. Krotki są niemodyfikowalne, ale ich elementy mogą być wartościami typów modyfikowalnych. Odczyt elementu krotki wymaga podania indeksu liczbowego żądanego elementu. Na przykład: t = () # krotka pusta t = (6,) # krotka jednoelementowa
Przykład 3 >>> film = "Rejs", 1970 film ( Rejs, 1970) >>> film[0] Rejs >>> film[1] 1970 >>> film = ("Rejs", "film komiediowy", 1970, "Marek Piwowski", "Wojciech Kilar") >>> film[2] 1970 # Rozpakowanie >>> tytul, gatunek, rok, rezyseria, autor_muzyki = film >>> rezyseria Marek Piwowski
Funkcje zwracające krotki Funkcja może zawsze zwrócić tylko jedną wartość, ale poprzez zgrupowanie dowolnie wielu wartości w krotkę, może zwrócić ją jako pojedynczą wartość. def main(): a = float(input("a= ")) b = float(input("b= ")) ekstrema = min_max(a,b) print('min: ', ekstrema[0], 'max: ', ekstrema[1]) def min_max(a,b): min = max = a if a < b: min = a max = b elif a > b: min = b max = a return (min, max, pole) main()
Listy Do grupowania różnych wartości najbardziej użytecznym typem jest lista, którą można zapisać jako listę elementów poprzedzielanych przecinkami, umieszczoną w kwadratowych nawiasach. Elementy listy nie muszą być tego samego typu! np. zakupy = ['chleb', 1.95, 'mleko', 2.19, 'masło', 3.20] Elementy listy są indeksowane. Indeksy listy zaczynają się od 0. print(zakupy[0], zakupy[2], zakupy[4])
Listy Listy mogą być przedmiotem operacji wykrawania, sklejania itd., np. >>> zakupy = ['chleb', 1.95, 'mleko', 2.19, 'masło', 3.20] >>> zakupy[1:-1] [1.95,'mleko',2.19,'masło'] >>> zakupy[:2] + ['sałata', 2 * 2.2] ['chleb',1.95,'sałata',4.4] >>> 2 * zakupy[:3] + ['koniec'] ['chleb',1.95,'mleko','chleb',1.95,'mleko','koniec'] Można zmieniać poszczególne elementy listy. >>> zakupy = ['chleb', 1.95, 'mleko', 2.19, 'masło', 3.20] >>> zakupy[1] += 0.23 >>> zakupy ['chleb', 2.18, 'mleko', 2.19, 'masło', 3.20]
Operacje na listach lista = ['a', 'b', 6, 12] >>> lista[0:2] = [1, 2] # Zastępujemy pewne elementy: >>> lista [1, 2, 6, 12] >>> lista[0:2] = [] # Usuwamy pewne elementy: >>> lista [6, 12] >>> lista[1:1] = ['c', 'd'] # Wstawiamy pewne elementy: >>> lista [6, 'c', 'd ', 12] >>> lista[:0] = lista # Wstaw kopię samego siebie na początek: >>> lista [6, 'c', 'd ', 12, 6, 'c', 'd', 12] >>> lista[:] = [] # Czyści listę: >>> lista []