6. Základní typy#
Dnes se naučíte používat základní typy v Pythonu:
numerické typy jako je
int
nebofloat
,řetězce (
string
).
6.1. Numerické typy#
Python má zabudované čtyři základní numerické typy:
celá čísla:
int
(Python 2 měl ještělong
)desetinná čísla:
float
(odpovídá double v C)komplexní čísla:
complex
logické (boolean):
bool
1 + 2 - 3 # int - celá čísla
0
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
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
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
3.1 * (0.2 - 0.1)**2
0.031000000000000007
Python umí komplexní čísla
abs(1 - 1j)
1.4142135623730951
S boolovskými hodnotami se pracuje snadno
b = True # boolean
print(not b) # logický operátor not
False
6.2. Ř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.
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ů
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.
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.
import string # načtení modulu string
print(dir(string)) # výpis obsahu modulu
['Formatter', 'Template', '_ChainMap', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_sentinel_dict', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']
vyzkoušíme capwords
print(string.capwords("titles in english use capital first letters."))
Titles In English Use Capital First Letters.
6.3. Konverze typů#
Python je silně typovaný, pamatujete? Typy lze ale převádět.
# str -> int
int("2")
2
# str -> float
float("2")
2.0
# float -> str
str(3.14)
'3.14'
Projekt - oko bere#
(kredit https://naucse.python.cz/course/pyladies/beginners/while/)
Cílem hry je získat součet karet co nejblíže k 21, ale nepřekročit tuto hodnotu
Hráč dostává postupně karty (hodnoty 2-10) a rozhoduje se, zda chce další
Pokud součet karet přesáhne 21, hráč prohrává (“přetáhl”)
Pokud hráč získá přesně 21 bodů, vyhrává
Pokud se hráč zastaví pod 21 bodů, vyhrává pouze pokud má více bodů než protihráč
Doplňte chybějící části označené ??? a opravte chyby, aby fungoval program na hru oko bere (zjednodušená verze bez protihráče):
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ů!')
Vylepšete předchozí kód, aby
se zeptal na počet otáčených karet
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
.