× Aktuálně z oboru

Programátoři po celém světě dnes slaví Den programátorů [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]
Celá zprávička [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]

Python - 3. lekce

[ http://programujte.com/profil/120-pavel-kosina/ ]Google [ :5:?rel=author ]       [ http://programujte.com/profil/118-zdenek-lehocky/ ]Google [ ?rel=author ]       10. 6. 2005       81 380×

Práce s řetězci je jednou z velmi silných stránek jazyka Python. Řetězec je prostě text. Jedno písmeno, slovo, nebo celá věta či dokonce mnoho vět. Řetězce v Pythonu poznáte jednoduše – jsou v uvozovkách a většinou se v editorech zobrazují zeleně. Také se s nimi jednoduše pracuje. Když budete trochu pečliví, Python pod vaším vedením zvládne v řetězcích i češtinu se vším všudy. Podívejte se dále.


Úvod

V této lekci bych se rád podrobně zaměřil na řetězce, tedy text. Výklad doplníme nějakými příklady a úkolem.

Co je to řetězec

Práce s řetězci je jednou z velmi silných stránek jazyka Python. Řetězce jsou věci, které se uzavírají do uvozovek. Jednoduchých, dvojitých nebo trojitých. Je to celkem jedno, jen na začátku a konci musí být stejné. Trojité se používají u dlouhých textů, které přesahují přes několik řádků.

print "Superstar", 'SuperStar', '''SuperStar''', """SuperStar"""
print '''Zit
a
nechat zit'''

Řetězce jsou neměnné. Pokud je dáme do proměnné, tak to může vypadat, že se mění, ale ve skutečnosti vždy vzniká nová proměnná se stejným jménem, ale jiným obsahem.

jmeno="John"
jmeno=jmeno+' Lennon'

Paradox v porovnání s čísly. Vyzkoušejte na pythonovském shellu a přemýšlejte proč.

>>> print '2'+'2'
22
>>> print 2+2
4

Divné znaky

Existují tzv. escape [iskejp] znaky, sekvence, které slouží hlavně ke zkracování kódu a zpřehledňování tisku. Jsou to hlavně:

  • \n – Enter, nový řádek
  • \t – tabulátor

Použití:

>>> print "Dny v tydnu \nPondeli\nUtery\n\na tak dale....\n\nNedele"
Dny v tydnu
Pondeli
Utery

a tak dale....

Nedele

Co můžeme s řetězci dělat

Základní operace

Tak hlavně je můžeme:

  • spojovat = sčítat = +
  • klonovat = násobit celým číslem = *
  • můžeme také zjišťovat jejich délku = len(retezec) = kolik obsahuje znaků
  • umíme i načíst od uživatele nějaký text
pozdrav="ahoj"
pozdrav2= pozdrav+" Elisko"
print pozdrav2
print pozdrav*10

print len(pozdrav)  # kolik je v retezci znaku?
barva=raw_input('Jaka je tva oblibena barva?: ')

Pokročilejší funkce

Úplný přehled všech funkcí najdete samozřejmě v manuálu, zde jen pár.

  • Můžeme nechat text (větu) rozdělit na jednotlivá slova do seznamu.
  • Převod z řetězce na obyčejné číslo (pokud je v řetězci jen číslo) a naopak.
veta="Kobyla ma maly bok"
veta2= veta.split()  # vznikne seznam slov  
print veta2 

cisloText="2"
cisloObycejne= int(cisloText)
print type(cisloObycejne)
print cisloObycejne + 2  # vysledek je 4

cisloText=str(44)
print cisloText*2        # vysledek neni 88, ale .... 
print type(cisloText)

Přístup k jednotlivým písmenkům

V každém řetězci je vždy první, druhé, …, poslední písmeno. I v Pythonu tomu tak je, až na malý rozdíl, že první písmeno má index 0, tedy je to nulté písmeno. Logicky tedy poslední písmeno má index nebo-li pořadí délka-1; častěji se však říká, že má index jen −1. Na přístup k jednotlivým písmenům, znakům se používají hranaté závorky.

>>> pozdrav = "Ahoj"
>>> print pozdrav[0] # první = (nultý) prvek
A
>>> print pozdrav[1] # druhý prvek
h
>>> print pozdrav[-1] # poslední prvek, záporné indexy značí pořadí od konce
j
>>> delka=len(pozdrav)
>>> print delka
4
>>> posledniIndex=delka - 1
>>> print posledniIndex
3
>>> print pozdrav[posledniIndex] # posledni pismeno jinak

Umíme i provádět tzv. řezy, tj. vyjmout ze slova, věty jen určitou část:

>>> obsah="Zaciname s Pythonem"
>>> print obsah[11:17]
Python

Procházíme větou a provádíme operace nad znaky

Nedovedu si představit snadnější průchod textem, než má Python. Více než intuitivně se používá cyklus FOR.

veta="Kobyla ma maly bok"

for znak in veta:
    print znak
    if znak=="a":
        print "Nasel jsem 'a'"

Cyklus prochází jednotlivými znaky, postupně je pod sebe tiskne a když (IF) narazí na znak "a", tak něco něco vykoná.

Je ve větě to písmeno?

Na jednoduché zjišťování přítomnosti písmene stačí IF. Pokud bychom ale již chtěli vědět, kolikrát tam je, musíme použít výše uvedený cyklus FOR nebo nějakou funkci.

if "m" in veta:
    print "Veta obsahuje alespon jedno pismeno 'm'"

Čeština v pythonských řetězcích

Protože počítače i všechny základní programy vznikají hlavně v anglicky mluvících zemí, má každý národ problémy s tím, aby do něho dostal svoje jazykové speciality. U nás jsou to nabodeníčka, tedy háčky, čárky. Již jsem i zaslechl názor, že díky Mistrovi Janu Husovi naše národní hospodářství ztrácí milióny korun, protože právě to zavádění nabodeníček do programů stojí nemalé úsilí. S tím rozhodně nemohu souhlasit a tímto mnohokráte děkuji Mistrovi J. Husovi za jeho vylepšení, zkrášlení, zeštíhlení původního tvaru abecedy. Počítače totiž nejsou všechno.

Různé druhy kódování

Historicky zde máme několik druhů kódování (vybírám z PSPadu, nabídka Formát):

  • Windows (cp1250)
  • Latin2 (cp852)
  • ISO 8859-2 (iso-8859-2)
  • UTF8 (utf-8)

Python klade důraz na to, aby pythonské programy s češtinou fungovaly správně ve všech prostředích a platformách. Už když pracujete jen ve Windows v IDLE, tak velmi pravděpodobně, když tam napíšete bez ničeho dalšího české znaky do řetězců, to bude pod IDLE běhat správně. Jakmile to ale spustíte z Total Commanderu, a tedy v DOSu, tak tam již budete mít paznaky.

Je třeba dodržet 3 hlavní zásady

  • Na prvním řádku uvést pythonskou definici kódování, tedy např.:
    # -*- coding: cp1250 -*-
  • V tom stejném kódování to uložit – v PSPadu navolit menu Format → Windows a uložit.
  • Před všechny řetězce dát kouzelný znak 'u', tedy např.:
    # -*- coding: cp1250 -*-
    
    veta=u"Žluťoučký kůň pěl ďábelské ódy."
    print veta

    'u' znamená Unicode. U začátečnických programů nicméně jsou důležitější věci než čeština, takže jsem to zde uvedl jen pro pořádek. Není zatím třeba tomu věnovat velkou pozornost. Problém může nastávat hlavně u raw_input(), ale jak jsem říkal, zatím bych zůstával u cestiny bez hacku a carek. U okenních programů pak již čeština funguje bez problémů – používá se převážně utf-8. Ale o tom později.


Úkol

Na vstupu je dána věta: "Python je skvely objektove orientovany, interpretovany a interaktivni programovaci jazyk."

Zajímá mě:

  • Kolik obsahuje znaků a slov?
  • Kolik je tam písmen 'a', 'e' a mezer?
  • Vytiskněte slovo "python" tolikrát, kolikrát je tam písmeno 'e'
  • Je tam písmeno 'x'?
  • Vytiskněte větu v obráceném pořadí písmen.
  • Vytiskněte první, prostřední a poslední písmeno.
  • 12. písmeno vytiskněte 50×.
  • Sestavte novou větu, kde budou všechna 'a' nahrazena za 'A'.
  • Vymyslete a zpracujte jeden úkol k této větě sami.

Extra úkol (nepovinný)

  • Jaké všechny znaky jsou ve větě? (stačí jaké, ne kolik) Tip: bez seznamů to asi nepůjde…

Je možné, že jsem neprobral vše, co máte v úkolu. Hledejte tedy v Helpu, v učebnicích, nebo se ptejte. Na všechna řešení se těším.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2005060801-python-3-lekce/ ].