Loeng 3: Ülevaade: andmetüübid ja operatorid, numbrisüsteemid, tehete ja avaldiste prioriteetsus; lausend def
, if
laused, voodiagramm, algoritm¶
Koodinäited¶
Pythoni sisseehitatud andmetüübid¶
- None
'NoneType'
— Tühimärk, null - Numbrid
- Integer
'int'
— Täisarv - Floats
'float'
— Kümmnendmurdarv - Complex
'complex'
— Kompleksarv - Boolean
'bool'
— Tõeväärtus
- Integer
- Jadad
- String
'str'
— Sõne - List
'list'
— List, loend - Tuple
'tuple'
— Korteez, ennik - Range
'range'
— Vahemik
- String
- Set
'set'
— Hulk - Map — Kujutus
- Dictionary
'dict'
— Sõnastik
- Dictionary
Andmetüüpidega seotud funktsioonid
Pythoni sisseehitatud andmetüüpe saab deklareerida/luua või teisi andmetüüpe muuta/teisendada soovitud andmetüübiks kasutades sisseehitatud funktsioone: int
, float
, complex
, bool
, str
, list
, tuple
, range
, set
, dict
. NB! Ära kasuta neid funktsiooninimesid enda loodud muutujate nimedena.
tpl = (1, 2, 3)
list(tpl)
[1, 2, 3]
list('Hello')
['H', 'e', 'l', 'l', 'o']
tuple([2, 3, 4])
(2, 3, 4)
tuple('Hello')
('H', 'e', 'l', 'l', 'o')
set('Hello') # Unikaalsus ja järjestus.
{'H', 'e', 'l', 'o'}
set([1, 1, 2, 2]) # Unikaalsus.
{1, 2}
str(2)
'2'
int(2.2)
2
float(2)
2.0
Tühimärk
a = None
print(a)
None
Andmetüübi järgivaatamiseks kasuta sisseehitatud funktsiooni type
:
type(a)
NoneType
Kompleksarvud
z = 2 + 4j
z
(2+4j)
1j
1j
z2 = (-2-3j)
z2
(-2-3j)
z3 = complex(-1, -2)
z3
(-1-2j)
z4 = complex(22)
z4
(22+0j)
type(z)
complex
Joonis 1: Programmeerimine Pythonis ja Pythoni programmi osad. |
z.real # Atribuut, argumendi sulud puuduvad: reaalosa.
2.0
z.imag # Atribuut: imaginaarosa.
4.0
#dir(z) # dir funktsioon väljastab seotud meetodid ja atribuudid.
Süntaksi erinevus atribuudi ja meetodi vahel on järgmine. (Üldjuhul) meetodi nimele järgnevad argumendi sulud koos või ilma argumentideta ja atribuutidel sulud puuduvad kuna argumente pole võimalik atribuudile edastada.
Booli tõeväärtus
Miks numbrite all? Omab numbrilist väärtust.
int(True)
1
int(False)
0
10 * False
0
10 + True
11
type(True)
bool
Sisseehitatud funktsiooni bool
kasutamine, triviaalne ja mittetriviaalne argument:
bool(1) # Mittetriviaalne.
True
bool('Python') # Mittetriviaalne.
True
bool([]) # Triviaalne.
False
bool(0) # Triviaalne.
False
Vahemik
Sisseehitatud funktsioon range
:
type(range(3))
range
list(range(10)) # Algab 0-st ja lõpeb 10-ga (mittekaasaarvatud).
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(3, 10))
[3, 4, 5, 6, 7, 8, 9]
list(range(3, 10, 2)) # NB! Ei toeta murdarvulist sammu.
[3, 5, 7, 9]
list(range(10, 0, -2)) # Toetab negatiivset sammu.
[10, 8, 6, 4, 2]
Pythoni operaatorid, ülevaade¶
Arithmetic operators — aritmeetika operaatorid (tehtemärgid):
+
,-
,*
,/
,@
,%
,//
Operaatorit
-
kasutame ka muutuja märgi muutmiseks:a = 3
, siis-a = -3
.Maatrikskorrutis
@
ei tööta ühegi Pythoni andmetüübiga (loodud kolmandate osapoolte teekides kasutamiseks).Assignment operators — omistuslaused:
=
,+=
,-=
,*=
,/=
,@=
,%=
,//=
,**=
,&=
,|=
,^=
,>>=
,<<=
,:=
Mitme väärtuse samaaegne omistamine:
x, y, z = 3, 5, 6
,a, b, c = [1, 2, 3]
jne.Comparison operators — võrdlus operaatorid:
==
,!=
,>
,<
,>=
,<=
Logical operators — loogika tehtemärgid:
and
,or
,not
Identity operators — identiteedi operaatorid:
is
,is not
Membership operators — koosseisu operaatorid:
in
,not in
Bitwise operators — bitioperatsioonide operaatorid:
&
,|
,^
,~
,<<
,>>
Omistuslaused ja operaatorid: +=
ja teised, :=
¶
+=
tähendus
x = 2
x = x + 1 # Võrdluseks, vt. alla.
x
3
x += 1 # += kasutus: lühem kirjapilt.
x
4
Morsa operaator :=
Kasutatakse muutujatele väärtuste omistamiseks teiste avaldiste sees, nii öelda samalt realt.
print(x := 'Python') # Loob muutuja ja omistab väärtuse avaldiste sees.
Python
Võrdlus operaatorid: ==
, !=
, >
, <
, >=
, <=
¶
5 == 5 # On võrdne.
True
5 != 2 # Mitte võrdne.
True
2 > 5 # Suurem kui.
False
2 < 5 # Väiksem kui.
True
5 >= 5 # Suurem või võrdne.
True
6 <= 5 # Väiksem või võrdne.
False
Python luban võrrelda sama tüüpi jadasid. Võrdlemisel kasutatakse leksikograafilist järjestust (seda teemat eksamile ei tule). Eriveva pikkusega jadade võrdlemisel peetakse lühemat (ja võrdset) jada väiksemaks. Sõnede sümolite korral võrreldakse nende kodeeringu ordinaale (sisseehitatud funktsiooniga ord
järgi vaadatav). NB! See teema pole eksami osa.
[1, 2, 3] == [1, 2, 3] # Element-element haaval ja vasakult paremale.
True
(1, 2, 3) != (1, 2, 4)
True
(1, 2, 3) < (1, 2, 3, -1)
True
(1, 2, 3) < (1, 2, 4)
True
'ABC' < 'C' < 'Pascal' < 'Python'
True
(1, 2, 3, 4) < (1, 2, 4)
True
(1, 2) < (1, 2, -1)
True
(1, 2, 3) == (1.0, 2.0, 3.0)
True
(1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'), 4)
True
Loogika tehtemärgid: and
ja or
¶
True
= 1 või mittetriviaalsed andmetüübid (nt. mittetühi list, jt.).
False
= 0 või triviaalsed andmetüübid (nt. tühi list, None
, jt.).
Tehtemärgi and
tõeväärtustabel:
x | y | Tulem: x and y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
True and True
True
True and False
False
False and False
False
1 and 1
1
1 and 0
0
Tehtemärgi or
tõeväärtustabel:
x | y | Tulem: x or y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
True or True
True
True or False
True
False or False
False
1 or 1
1
1 or 0
1
Lausend not
tähistab eitust:
not True
False
not False
True
Identiteedi operaatorid: is
, is not
¶
Kontrollib kas objektid jagavad sama mälukohta (aadressi).
x, y = 1000, 1000
x is y # Kaks muutujat viitavad samale väärtusele.
True
Kontrollime saadud tulemust kasutades sisseehitatud funktsiooni id
.
id(x) # Funktsioon mis tagastab argumendi identiteedi.
4393474288
id(y)
4393474288
Lausendi not
kasutamine antud kontekstis:
x, y = 500, 500
x is not y
False
Koosseisu operaatorid: in
, not in
¶
Kontrollib kas andmetüübi objekt sisaldab elementi.
s = 'Python'
'P' in s
True
'hon' in s
True
33 in [1, 2, 3]
False
Lausendi not
kasutamine antud kontekstis:
'Q' not in [1, 2, 3, 4]
True
Numbrisüsteemid¶
Erinevate numbrite esitamine ja numbrisüsteemide vahelised teisendused:
Pythoni standardteek toetab kahend- või binaar-, kaheksand-, kümmnend-, ja kuueteistkümnendiksüsteeme. Sisseehitatud funktsioonide bin
, oct
ja hex
abil deklareerime või teisendame arve kahendsüsteemi arvuks, kaheksandiksüsteemi arvuks ja kuueteistkümnendiksüsteemi arvuks.
a = 7
bin(a) # Binaarsüsteemi arv, kahendsüsteem.
'0b111'
oct(a) # Kaheksandsüsteemi arv.
'0o7'
a # Kümnendsüsteemi arv, detsimaalsüsteem.
7
hex(a) # Kuueteistkümnendiksüsteemi arv.
'0x7'
Lisaks saame deklareerida ja opereerida erinevate süsteemide arvudega järgmiselt:
0b010010110101 # Binaarsüsteemi arv.
1205
0o123 # Kaheksandsüsteemi arv.
83
23 # Kümnendsüsteemi arv.
23
0x121b # Kuueteistkümnendiksüsteemi arv.
4635
0b01001 + 0b01001 # Proovi ka teisi operaatoreid.
18
0x121b / 0b01011 # Segatehe.
421.3636363636364
oct(0x121b) # Süsteemide vaheline teisendus.
'0o11033'
Bitioperatsioonide operaatorid: &
, |
, ^
, ~
, <<
, >>
¶
Binaarne süsteem:
Joonis 2: Kümnendsüsteemi arv 6 kahendsüsteemis (neljabitine esitus). |
biti JA - bitwise and: &
Siin rakendame and
tõeväärtustabelit binaarsete arvude vastavatele bittidele paarikaupa.
Joonis 3: 5 & 3 = 1 . |
bin(0b0101 & 0b0011)
'0b1'
5 & 3
1
biti VÕI - bitwise or: |
Siin rakendame or
tõeväärtustabelit binaarsete arvude vastavatele bittidele paarikaupa.
Joonis 4: 5 | 3 = 7 . |
bin(0b0101 | 0b0011)
'0b111'
5 | 3
7
biti välistav VÕI - bitwise xor (exclusive or): ^
Tehtemärgi ^
tõeväärtustabel:
Allolevas tabelis on 0 ja 1 arvude P ja Q bittide väärtused.
P bitt | Q bitt | Tulem |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Näide:
Joonis 5: 5 ^ 3 = 6 . |
bin(0b0101 ^ 0b0011)
'0b110'
5 ^ 3
6
Täiend - complement: ~
, bitwise NOT, bitwise inversion Muudame arvu bitiväärtused vastupidisteks.
Joonis 6: ~6 = -7 . Negatiivsete kümnendarvude binaarne esitus erineb positiivsete omast. |
Seos kümnendsüsteemiga: ~x = -x - 1
, kus x
on täisarv.
bin(~0b0110) # Negatiivsete arvude bin. representatsioon erineb eelmainitust.
'-0b111'
~6
-7
Binaarne nihe vasakule - binary shift: <<
Joonis 7: 6 << 1 = 12 . |
Seos kümnendsüsteemiga: $x << n = 2^n x$, kus $x$ ja $n$ on täisarvud.
bin(0b0110 << 1) # 1d nihkuvad vasakule.
'0b1100'
6 << 1
12
Binaarne nihe paremale - binary shift: >>
Joonis 8: 6 >> 1 = 3 . |
Seos kümnendsüsteemiga: $x >> n = x / 2^n$, kus $x$ ja $n$ on täisarvud.
bin(0b0110 >> 1)
'0b11'
6 >> 1
3
Tehete ja avaldiste prioriteetsus¶
Tehete aritmeetiline prioriteetsus määrab ära nende rakendamise järjekorra
Prioriteetust saab hallata kasutades sulge
()
Võrdse prioriteetsuse korral määrab tehete tulemuse tehete järjekord, reeglina vasakult paremale, näiteks:
expr1, expr2, expr3, expr4
(expr1, expr2, expr3, expr4)
{expr1: expr2, expr3: expr4}
expr1 + expr2 * (expr3 - expr4)
expr1(expr2, expr3, *expr4, **expr5)
expr3, expr4 = expr1, expr2
Erand: Astendamise leidmise järjekord on paremalt vasakule
a = 2**3**5 != (2**3)**5
Lisainfo: https://docs.python.org/3/reference/expressions.html#
Allolev tabel näitab kõigi Pythoni operaatorite ja avaldiste prioriteetsuse hierarhiat.
Tehe, operaator, avaldis | Operatsioon |
---|---|
(expressions...) , [expressions...] , key: value... , expressions... |
avaldised (konstruktorid) |
x[index] , x[index:index] , x(arguments...) , x.attribute |
indekseerimine, funktsiooni väljakutsumine, atribuut |
await x |
võtmesõna await (ei käsitle) |
** |
astendamine |
+x , -x , ~x |
positiivne, negatiivne, biti NOT (täiend) |
* , @ , / , // , % |
korrutamine, maatriksite korrutamine, jagamine, jääk |
+ , - |
liitmine, lahutamine |
<< ,>> |
biti nihked |
& |
bititehte AND |
^ |
bititehte XOR |
| |
bititehte OR |
in , not in , is , is not , < , <= , > , >= , != , == |
võrdlused, samasused, sisaldavused |
not x |
tõeväärtuslik MITTE |
and |
tõeväärtuslik JA |
or |
tõeväärtuslik VÕI |
if-else |
if tingimus avaldis |
lambda |
anonüümne funktsioon |
:= |
omistus avaldis (morsa operaator) |
Funktsioonid: lausend def
ja konstruktsioon def
-return
¶
Pythoni funktsioon (protseduur) on alamprotseduur (subroutine). Funktsiooni saab taaskasutada. Funktsioon defineerib reeglite kogumi mis seob argumendi/argumentide väärtused funktsiooni väärtusega/väärtustega. Argumendina võetakse vastu kõiki andmetüüpe. Pythoni funktsiooni defineerime kasutades lausendit def
. Funktsiooni koosseisu kuuluv kood eristatakse taande abil.
def name(): # PEP8: Väikse tähaega nimi, kirjeldav.
print('Hello World!') # NB! TAANE.
name() # Funktsiooni/protseduuri väljakutse.
Hello World!
def function_name(argument):
print(argument)
arg = 'Hello World!'
function_name(arg)
Hello World!
def function2(argument, argument2):
print(argument, argument2)
arg = 'Hello'
function2(arg, 'World!')
Hello World!
Konkreetse tulemuse või tulemuste (erista komaga) väljastamiseks kasutame lausendit return
.
def function3():
return 2 + 5
function3()
7
def function4():
result = 2 + 5
return result, 77 # Kaks väljundit.
function4() # Vaikimisi väljastati tulemused ennikusse.
(7, 77)
def my_summation(a, b, c):
return a + b + c
my_summation(4, 5, 6)
15
Tulevastes loengutes laiendame funktsiooni argumendi mõistet. Pythoni funktsioonid ja protseduurid toetavad erinevat tüüpi argumente.
Kuidas eristada funktsiooni protseduurist? Kui kasutame lausendit return
siis eelistatakse nime funktsioon ja kui see puudub eelistame nime protseduur.
Funktsiooni abiinfo (DocString)¶
DocString või docstring on inimloetav dokumentatsioon mida saame loodud funktsioonile lisada. See aitab programmi kasutajatel, k.a. sind ennast, sinu enda loodud funktsioone paremini taaskasutada. Docstring kirjutatakse alati kolme jutumärgi vahele olenemata sellest kas see on üherealine või mitmerealine. Docstringi vormistamise, hea tava ja soovituste kohta loe lisaks PEP 257.
def summation(a, b):
"""This is a quick summary.""" # Minimaalne näide.
return a + b
summation?
Signature: summation(a, b) Docstring: This is a quick summary. File: /var/folders/zj/x7zjlmt54ds1474pvcr76vk80000gn/T/ipykernel_2864/4122679038.py Type: function
def my_summation(a, b, c):
'''Function that calculated sum of 3 numbers.
Additional info on arguments a, b, and c.
Returns a number (integer, float, complex)
'''
return a + b + c
# Või help(my_summation)
my_summation?
Signature: my_summation(a, b, c) Docstring: Function that calculated sum of 3 numbers. Additional info on arguments a, b, and c. Returns a number (integer, float, complex) File: /var/folders/zj/x7zjlmt54ds1474pvcr76vk80000gn/T/ipykernel_2864/1939052527.py Type: function
Docstringi lugemiseks võid ka vajutada: Shift+Tab.
Lausendid ja konstruktsioonid: if
, if
-else
ja if
-elif
-else
¶
Tingimuslausete abil saame juhtida programmi käitumist sõltuvalt booli tõeväärtustehete tulemustele.
Joonis 9: Neli põhilist vooskeemi kuju: ovaal, rööpkülik, nelinurk ja romb. |
Vooskeem või voodiagramm on programmis esinevate juhiste jada graafiline esitus. Diagrammi koostamisel kasutatakse neli põhilist kujundit millel on kindel tähendus. Need kujundid on kujutatud Joonisel 9. Nooled ühendavad põhikujundeid vooskeemis. Vooskeemi kujundid ja nooled kirjeldavad programmi kulgu selle algolekust lõppolekuni.
if
blokk¶
Joonis 10: If bloki vooskeem. |
if True: # Tingimuslause
print('Tingimus rahuldatud') # Tegevus, NB! TAANE.
Tingimus rahuldatud
if False:
print('Tingimus rahuldatud')
if
-else
blokk¶
Joonis 11: If -else bloki vooskeem. |
if True: # Sama mis not False.
print('Tegevus 1')
else:
print('Tegevus 2')
Tegevus 1
if False: # not True
print('Tegevus 1')
else:
print('Tegevus 2')
Tegevus 2
if
-elif
-else
blokk/konstruktsioon¶
Joonis 12: If -elif -else bloki vooskeem. |
if False:
print('Tegevus 1')
elif False:
print('Tegevus 2')
elif True:
print('Tegevus 3') # Soovitud valik.
else:
print('Tegevus 4')
Tegevus 3
NB! Peale konkreetse elif
lausendiga seotud tegevuse teostust ülejäänuid elif
tingimuslauseid (alumisi) enam ei kontrollita, vt. Joonis 12.
if
bloki näiteid¶
if 4 < 5 and 3 < 6:
print('Mõlemad tingimused.')
else:
print('Vähemalt üks tingimus.')
Mõlemad tingimused.
if len('Python') == 6: # Funktioon len loendab jada elemendid.
print('Kuus tähte.')
Kuus tähte.
num = 6
if num % 2 == 0:
print(f'{num} on paaris.')
else:
print(f'{num} on paaritu.')
6 on paaris.
Algoritmi mõiste¶
Algoritm ( = lahenduseeskiri) on fikseeritud juhiste jada, millega teisendatakse algoritmi sisendandmed algoritmi väljundandmeteks. Algoritmi esitatakse kas juhiste loendina või graafiliselt kasutades voodiagrammi. Algoritmi rakendatakse probleemi lahendamiseks.