Loeng 2: Omistusoperaator, muutuja, sõne indekseerimine, sõne meetodid, sõne vorming, f-string, r-string, list, korteez, hulk, kujutus, lausend del
.¶
Koodinäited¶
Omistusoperaator =
ja muutujad¶
Muutuja on nimega varustatud koht arvuti mälus väärtuste salvestamiseks. Muutuja kasutamine programmis teeb võimalikuks andmete meeleshoidmise programmi töötamise jooksul. Muutujale saab väärtusena omistada erinevate andmetüüpide andmeid. Muutuja on andmete kohahoidija. Python loob muutuja selle esmasel mainimisel ehk deklareerimisel. Muutujale saab valida nime meelevaldselt (PEP 8 soovitus: väikeste tähtedega, inglise keeles, mittelühendatud, sõnad eralda kasutades _
).
muutuja = 'Python'
muutuja
'Python'
x = 55
y = 88
x + y
143
z = x + y
z
143
minu_muutuja = 'Python' + ' on madu.'
print(minu_muutuja)
Python on madu.
Python lubab ühes reas omistada väärtusi mitmele muutujale korraga:
a, b, c = 5, 6, 7
print(a)
print(b)
print(c)
5 6 7
a, b = b, a
print(a)
print(b)
6 5
Sõne indekseerimine (string indexing)¶
Sõne ehk tekst on üks Pythoni sisseehitatud andmetüüpidest. Sõne sümbolid (tähed) on indekseeritud. Indekseerimine algab 0-st. Sümbolitele viitamiseks kasutame kandilisi sulge.
P | y | t | h | o | n |
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 |
-6 | -5 | -4 | -3 | -2 | -1 |
'Python'[2]
't'
'Python'[-4]
't'
Sõnega opereerimine (string slicing), sõne lõikudeks jagamine:
a = "Juulius Tipikas on hingaja."
print(a[:]) # Kõik sümbolid.
print(a[3:]) # Alustame indeksist 3 (3 kaasaarvatud).
print(a[-3:]) # Alustame indeksist -3 (-3 kaasaarvatud).
print(a[:3]) # Kuni indeksini 3 (3 pole kaasaarvatud) .
print(a[1:5]) # Vahemik/lõik, alustame 1ga lõpetame 5ga (5 pole kaasaarvatud).
print(a[5:15:2]) # [algus:lõpp(pole kaasatud):samm]
print(a[-1:-15:-1]) # Tagurpidi
print(a[::-1]) # Kõik sümbolid, tagurpidi
Juulius Tipikas on hingaja. lius Tipikas on hingaja. ja. Juu uuli u iia .ajagnih no sa .ajagnih no sakipiT suiluuJ
Kasutamise näide:
uus_a = a[:19] + 'maskott.'
print(uus_a)
Juulius Tipikas on maskott.
Sõne on muutumatu (immutable) andmetüüp, loodud sõne sümboleid pole võimalik muuta:
muut = 'Python'
muut[0] = 'R'
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[11], line 2 1 muut = 'Python' ----> 2 muut[0] = 'R' TypeError: 'str' object does not support item assignment
Kui sul on vaja tähte (või tähti) ikkagist muuta siis võid käituda järgmiselt:
'R' + muut[1:]
'Rython'
Sõne ja spetsiaalsed sümbolid (escape characters)¶
Kaldkriips (escape tag) \
lubab sisestada sümboleid.
Spetsiaalse tähendusega süblolid:
Sümbol | Tähendus |
---|---|
\n |
uus rida |
\t |
taane (tabulatsioon) |
\r |
rea algusesse |
\\ |
kaldkriips |
print('Python\'Python') # Vt. eelmine nädal.
Python'Python
print('Juuliuse \nisa on \n\tarst ja ema on\nnahkhiir.')
Juuliuse isa on arst ja ema on nahkhiir.
Sõne meetodid¶
Sõnele (tähemärkide kogum) kui Pythoni andmetüübi objektile on võimalik rakendada sellega kaasaskäivaid meetodeid. Andmetüübi objekt ja selle meetodid on defineeritud Pythoni klassi abil. Klassi mõistet arutame tulevastes loengutes. Joonis 1 kujutab visuaalselt programmeerimist Pythonis, leia jooniselt objekti meetodid.
Joonis 1. Programmeerimine Pythonis. |
Meetodit rakendame kasutades .
. Olemasolevate meetodite järelevaatamiseks vajuta Tab, meetodi dokumentatsiooni ja abiinfo lugemiseks vajuta Shift + Tab. Meetodi nime autocompliitimiseks vajuta Tab.
"Juulius Tipikas on hingaja.".count('u')
3
a = "Juulius Tipikas on hingaja."
a.count("p")
1
a.upper()
'JUULIUS TIPIKAS ON HINGAJA.'
a.lower()
'juulius tipikas on hingaja.'
a.split()
['Juulius', 'Tipikas', 'on', 'hingaja.']
a.replace('Juulius', 'Juulia')
'Juulia Tipikas on hingaja.'
b = 'kool'
b.capitalize()
'Kool'
a.index('Tip')
8
Kõigi objektiga seotud meetodite konsoolis järelvaatamiseks kasuta sisseehitatud funktsiooni dir
.
#dir(a) # Interpretreeri iseseisvalt.
Sõne vormindamine (string formatting), muutujad, format
meetod¶
Lisainfo: https://docs.python.org/3/library/string.html#custom-string-formatting
nimi = 'Juulius'
tiitel = 'tudeng'
e = 'Nimi on {} ja ta on {} ning ta omab {:.3f} eurot.'.format(nimi, tiitel, 2.18836)
print(e)
Nimi on Juulius ja ta on tudeng ning ta omab 2.188 eurot.
e = 'Nimi on {1} ja ta on {0} ning ta omab {2:.3e} eurot.'.format(nimi, tiitel, 2.18836)
print(e)
Nimi on tudeng ja ta on Juulius ning ta omab 2.188e+00 eurot.
e = 'Nimi on {} ja ta on {:*^10} ning ta omab {:.3g} eurot.'.format(nimi, tiitel, 2.188364*3.234)
print(e)
Nimi on Juulius ja ta on **tudeng** ning ta omab 7.08 eurot.
e = 'Nimi on {1} ja ta on {0:*>10} ning ta omab {2:.3g} eurot.'.format(nimi, tiitel, 2.188364*3.234)
print(e)
Nimi on tudeng ja ta on ***Juulius ning ta omab 7.08 eurot.
e = 'Nimi on {1} ja ta on {0:>10} ning ta omab {2:.3g} eurot.'.format(nimi, tiitel, 2.188364*3.234)
print(e)
Nimi on tudeng ja ta on Juulius ning ta omab 7.08 eurot.
e = 'Nimi on {nimi} ja ta on {tiitel}.'.format(nimi='Juulius', tiitel='sepp')
print(e)
Nimi on Juulius ja ta on sepp.
e = 'Nimi on {tiitel} ja ta on {nimi}.'.format(nimi='Juulius', tiitel='sepp')
print(e)
Nimi on sepp ja ta on Juulius.
points = 19
total = 22
suhe = points/total
print(suhe)
'Vastus: {:.2%}'.format(suhe)
0.8636363636363636
'Vastus: 86.36%'
f-strings (fast string), r-strings (raw string)¶
Ülalmanitud toiminguid saab teostada mugavamalt ja kiiremini.
nimi = 'Juulius'
tiitel = 'tudeng'
a = f'Nimi on {nimi} ja ta on {tiitel} ning ta omab {2.188} eurot.' # Ilma f ei tööta.
print(a)
Nimi on Juulius ja ta on tudeng ning ta omab 2.188 eurot.
print(f'''Nimi on {nimi}
ja ta on {tiitel}.''')
Nimi on Juulius ja ta on tudeng.
r-string ignoreerib sõnes olevate escape tagide tähendusi:
b = r"C:\Home\Documents\#\n"
print(b)
C:\Home\Documents\#\n
a = r"C:\Home\Docum{}ents\#\n".format(' BUG ')
print(a)
C:\Home\Docum BUG ents\#\n
Valik andmehulki ehk mitme väärtusega sisseehitatud andmetüüpe:¶
Allolevatel andmetüüpide objektidel on sarnaselt sõnele olemas meetodid . Uuri iseseisvalt mis meetodid eksisteerivad ja kuidas need töötavad.
Loend, järjend või list (list)¶
Tihti on vaja omistada muutujale mitu väärtust korraga või on meil soov salvestatada mitu väärtust taaskasutamise eesmärgil. Andmetüübid mis toetavad sellist võimalust on järgmised: list, korteez, hulk ja sõnaraamat. Listi elemendid eraldatakse komaga ja need paigutatakse kandiliste sulgude sisse.
lst = [1, 2, 3, 4, 'stop'] # NB! Ära nim. listi 'list'-ks.
lst
[1, 2, 3, 4, 'stop']
lst[:3]
[1, 2, 3]
Lausendit del
kasutame loendi ja muude andmetüübi objektide kustutamiseks. See lausend lubab kustutada ka listi elemendi või mitu elemeti korraga.
del lst[:3]
lst
[4, 'stop']
del lst
lst
--------------------------------------------------------------------------- NameError Traceback (most recent call last) Cell In[39], line 2 1 del lst ----> 2 lst NameError: name 'lst' is not defined
Tühja listi on võimalik defineerida järgmiselt. Listil on meetodid append
, insert
ja extend
mille abil saame sellele objekte lisada.
lst = [] # Tühi list
lst.append(1) # Lisan sellele numbri 1.
lst
[1]
Korteez või ennik (tuple)¶
Korteez on muutumatu (immutable) andmetüüp st., et defineeritud korteezi elemete ei saa muuta ega kustutada nii nagu seda saab teha listis. Korteezi elemendid paigutatakse sulgude sisse:
tpl = (1, 2, 3, 'stop') # Ära kasuta nime 'tuple'.
tpl
(1, 2, 3, 'stop')
NB!: Ühe elemendiga korteezi defineerimine:
tpl = (22, )
tpl
(22,)
tpl = 23,
tpl
(23,)
Tühja korteezi on võimalik defineerida järgmiselt.
tpl = ()
tpl
()
Enniku loomisel pole tegelikult sulge vaja. Koodi kirjutamisel püüame sellist kirjapilti vältida (v.a. funktsiooni defineerimisel, peale lausendit return
). Tulevastes loengutes laiendame seda teemat.
tpl = 1, 2, 3
tpl
(1, 2, 3)
tpl = 1,
tpl
(1,)
Hulk (set)¶
Hulk on järjestamata unikaalseid elemente sisaldav andmetüüp. Hulga elementideks saavad olla ainult muutumatud (immutable) objektid. Hulka pole võimalik pesastada hulga sisse, vt. eelmine lause. Unikaalsus tähendab, et korduvad liikmed ignoreeritakse. Hulga elemedid paigutame loogelistesse sulgudesse:
st = {1, 22, 3, 4, 4, 'stop'} # Ära kasuta nime 'set'.
st
{1, 22, 3, 4, 'stop'}
Järjestamatus tähendab, et indekseerimist ei teostata ning puuduvad indekseerimisega seotud meetodid.
st[1]
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[48], line 1 ----> 1 st[1] TypeError: 'set' object is not subscriptable
Tühja hulga defineerime järgmiselt (vt. vr. järgmine lõik). Hulgal on meetodid add
ja update
mille abil saame sellele objekte lisada.
st2 = set() # set on sisseehitatuud funktsioon.
st2.add(1)
st2
{1}
Kujutus või sõnaraamat (dictionary)¶
Sõnaraamat on andmetüüp mis sisaldab ja seob võtmesõnu ja neile vastavate väärtuste paare. Võtmesõna abil viitame kindlale väärtusele. Võtmesõna peab olema muutumatu (immutable) objekt.
Sõnaraamatut saab deklareerida süntaktiliselt kolmel erineval viisil:
dic = {'key1':'value1', 'key2':'value2'} # Ära kasuta nime 'dict'.
print(dic)
print(dic['key1']) # Viitame võtmesõnaga.
{'key1': 'value1', 'key2': 'value2'} value1
dic2 = dict(key1='value1', key2='value2') # dict on sisseehitatud funktsioon.
print(dic2)
print(dic2['key1'])
{'key1': 'value1', 'key2': 'value2'} value1
dic3 = dict([('key1', 'value1'), ('key2', 'value2')]) # Listi asemel sobib ka ennik, hulk.
print(dic3)
print(dic3['key1'])
{'key1': 'value1', 'key2': 'value2'} value1
Kasutamise näiteid:
car = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(car)
print(car['model'])
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964} Mustang
dic2 = {1:'value1', 2:'value2', 3:'value3'}
print(dic2)
print(dic2[1])
{1: 'value1', 2: 'value2', 3: 'value3'} value1
dic3 = {1:66, 5:77, 3:88}
print(dic3)
print(dic3[5])
{1: 66, 5: 77, 3: 88} 77
dic5 = {(0, 1):'value1', (1, 1):'value2'}
print(dic5)
print(dic5[(0, 1)]) # Korteez on muutumatu.
{(0, 1): 'value1', (1, 1): 'value2'} value1
Lisame uue võtmesõna ja väärtuse paari olemasolevale kujutusele car
:
car['color'] = 'red'
print(car)
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964, 'color': 'red'}
Tühja kujutuse defineerime järgmiselt. Uusi andmeid saame lisada kasutades meetodit update
.
dic6 = {}
dic6.update({'key':'value'}) # Lisame uue paari.
dic6.update(car) # Lisame terve kujutuse.
dic6
{'key': 'value', 'brand': 'Ford', 'model': 'Mustang', 'year': 1964, 'color': 'red'}
Omistusoperaator ja mitme elemendiga andmetüübid¶
Operaator =
oskab liste, korteeze, hulki ja sõnaraamatuid lahti pakkida. Teiste sõnadega operaator =
näeb eelmainitud andmetüüpide sisse või nende sisu.
lst = [55, 66, 77]
v1, v2, v3 = lst
print(v1, v2, v3)
55 66 77
tup = (55, 66, 77)
v1, v2, v3 = tup
print(v1, v2, v3)
55 66 77
st = {556, 266, 177} # Elemendid järjestamata.
v1, v2, v3 = st
print(v1, v2, v3)
177 266 556
dic = {1:'value1', 2:'value2'}
k1, k2 = dic # Võtmesõnad
v1, v2 = dic.values() # Meetod tagastab väärtused.
print(k1, v1)
print(k2, v2)
kv1, kv2 = dic.items() # Meetod tagastab võtmed ja väärtused.
print(kv1, kv2)
1 value1 2 value2 (1, 'value1') (2, 'value2')