Martin Svoboda

Martin Svoboda - Blog

Proměnné 4: řetězce (str)


Tento článek je trochu delší a pokrývá vše podstatné o práci s řetězci v Pythonu. Bylo mi líto článek děli na menší části a tak si článek klidně rozděl na menší části a projdi si ho postupně.

Pojďme si začít hrát s textem 🙂 V programování se text označuje jako řetězec nebo zkráceně str. Řetězce se v Pythonu deklarují buď jednoduchými uvozovkami ', nebo dvojitými uvozovkami ", volba je jenom na tobě.

Můžeš také vytvořit víceřádkový string pomocí tří uvozovek (""" nebo ''') na začátku a tří na konci. Potom se i proměnná vypíše na více řádků.

Na příkladu můžeš vidět co tím myslím 🙂. Práce se stringy se jinak neliší od práce s číselnými proměnnými. Přiřazuje se pomocí = a můžeš je vypsat pomocí funkce print()

Kopírovat
# proměnné string - deklarace

# deklarace prázdného stringu
prazdny_string = ""
print(prazdny_string)   # prázdný řetězec

# deklarace prázdného stringu
prazdny_string = ''

# deklarace prázdného stringu
prazdny_string = """ """
print(prazdny_string)   # prázdný řetězec

# deklarace prázdného stringu
prazdny_string = ''' '''

# deklarace stringu
moje_jmeno = "Martin"
print(moje_jmeno)   # Martin

moje_jmeno = 'Martin'
print(moje_jmeno)   # Martin

moje_jmeno = """Moje jméno je Martin
a rád se učím Python."""
print(moje_jmeno)

moje_jmeno = '''Moje jméno je Martin
a rád se učím Python.'''
print(moje_jmeno)

Cvičení 1: Vytváření řetězců

Vytvoř proměnnou oblibene_jidlo a přiřaď jí hodnotu tvého oblíbeného jídla. Poté proměnnou vypiš jako součást řetězce: “Moje oblíbené jídlo je ….”

Porcování (Slicing)

Textové proměnné se říká string (řetězec), protože jde v podstatě o posloupnost znaků. Každý znak v řetězci můžeš očíslovat a odkazovat se na jednotlivé znaky podle jejich pořadí. K tomu používáme hranaté závorky []. V Pythonu se znaky číslují od 0 (taková už je holt tradice). Navíc můžeš řetězec “porcovat” pomocí dvojtečky. Pomocí čísla za další dvojtečkou můžeš číst pouze každý druhý znak nebo jej číst pozpátku.

Opět koukni na příklad. Projdi si ho řádek po řádku, experimentuj a ujisti se, že všemu rozumíš.

# string - slicing

# deklarace proměnné typu string
moje_jmeno = "Martin"
print(moje_jmeno)   # Martin

# vypíše první znak
#  M  a  r  t  i  n
#  0  1  2  3  4  5
print(moje_jmeno[0])	# M

# vypíše poslední znak
#  M  a  r  t  i  n
#  0  1  2  3  4  5
# -6 -5 -4 -3 -2 -1
print(moje_jmeno[-1])   # n

# vypíše znaky od 2. do 4. pozice
print(moje_jmeno[1:4])  # art

# vypíše znaky od 2. pozice do konce
print(moje_jmeno[1:])   # artin

# vypíše znaky od začátku do 4. pozice
print(moje_jmeno[:4])   # Mart

# vypíše znaky od začátku do konce
print(moje_jmeno[:])	# Martin

# vypíše každý druhý znak
print(moje_jmeno[::2])  # Mri

# vypíše každý druhý znak od 2. pozice
print(moje_jmeno[1::2]) # atn

# vypíše znaky od začátku pozpátku
print(moje_jmeno[::-1]) 	# nitraM

# vypíše znaky od 2. do 4. pozice pozpátku
print(moje_jmeno[-2:-5:-1]) # itr

# vypíše znaky od 4. do 2. pozice
print(moje_jmeno[4:1:-1])   # itr

Kvízy

Kvíz:

Jaký je výstup tohoto kódu?

my_str = "Hello World"
print(my_str[4])
  1. o
  2. l
  3. e
  4. H
Kvíz:

Jaký je výstup tohoto kódu?

my_str = "Hello World"
print(my_str[2:5])
  1. llo
  2. lo W
  3. ll
  4. World
Kvíz:

Jaký je výstup tohoto kódu?

my_str = "Hello World"
print(my_str[::-1])
  1. dlroW olleH
  2. World Hello
  3. olleH dlroW
  4. Hellow World

Cvičení 2: Slicing

Vytvoř proměnnou abeceda a přiřaď jí hodnotu "abcdefghijklmnopqrstuvwxyz". Poté vypiš první, prostřední a poslední znak řetězce.

Escape znaky

Řetězce mohou obsahovat libovolné znaky, jako jsou písmena, číslice, interpunkční znaménka atd. Ale existují znaky se kterými jsou problémy. Napadá tě, které by to mohly být? 🙂 … Co třeba uvozovky 🙂 Uvozovky můžeš do řetězce dostat buď tak, že např. jednoduchou uvozovku dáš do dvojitých ("'") a naopak ('"'). Dalším řešením je použít zpětné lomítko (\"). Uvozovky jsou jen jedním z několika znaků, které vkládáme pomocí zpětného lomítka, další jsou třeba “zpětné lomítko” 😀 (\\), tabulátor (\t) a třeba nový řádek (\n).

# string - příklady excape sekvencí

# vypíše uvozovky
print("\"") # "
print('"')  # "

# vypíše apostrof
print("\'") # '
print("'")  # '

# vypíše zpětné lomítko
print("\\") # \
print('\\') # \

# vypíše tabulátor
print("()") 	# ()
print("(\t)")   #    (   )
print("(	)") #    (   )

# vypíše nový řádek
print("[]") 	# []
print("[\n]")   #    [
            	#    ]
print("""[
]""")     	#    [
          	#    ]

Cvičení 3: Escape znaky

Vytvoř řetězec, který obsahuje nový řádek a tabulátor. Řetězec by měl po vytištění vypadat takto:

Ahoj,
    Svět!

Operátory

Také text má své operátory. Text můžeš sčítat a násobit. Teda můžeš použít operátor pro spojení + dvou řetězců a opakování * dvou řetězců.

# string - použítí operátorů

# string - deklarace
moje_jmeno = "Martin"
pozdrav = "Ahoj"
posmech = "ha"

# operátor + - spojení dvou stringů
print(pozdrav + " " + moje_jmeno + "e, Umíš programovat?") # Ahoj Martine

# operátor * - opakování stringu
print(posmech * 3)  # hahaha

Cvičení 4: Operátory

Vytvoř dva řetězce krestni_jmeno a prijmeni. Přiřaď těmto proměnným své jméno a příjmení. Poté tyto řetězce spoj a vypiš své celé jméno.

Metody

Nyní se dostáváme zase k něčemu novému. V jazyce Python je metoda funkce, která je spojena s objektem, například proměnnou. Metody umožňují provádět akce s objekty (např. proměnnými).

V Pythonu rozlišujeme funkce a metody. S jednou funkcí jsme se setkali, byla to funkce print(). Funkce fungují samostatně a provádějí nějakou akci s tím, co se jim dá jako argument. Zatímco metody se používají pomocí tečkové notace - object.method() a jsou vázány na objekt (proměnnou), která je používá. Proměnná typu int je jiný druh objektu než proměnná typu float nebo str. A každý druh objektu má nějaké vestavěné metody.

Také metody mohou používat další argumenty uvnitř závorek. Výsledkem metody je nějaký nový objekt nebo proměnná, zkrátka výsledek. Tím chci říct, že metody nemění původní objekt, ale vrací nový objekt s výsledkem.

# string - použití metod

moje_jmeno = "martin"

# funkce len() - vrací délku stringu
print(len("martin"))	# 6
print(len(moje_jmeno))  # 6

# metoda capitalize() - vrací string, kde je první písmeno velké
print("martin".capitalize())	# Martin
print(moje_jmeno.capitalize())  # Martin
print(moje_jmeno)           	# martin - původní string zůstává nezměněn

# metoda upper() - vrací string, kde jsou všechna písmena velká
moje_jmeno_velkymi_pismeny = moje_jmeno.upper()
print("martin".upper())     	# MARTIN
print(m

oje_jmeno_velkymi_pismeny)  # MARTIN
print(moje_jmeno)           	# martin - původní string zůstává nezměněn

# metoda lower() - vrací string, kde jsou všechna písmena malá
print("MARTIN".lower())     	# martin

# metoda title() - vrací string, kde jsou všechna slova s velkým počátečním písmenem
print("martin svoboda".title())  # Martin Svoboda

# metoda replace() - vrací string, kde jsou všechny výskyty prvního stringu nahrazeny druhým stringem
print("Ahoj já jsem Martin".replace("Ahoj", "Nazdar"))  # Nazdar já jsem Martin

Více metod najdeš v oficiální dokumentaci jazyka Python: string methods.

Kvízy

Kvíz:

Jaký je výstup tohoto kódu?

my_str = "Hello"
my_str_upper = my_str.upper()
print(my_str)
  1. HELLO
  2. Hello
  3. hello
  4. heLLo
Kvíz:

Jaký je výstup tohoto kódu?

my_str = "Hello"
my_str_upper = my_str.upper()
print(my_str_upper)
  1. HELLO
  2. Hello
  3. hello
  4. heLLo
Kvíz:

Jaký je výstup tohoto kódu?

my_str = "hello world"
my_str_capitalized = my_str.capitalize()
print(my_str_capitalized)
  1. hello world
  2. Hello world
  3. HELLO WORLD
  4. Hello World

Cvičení 5: Vyzkoušejte si tyto řetězcové metody

Vytvoř řetězcovou proměnnou veta a přiřaď do ní větu "rychlá hnědá liška přeskočí líného psa.". Poté použij metody k tomu, abys první písmeno věty napsal velkým písmem a “líného psa” nahradil “línou kočku”.

Kontrolní otázky

Pokud to dokážeš vysvětlit někomu jinému vlastními slovy, tak jsi na dobré cestě tomu rozumět. Dokážeš odpovědět na tyto otázky sám sobě? 🙂

  1. Jak se v Pythonu deklaruje řetězec?
  2. Co je to slicing a jak se v Pythonu používá?
  3. Co jsou to escape znaky a jak se používají v řetězcích?
  4. Jaké operátory lze v jazyce Python použít s řetězci?
  5. Jaký je rozdíl mezi funkcí a metodou v jazyce Python?