Wykład 6

Transkrypt

Wykład 6
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()
●
●
●
dr
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'
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
[]