kontrolne strukture, liste - university of belgrade · 2020. 1. 24. · koji proverava da li zadati...
TRANSCRIPT
Programiranje 1
Kontrolne strukture,Liste
Univerzitet u Beogradu
Elektrotehnički fakultet
Sadržaj
Logički tip podataka
⚫ Logički operatori
⚫ Relacioni operatori
Uslovno grananje
Liste
Petlje
Opseg brojeva
Ispis i sortiranje liste
ETF Beograd::Programiranje 1 2/32
Logički tip podataka
Dve moguće vrednosti: True i False
Funkcija bool() vraća logički tip:
⚫ False (0, "", False, [], (), {}, None) ili True (ostalo)
Relacioni operatori vraćaju logički tip:
⚫ ==, !=, >, <, >=, <=
Logički operatori rade sa operandima logičkog tipa:
⚫ and, or, not
a = True # True
b = bool(0) # False
c = (17 >= 2) or a and b # True
d = not (42 or not c) # False
ETF Beograd::Programiranje 1 3/32
Uslovno grananje (1)
Rezervisane reči if, elif, else
broj = int(input("Unesi ceo broj: "))
if broj >= 0 and broj <= 9:
print("Broj {} je jednocifren.".format(broj))
godina = int(input("Unesi godinu:"))
if (godina % 4 == 0) and (godina % 100 != 0 or godina % 400 == 0):
print("Godina {}. je prestupna.".format(godina))
else:
print("Godina {}. nije prestupna.".format(godina))
a = int(input("A: "))
b = int(input("B: "))
if a > b:
print("A > B")
elif a < b:
print("B > A")
else:
print("A = B")
ETF Beograd::Programiranje 1 4/32
Uslovno grananje (2)
Više naredbi unutar jedne grane:
⚫ Indentacija – beli znakovi na početku naredbe
⚫ Susedne naredbe sa istom indentacijom pripadaju istom bloku naredbi (istoj grani)
Ugnježdavanje je dozvoljeno:
if input() == "":
print("Prva naredba unutar if grane.")
print("Druga naredba unutar if grane.")
print("Naredba nakon if grane.")
if input() == "D":
if input() == "A":
print("Uneo si celo DA")
else:
print("Uneo si samo D")
ETF Beograd::Programiranje 1 5/32
Na programskom jeziku Python sastaviti programkoji proverava da li zadati trocifreni broj imasvojstvo: 𝐴𝐵𝐶 = 𝐴𝐵2 − 𝐶2. Primer je broj 147.
1. zadatak
abc = int(input("Unesite pozitivan trocifreni broj ABC: "))
if not (100 <= abc < 1000):
print("Broj {} nije u opsegu [100, 1000).".format(abc))
else:
ab = abc // 10
c = abc % 10
if abc == ab**2 - c**2:
print("{0} = {1}*{1} - {2}*{2}".format(abc, ab, c))
else:
print("Broj {} nema navedeno svojstvo.".format(abc))
ETF Beograd::Programiranje 1 6/32
Stringovi – Indeksiranje
Delu stringa može se pristupati korišćenjem []:
⚫ Može se pristupati jednom znaku ili opsegu
⚫ Može se pristupati u odnosu na početak i u odnosu na kraj stringa
a = "Stringovi."
print(a[0]) # S
print(a[-1]) # .
print(a[1:4]) # tri
print(a[-4:-1]) # ovi
S t r i n g o v i .
0 1 2 3 4 5 6 7 8 9
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1
ETF Beograd::Programiranje 1 7/32
Na programskom jeziku Python sastaviti programkoji ispisuje vrednost broja zadatog u drugomkomplementu na zadatom broju bita.
2. zadatak
n = int(input("Sa koliko se bita predstavlja broj: "))
pr = input("Koja je binarna predstava broja: ")
if len(pr) == n and int(pr[0]) == 1:
vr = -(2 ** n - int(pr, 2))
print("U pitanju je negativan broj {}.".format(vr))
elif len(pr) <= n:
vr = int(pr, 2)
print("U pitanju je pozitivan broj {}.".format(vr))
else:
print("Broj se ne može predstaviti sa {} bita.".format(n))
ETF Beograd::Programiranje 1 8/32
Na programskom jeziku Python sastaviti programkoji vrši konverziju temperature. Temperatura sezadaje sa standardnog ulaza u jednoj od trijedinice: farenhajt (°F), kelvin (K) ili rankin (°R).Zadata temperatura se konvertuje u temperaturuizraženu u celzijusima (°C). Formule za konverzijusu sledeće:
⚫ ℃ = ℉ − 32 ∙5
9
⚫ ℃ = 𝐾 − 273,15
⚫ ℃ = °𝑅 − 491,67 ∙5
9
3. zadatak (1/2)
ETF Beograd::Programiranje 1 9/32
3. zadatak (2/2)
temperatura = input(
"""Konverzija temperature (°F->°C, K->°C ili °R->°C)
Unesite temperaturu (npr. 10 F, 130 K, 37 R, ...): """
)
jedinica = temperatura[-1]
vrednost = float(temperatura[0:-1])
if jedinica == "F":
celzijus = (vrednost - 32) * 5/9
elif jedinica == "K":
celzijus = vrednost - 273.15
elif jedinica == "R":
celzijus = (vrednost - 491.67) * 5/9
print("{0}°{1} -> {2:.2f}°C".format(
vrednost, jedinica, celzijus
))
ETF Beograd::Programiranje 1 10/32
Liste
Kolekcije drugih objekata (elementi liste)
Promenljiv tip podataka
Elementi mogu biti različitih tipova
Elementi su uređeni:
⚫ Može im se pristupati preko indeksa
⚫ Može se iterirati kroz listu
Dozvoljeni su duplikati (isti elementi)
lista = [1, "tekst", 1, False] # [1, 'tekst', 1, False]
lista[0] += 7 # [8, 'tekst', 1, False]
lista[3] = True # [8, 'tekst', 1, True]
ETF Beograd::Programiranje 1 11/32
Na programskom jeziku Python sastaviti programkoji izračunava skalarni i vektorski proizvod dvavektora. Vektori se učitavaju sa standardnog ulazapri čemu su parametri odvojeni zarezom. Formuleza proizvode su:
⚫ 𝑃 ∙ 𝑄 = σ𝑖=1𝑛 𝑃𝑖 ∙ 𝑄𝑖
⚫
4. zadatak (1/2)
p: 1, 2, 3
q: 4, 5, 6
[1.0, 2.0, 3.0] * [4.0, 5.0, 6.0] = 32.0
[1.0, 2.0, 3.0] x [4.0, 5.0, 6.0] = [-3.0, 6.0, -3.0]
𝑃 × 𝑄 = 𝑃𝑦 ∙ 𝑄𝑧 − 𝑃𝑧 ∙ 𝑄𝑦 , 𝑃𝑧 ∙ 𝑄𝑥 − 𝑃𝑥 ∙ 𝑄𝑧, 𝑃𝑥 ∙ 𝑄𝑦 − 𝑃𝑦 ∙ 𝑄𝑥
ETF Beograd::Programiranje 1 12/32
4. zadatak (2/2)
p = input("p: ").split(", ")
q = input("q: ").split(", ")
p[0] = float(p[0])
p[1] = float(p[1])
p[2] = float(p[2])
q[0] = float(q[0])
q[1] = float(q[1])
q[2] = float(q[2])
skalarni = p[0]*q[0] + p[1]*q[1] + p[2]*q[2]
vektorski = []
vektorski.append(p[1]*q[2]-p[2]*q[1])
vektorski.append(p[2]*q[0]-p[0]*q[2])
vektorski.append(p[0]*q[1]-p[1]*q[0])
print("{} * {} = {}".format(p, q, skalarni))
print("{} x {} = {}".format(p, q, vektorski))
Da li može kraće?
ETF Beograd::Programiranje 1 13/32
Petlje
Naredbe unutar while petlje se izvršavaju sve dok je ispunjen uslov petlje
Naredbe unutar for petlje se izvršavaju za svaki element neke strukture (liste, stringa, opsega, …)
brojac = 0
while brojac < 5:
print(brojac, end=" ") # 0 1 2 3 4
brojac += 1
lista = [0, 1, 2, 3, 4]
for element in lista:
print(element, end=" ") # 0 1 2 3 4
rec = "petlja"
for slovo in rec:
print(slovo, end=" ") # p e t l j a
ETF Beograd::Programiranje 1 14/32
Opseg brojeva
Za iteriranje kroz petlju određen broj puta koristi se funkcija range() kojoj se zadaje:
⚫ Početna vrednost
⚫ Vrednost do koje se iterira
⚫ Korak iteracije
for i in range(5): # range(0, 5, 1)
print(i, end=" ") # 0 1 2 3 4
for i in range(2, 7): # range(2, 7, 1)
print(i, end=" ") # 2 3 4 5 6
for i in range(1, 10, 2):
print(i, end=" ") # 1 3 5 7 9
for i in range(4, -1, -1):
print(i, end=" ") # 4 3 2 1 0
ETF Beograd::Programiranje 1 15/32
Na programskom jeziku Python sastaviti programkoji računa skalarni proizvod dva vektora. Iskoristitipetlje.
5. zadatak
p = input("p: ").split(", ")
q = input("q: ").split(", ")
for i in range(3):
p[i] = float(p[i])
q[i] = float(q[i])
skalarni = 0
for i in range(len(p)):
skalarni += p[i]*q[i]
print("{} * {} = {}".format(p, q, skalarni))
Da li može kraće?
ETF Beograd::Programiranje 1 16/32
Na programskom jeziku Python sastaviti programkoji ciklično proverava da li je uneti broj deljiv sa 3.Unos nule ili negativnog broja prekida izvršavanje.
6. zadatak
while True:
broj = input("Broj: ")
if int(broj) <= 0: break
zbir = 0
for cifra in broj:
zbir += int(cifra)
print("Deljiv") if zbir % 3 == 0 else print("Nije deljiv")
Obratiti pažnju na izgled if i if-else naredbe!
ETF Beograd::Programiranje 1 17/32
Na programskom jeziku Python sastaviti programkoji iz liste celih brojeva izdvaja najdužu podlistukoja je uređena strogo rastuće. Pretpostaviti dalista sadrži bar jedan element.
7. zadatak (1/2)
Lista: 1 1 2 1 2 3 1 2 3 4
Podlista: [1, 2, 3, 4]
lista = input("Lista: ").split()
for i in range(len(lista)):
lista[i] = int(lista[i])
tr_duz = max_duz = 1
tr_ind = max_ind = 0
ETF Beograd::Programiranje 1 18/32
7. zadatak (2/2)
for i in range(1, len(lista)):
if lista[i] > lista[i - 1]:
tr_duz += 1
else:
if tr_duz > max_duz:
max_duz = tr_duz
max_ind = tr_ind
tr_duz = 1
tr_ind = i
if tr_duz > max_duz:
max_duz = tr_duz
max_ind = tr_ind
podlista = []
for i in range(max_ind, max_ind + max_duz):
podlista.append(lista[i])
print("Podlista: {}".format(podlista))
ETF Beograd::Programiranje 1 19/32
Na programskom jeziku Python sastaviti programkoji tabelira polinom.
Primer: 𝑃 𝑥 = 3𝑥2 + 𝑥 + 4
8. zadatak
Stepen polinoma: 2
Koeficijenti polinoma: 3 1 4
xmin, xmax, dx: 1, 10, 1.5
x = 1.0 -> P(x) = 8.0
x = 2.5 -> P(x) = 25.25
x = 4.0 -> P(x) = 56.0
x = 5.5 -> P(x) = 100.25
x = 7.0 -> P(x) = 158.0
x = 8.5 -> P(x) = 229.25
x = 10.0 -> P(x) = 314.0
ETF Beograd::Programiranje 1 20/32
8. zadatak
stepen = int(input("Stepen polinoma: "))
koeficijenti = input("Koeficijenti polinoma: ").split()
xmin, xmax, dx = input("xmin, xmax, dx: ").split(", ")
xmin = float(xmin)
xmax = float(xmax)
dx = float(dx)
x = xmin
while x <= xmax:
p = 0
s = stepen
for k in koeficijenti:
p += float(k) * x**s
s -= 1
print("x = {} -> P(x) = {}".format(x, p))
x += dx
ETF Beograd::Programiranje 1 21/32
Na programskom jeziku Python sastaviti programkoji iz učitane liste izbacuje:
⚫ a) sve elemente sa najvećom vrednošću
⚫ b) prvi element sa najmanjom vrednošću
⚫ c) poslednji element sa najmanjom vrednošću
Prilikom izbacivanja svakog elementa, ispisuje senjegova prvobitna pozicija u listi.
Pri učitavanju se prvo unosi broj elemenata liste, azatim i sami elementi liste počevši od poslednjegelementa liste.
9. zadatak (1/4)
ETF Beograd::Programiranje 1 22/32
Dva načina za učitavanje liste:
9. zadatak (2/4)
n = int(input("n: "))
a = []
for i in range(n):
elem = int(input("A[{}]: ".format(n - i - 1)))
a.insert(0, elem)
n = int(input("n: "))
a = []
for i in range(n - 1, -1, -1):
elem = int(input("A[{}]: ".format(i)))
a.append(elem)
a.reverse()
ETF Beograd::Programiranje 1 23/32
a):
9. zadatak (3/4)
maksimum = max(a)
for i in range(a.count(maksimum)):
print("Izbačen sa {}.".format(a.index(maksimum) + i))
a.remove(maksimum)
print(a)
b):
minimum = min(a)
print("Izbačen sa {}.".format(a.index(minimum)))
a.remove(minimum)
print(a)
ETF Beograd::Programiranje 1 24/32
c):
9. zadatak (4/4)
minimum = min(a)
a.reverse()
pozicija = len(a) - a.index(minimum) - 1
print("Izbačen sa {}.".format(pozicija))
a.reverse()
a.pop(pozicija)
print(a)
ETF Beograd::Programiranje 1 25/32
Pregled
ETF Beograd::Programiranje 1 26/32
Pregled – Funkcije i metode
Ugrađene funkcije:
⚫ bool()
⚫ int()
⚫ len()
Metode za rad sa stringovima:
⚫ split()
Metode za rad sa listama:
⚫ append()
⚫ insert()
⚫ reverse()
⚫ count()
⚫ index()
⚫ remove()
⚫ range()
⚫ max()
⚫ min()
⚫ pop()
ETF Beograd::Programiranje 1 27/32
Pregled – Ključne reči
Za rad sa logičkim tipom podataka:
⚫ True, False
⚫ and, or, not
Za rad sa uslovnim grananjem:
⚫ if, elif, else
Za rad sa petljama:
⚫ while, for, in, break, continue, pass
Za definisanje null vrednosti promenljivoj:
⚫ None
ETF Beograd::Programiranje 1 28/32
Pregled – Operatori
Aritmetički operatori
Bitski operatori
Operatori dodele
Relacioni operatori:
⚫ ==, !=, >, <, >=, <=
Logički operatori:
⚫ and, or, not
ETF Beograd::Programiranje 1 29/32
Pregled – Tipovi podataka
Int
Float
Complex
Boolean
String
List
Tuple
Set
Dict
Numerički tipovi
Logički tip
Kolekcije
ETF Beograd::Programiranje 1 30/32
Literatura – Knjige
M. Kovačević, Osnove programiranja u Pajtonu, Akademska misao, Beograd, 2017.
M. Lutz, Learning python: Powerful object-oriented programming, 5th edition, O'Reilly Media, Inc., 2013.
J. Zelle, Python Programming: An Introduction to Computer Science, 3rd Ed., Franklin, Beedle & Associates, 2016.
D. Beazley, B. K. Jones, Python Cookbook, 3rd edition, O'Reilly Media, 2013.
A. Downey, J. Elkner, C. Meyers, How To Think Like A Computer Scientist: Learning With Python, free e-book
ETF Beograd::Programiranje 1 31/32
Literatura – Online izvori
Python 3 documentation, https://docs.python.org/3/index.html
Learn Python, Basic tutorial, https://www.learnpython.org/
TutorialsPoint, Python tutorial https://www.tutorialspoint.com/python/index.htm
W3Schools, Python tutorial https://www.w3schools.com/python/
GeeksforGeeks, Python programming language https://www.geeksforgeeks.org/python-programming-language/
ETF Beograd::Programiranje 1 32/32