Datové typy: čísla a řetězce

Dnes se naučíte používat základní typy v Pythonu:

  • numerické typy jako je int nebo float,
  • řetězce (string).

Numerické typy

Python má zabudované čtyři základní numerické typy:

  1. celá čísla: int (Python 2 měl ještě long)
  2. desetinná čísla: float (odpovídá double v C)
  3. komplexní čísla: complex
  4. logické (boolean): bool
In [1]:
1 + 2 - 3     # int - celá čísla
Out[1]:
0
In [2]:
int1 = 10     # desítková soustava
int2 = 0b10   # binární
int3 = 0x10   # hexadecimální
int4 = 0o10   # osmičková
print("%i, %i, %i, %i" % (int1, int2, int3, int4))
print("To samé binárně")
print("%s, %s, %s, %s" % (bin(int1), bin(int2), bin(int3), bin(int4)))
10, 2, 16, 8
To samé binárně
0b1010, 0b10, 0b10000, 0b1000
In [3]:
print(2 / 3)  # dělení s desetinnou čárkou (vždy v Pythonu 3)
print(2 // 3)  # operátor pro celočíselné dělení
print(2.0 // 3.0)  # a pro desetinná čísla
0.6666666666666666
0
0.0
In [4]:
print("type(1) = %s" % type(1))
# Pro velká celá čísla máme long
print("type(10000000000000000000) = %s" % type(10000000000000000000))   
# Velká celá čísla mohou být faaakt veliká.
velke_cislo = 999**999    
print("999^999 = %d" % velke_cislo)
print("999 ^ 999 má {} cifer.".format(len(str(velke_cislo))))
type(1) = <class 'int'>
type(10000000000000000000) = <class 'int'>
999^999 = 368063488259223267894700840060521865838338232037353204655959621437025609300472231530103873614505175218691345257589896391130393189447969771645832382192366076536631132001776175977932178658703660778465765811830827876982014124022948671975678131724958064427949902810498973271030787716781467419524180040734398996952930832508934116945966120176735120823151959779536852290090377452502236990839453416790640456116471139751546750048602189291028640970574762600185950226138244530187489211615864021135312077912018844630780307462205252807737757672094320692373101032517459518497524015120165166724189816766397247824175394802028228160027100623998873667435799073054618906855460488351426611310634023489044291860510352301912426608488807462312126590206830413782664554260411266378866626653755763627796569082931785645600816236891168141774993267488171702172191072731069216881668294625679492696148976999868715671440874206427212056717373099639711168901197440416590226524192782842896415414611688187391232048327738965820265934093108172054875188246591760877131657895633586576611857277011782497943522945011248430439201297015119468730712364007639373910811953430309476832453230123996750235710787086641070310288725389595138936784715274150426495416196669832679980253436807864187160054589045664027158817958549374490512399055448819148487049363674611664609890030088549591992466360050042566270348330911795487647045949301286614658650071299695652245266080672989921799342509291635330827874264789587306974472327718704306352445925996155619153783913237212716010410294999877569745287353422903443387562746452522860420416689019732913798073773281533570910205207767157128174184873357050830752777900041943256738499067821488421053870869022738698816059810579221002560882999884763252161747566893835178558961142349304466506402373556318707175710866983035313122068321102457824112014969387225476259342872866363550383840720010832906695360553556647545295849966279980830561242960013654529514995113584909050813015198928283202189194615501403435553060147713139766323195743324848047347575473228198492343231496580885057330510949058490527738662697480293583612233134502078182014347192522391449087738579081585795613547198599661273567662441490401862839817822686573112998663038868314974259766039340894024308383451039874674061160538242392803580758232755749310843694194787991556647907091849600704712003371103926967137408125713631396699343733288014254084819379380555174777020843568689927348949484201042595271932630685747613835385434424807024615161848223715989797178155169951121052285149157137697718850449708843330475301440373094611119631361702936342263219382793996895988331701890693689862459020775599439506870005130750427949747071390095256759203426671803377068109744629909769176319526837824364926844730545524646494321826241925107158040561607706364484910978348669388142016838792902926158979355432483611517588605967745393958061959024834251565197963477521095821435651996730128376734574843289089682710350244222290017891280419782767803785277960834729869249991658417000499998999
999 ^ 999 má 2997 cifer.

Výpočty s desetinnými čísly jsou standardní, pozor na konečnou přesnost

In [5]:
3.1 * (0.2 - 0.1)**2
Out[5]:
0.031000000000000007

Python umí komplexní čísla

In [6]:
abs(1 - 1j)
Out[6]:
1.4142135623730951

S boolovskými hodnotami se pracuje snadno

In [7]:
b = True      # boolean
print(not b)  # logický operátor not
False

Řetezce -- string a unicode

Python obsahuje typy str a unicode (Python 3 je sjednocuje do builtins.str) a bohatou sadu funkcí pro práci s nimi. Ty jsou implementovány jednak jako metody (o třídách a metodách více později), jednak v modulech string, StringIO, re a dalších.

In [8]:
a = 3 * ("Abc%i" % 3) + "!"  # string lze vytvořit například takto
print(a)
Abc3Abc3Abc3!

Můžeme přistupovat k jednotlivým částem řetězce pomocí indexů

In [9]:
print(a[0])        # první znak řetězce
print(a[0:-1])     # všechny znaky kromě posledního
print(a[-1:None])  # poslední znak (None lze vynechat)
A
Abc3Abc3Abc3
!

Metoda format umožňuje pokročilé formátování textu.

In [10]:
a = '{0}{1}{0}'.format('abra', 'cad')  # metoda format
print(a)
print(a.upper())  # metoda upper
print(a.find("ra"))  # jednoduché hledání
print(a.upper().split('A'))  # rozdělení dělícím znakem
abracadabra
ABRACADABRA
2
['', 'BR', 'C', 'D', 'BR', '']

Modul string obsahuje další funkce.

In [11]:
import string       # načtení modulu string
print(dir(string))  # výpis obsahu modulu
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']

vyzkoušíme capwords

In [12]:
print(string.capwords("titles in english use capital first letters."))
Titles In English Use Capital First Letters.

Konverze typů

Python je silně typovaný, pamatujete? Typy lze ale převádět.

In [13]:
# str -> int
int("2")
Out[13]:
2
In [14]:
# str -> float
float("2")
Out[14]:
2.0
In [15]:
# float -> str
str(3.14)
Out[15]:
'3.14'

Projekt - oko bere

(kredit https://naucse.python.cz/course/pyladies/beginners/while/)

Doplňte cybějící části označené ??? a opravte chyby, aby fungoval program na hru oko bere:

In [16]:
import random

soucet = 0
while ???:
    print('Máš', soucet, 'bodů')
    odpoved = input('Otočit kartu? ')
    if odpoved == 'ano':
        ??? = random.randrange(2, 11)
        print('Otočil/a jsi', karta)
        soucet = ???
    elif ???:
        break
    else:
        ???

if soucet == 21:
    print('Gratuluji! Vyhrál/a jsi!')
???
    print('Smůla!', soucet, 'bodů je moc!')
else:
    print('Chybělo jen', 21 - soucet, 'bodů!')
  File "<ipython-input-16-635bf33be96c>", line 4
    while ???:
          ^
SyntaxError: invalid syntax

Vylepšete předchozí kód, aby

  1. se zeptal na počet otáčených karet
  2. hráč vyhrál, pokud má součet méně nebo rovno 21 a soupoeř (počítač) má méně bodů než hráč. Skóre počítače generujte pomocí random.normalvariate.

Nápověda - použijte konverzi str na int.

In [ ]:
 

Komentáře

Comments powered by Disqus