Zmienne typu "string" będąc tak naprawdę obiektami klasy string posiadają wbudowane funkcje, pozwalające nam na wykonywanie na tych zmiennych różnorakich operacji.
W poniższym zestawieniu prezentuję tylko wybrane funkcje wbudowane, te które uznałem za użyteczne. Pełniejsze zestawienie można znaleźć na przykład tu: https://www.w3schools.com/python/python_ref_string.asp
Funkcja upper powiększa ciąg znaków:
napis="ministerstwo do spraw niezbyt istotnych spraw"
print(napis.upper())
powyższy kod wydrukuje na konsoli tekst:
MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW
Zwróć uwagę, że funkcja upper zwraca powiększony ciąg znaków, a nie zmienia zawartości zmiennej napis!
Funcja lower pomniejsza ciąg znaków:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.lower())
Wynikiem działania tej funkcji będzie poniższy ciąg tekstowy na konsoli:
ministerstwo do spraw niezbyt istotnych spraw
Zwróć uwagę, że funkcja lower zwraca pomniejszony ciąg znaków, a nie zmienia zawartości zmiennej napis!
Funkcja title powiększa pierwsze litery wszystkich wyrazów w ciągu, a pomniejsza pozostałe litery.
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.title())
Powyższy kod wydrukuje na konsoli komunikat o takiej treści:
Ministerstwo Do Spraw Niezbyt Istotnych Spraw
Ta funkcja pozwala zamieniać wybrane znaki lub ciągi na inne:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.replace("I","X"))
W ten sposób wydrukujemy na konsoli to:
MXNXSTERSTWO DO SPRAW NXEZBYT XSTOTNYCH SPRAW
Funkcja len nie jest związana bezpośrednio z klasą string, nie jest funkcją wbudowaną. Jest jednak często wykorzystywana w odniesieniu do łańcuchów tekstu, dlatego tu się pojawia. Jeśli do funkcji len podamy ciąg tekstowy, zwróci nam ona ilość znaków zawartych w tym ciągu.
x=len("MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW")
print(x)
wyświetli nam na konsoli 45.
Count zlicza ilość wystąpień danego ciągu lub znaku w łańcuchu tekstowym:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.count('IS'))
Powyższy kod drukuje na konsoli liczbę 2, ponieważ tyle razy występuje w ciągu "IS". Uwaga - ta funkcja zwraca uwagę na wielkość liter!
Funkcja strip służy do usuwania białych (domyślnie bez parametru) lub wskazanych znaków lub ciągów.
napis=" MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW "
print(napis.strip())
Przykładowy kod wyświetli na konsoli napis pozbawiony na początku i na końcu spacji. Funkcja strip może też przyjąć argument:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.strip("MINI"))
W takim wypadku na konsoli zostanie wypisane:
STERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW
Ponieważ z początku (i ewentualnie z końca jeśli taki ciąg tam też występuje) napisu został usunięty ciąg podany jako parametr funkcji strip. Uwaga - ta funkcja zwraca uwagę na wielkość liter!
Funkcja split służy do dzielenia łańcuchów tekstowych na części i zwraca pod postacią listy wyrazów. Jeśli do funkcji split nie podamy argumentu, funkcja przyjmie że poszczególne wyrazy rozdzielane są spacją. Taki kod:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.split())
zwraca
['MINISTERSTWO', 'DO', 'SPRAW', 'NIEZBYT', 'ISTOTNYCH', 'SPRAW']
Być może widzisz taki format danych po raz pierwszy - to jest lista, rodzaj zbioru zmiennych w Pythonie. Ten typ będziemy jeszcze bardzo szczegółowo omawiać.
Funkcja split może także przyjąć argument, który będzie wskazywał czym poszczególne wyrazy są rozdzielane.
napis="MINISTERSTWO;DO;SPRAW;NIEZBYT;ISTOTNYCH;SPRAW"
print(napis.split(";"))
Powyższy przykład również wyświetli na konsoli ten sam zestaw co wcześniej, przy czym teraz wyrazy były rozdzielane średnikami.
['MINISTERSTWO', 'DO', 'SPRAW', 'NIEZBYT', 'ISTOTNYCH', 'SPRAW']
Ponieważ każda z funkcji łańcuchów tekstowych zwraca zmodyfikowany obiekt tej samej klasy (string), można wywoływać funkcje kaskadowo:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.strip("MINI").title().replace('i','X'))
Każda z tych funkcji będzie wywoływana na ciągu zwróconym przez poprzednią. Z napisu najpierw zostanie usunięte początkowe "MINI", następnie w zwróconym ciągu zostają powiększone pierwsze litery każdego wyrazu, by na końcu podmienić wszystkie małe i na duże X. Powyższy kod wyświetli na konsoli ciąg:
Sterstwo Do Spraw NXezbyt Istotnych Spraw
Po literach w łańcuchach tekstowych można iterować. Jest nawet specjalny rodzaj pętli który przechodzi po literach:
nazwa="Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch"
for n in nazwa:
print(n)
W wyniku działania tego kodu na konsoli zostaje wyświetlona każda z liter z ciągu w kolejnych liniach. "n" jest niejawnie deklarowaną w ramach pętli (i widoczną tylko w jej ramach) zmienną reprezentującą przy każdym obrocie pętli kolejną literę z ciągu. Ciekawostka - ten ciąg który przypisałem do zmiennej "nazwa", nie jest jak może się wydawać przypadkowym ciągiem znaków. To najdłuższa na świecie nazwa miejscowości. Mieści się ona w Walii.
kriszna= "rama "*5+" "+5*"hare "
print(kriszna)
Wygląda to tak, jakbyśmy mnożyli tekst razy liczbę, a to przecież nie możliwe. Chodzi jednak o co innego. Wydruk zmiennej kriszna wyrzuca na konsolę:
rama rama rama rama rama hare hare hare hare hare
....i teraz wszystko powinno być jasne. Mnożenie oznacza po prostu powtórzenie danej frazy n razy.
Czasem musimy sprawdzić czy gdzieś w tekście znajduje się jakiś znak lub fraza. Jest do tego bardzo wygodna konstrukcja:
if ("X" in "SpaceX"):
print("ten ciąg zawiera X!")
W miejsce X możesz podstawić też dowolną frazę. Ten sam efekt można osiągnąć na przykład wbudowaną funkcją count.
Tytuł tego podrozdziału to trochę trolling, ale w Pythonie faktycznie można to sprawdzić (z przewidywalnym skutkiem ;) ). Sprawdźmy zatem:
if("Python">"Java"):
print("to chyba jasne :) Tu jest miejsce na hejt: ...............")
else:
print("coś się spsuło...")
Z jakiegoś powodu ten kod wyświetlił na konsoli komunikat:
to chyba jasne :) Tu jest miejsce na hejt: ...............
I to wcale nie jest jakiś żart twórców Pythona. To jest po prostu sprawdzenie czy fraza "Python" znalazłaby się po frazie "Java" gdyby ułożyć je alfabetycznie.
Z łańcuchów stosunkowo łatwo jest wycinać fragmenty na podstawie pozycji znaków. Zaczniemy od wycięcia pojedynczego znaku:
lancuch="123456789"
print(lancuch[2]
Zadeklarowałem łańcuch "łańcuch". Dla wygody umieściłem w nim kolejne cyfry, by można było szybko weryfikować działanie wycinania. Wszystkie kolejne przykłady w tym podrozdziale będę opierał na tej samej zmiennej. Korzystając z nawiasów kwadratowych, podając między nimi liczbę mogę pobrać pojedynczy znak z wskazanej pozycji. Pisząc [2] nie wyciągam jednak znaku z drugiej, a z trzeciej pozycji. Pamiętać należy o tym że w Pythonie liczymy od zera.
W ten sam sposób możemy podawać pozycję od końca.
print(lancuch[-2])
Taki zapis będzie oznaczał pobranie drugiego znaku od końca. W naszym przypadku będzie to 8.
print(lancuch[2:5])
Powyższy przykład wycina znaki "345". To jest wycinanie na zasadzie - od pozycji do pozycji. Tutaj obowiązuje ta sama zasada niedomkniętego z prawej strony zbioru jak w przypadku funkcji range.
W taki sposób:
print(lancuch[:5])
wytniemy początek łańcucha - do piątej (czyli szóstej) pozycji bez niej samej, czyli w tym przypadku będzie to "12345" Możemy też podawać pozycję od końca. Poniższy kod wytnie ciąg "123456", czyli bez ostatnich trzech pozycji.
print(lancuch[:-3])
Możliwe jest też też przeskakiwanie co któryś znak. W poniższym przykładzie z ciągu wyciętego od pierwszej do siódmej pozycji wycinam co drugi znak. Uruchomienie tego kodu spowoduje wyświetlenie ciągu "135":
print(lancuch[0:6:2])
Gdybyśmy chcieli wyciąć z całego tekstu co drugi znak, moglibyśmy to zrobić w sposób mało czytelny:
print(lancuch[0:len(lancuch):2])
Albo nieco bardziej przaśny:
print(lancuch[::2])
Komentarze (0)
Brak komentarzy...