Blog JSystems - uwalniamy wiedzę!

Szukaj

 

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.

 

Funkcje wbudowane

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

 

Upper

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!

 

Lower

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!

 

Title

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

 

Replace

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

 

len w kontekście ciągów tekstowych

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

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!

 

Strip

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!

 

split i join - zamiana tekstu na listę i listy na tekst

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']

 

Łańcuchy funkcji

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

 

Iterowanie po łańcuchach tekstowych

Po literach w łańcuchach tekstowych można iterować. Jest nawet specjalny rodzaj pętli który przechodzi po literach:

nazwa="Llanfairpwllgwyngyllgogerychwyrndrobwlll­lantysiliogogogoch"
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.

 

Mnożenie tekstu. Ale jak?

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.

 

Wygodne sprawdzanie czy tekst zawiera frazę

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.

 

Czy Python>Java?

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.

 

Cięcia, cięcia - o cięciu łańcuchów tekstowych słów kilka

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])

 

Najczęściej zadawane pytania

Mnożenie tekstu. Ale jak?
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
Czy Python>Java?
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:

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...