Előadás: Damásdi Gábor damasdigabor@caesar.elte.hu
Gyakorlat: Csanády Bálint csbalint@cs.elte.hu
Gyakorlat: Varga Bálint balorkany@gmail.com
Matematikai algoritmusok implementálása
Alapozás későbbi órákhoz(Algoritmusok tervezése és elemzése, Adatbányászat, Deep learning)
Az előadás és a gyakorlat anyaga mindig elérhető lesz a honlapon az óra kezdete előtt. damasdigabor.web.elte.hu/teaching
def vegsojegy(a,b):
if a==1 or b==1:
return 1
if (a+b)%2==0:
return (a+b)/2
else:
if b>a:
return (a+b+1)/2
else:
return (a+b-1)/2
Tehát a két jegy átlaga, és ha az nem egész, akkor a második beadandó jegye dönt.
.ipynb
print("Hello world")
Az utolsó parancs visszatérési értéke kiíródik. (Általában)
2 + 3
3 + 4
Ez akár egy több értékből álló "tuple" is lehet. (Ahogy sok mindenre, a "tuple" szóra sem találtam jó fordítást. Talán "többes"?)
2 + 3, 3 + 4, "hello " + "world"
Ez itt félkövér
Ez meg dőlt
Ez | meg itt |
---|---|
egy | táblázat |
Még a Latex is működik:
$$ \frac{1}{n}\sin x= \frac{sinx}{n}= \frac{sixn}{n}= six\frac{n}{n}=six=6 $$2+2
Speciális parancsok, amik módosítják a cella működését.
%%time
for x in range(1000000):
pass
%%timeit
x = 2
%%writefile hello.py
print("Hello world")
!python hello.py
Az elérhető mágiák listája:
%lsmagic
help()
Kernel -> Restart & Run All
parancsot mielőtt beadnád a házifeladatot/beadandót, hogy megbizonyosodj róla, hogy minden rendben működikprint("Ez fut először")
print("Aztán meg ez. Figyeld a számot bal oldalt.")
a=2
a
mutasson a 2 értékre.
a
a
még mindig a 2-re mutat
42
_
Utolsó előtti output:
"first"
"second"
__
__
Utolsó előtti előtti:
___
Az n. output is elérhető a _output_count
változón keresztül. Ez csak akkor definiált ha az n. cellának volt kimenete.
Itt egy módszer az összes elérhető output listázására. (A kódot majd később megérted)
list(filter(lambda x: x.startswith('_') and
x[1:].isdigit(), globals()))
Előző input:
_i
N. input:
_i2
import wikipedia
wikipedia.search("London")
import antigravity
Valójában sok nyelv használ vegyes stratégiát, így a python is. Mi főleg interpretált nyelvként fogjuk használni.
n = 12
if n % 2 == 0:
print("n páros")
else:
print("n páratlan")
n = 2
print(type(n))
n = 2.1
print(type(n))
n = "foo"
print(type(n))
Kicsit más mint a legtöbb nyelvben:
i = 2
kb azt jelenti, hogy a típussal rendelkező i változó megkapja a 2 érték másolatát.Python i = 2
kb azt jelenti hogy az i név kap egy referenciát egy egy numerikus objektumhoz, aminek az értéke 2.
mindig a jobb oldal értékelődik ki először, majd pedig a bal oldali név kap egy referenciát a jobb oldali értékhez
Az id
függvény visszaadja az objektum egyedi azonosító számát. (Miért lehet gond az id használatából?)
i = 2
print(id(i))
i = 3
print(id(i))
i = "elte"
print(id(i))
s = i
print(id(s) == id(i))
old_id = id(s)
s += "matek"
print(id(s) == id(i))
print(old_id == id(s))
a = 2
b = a
print(id(a) == id(b))
a += 1
print(id(a) == id(b))
a=25
b=25
a is b
a=257
b=257
a is b
25 is 25
300 is 300
n = int(input())
#n = 12
if n < 0:
print("abrakadara")
print("N negatív")
elif n > 0:
print("N pozitív")
else:
print("N se nem negatív se nem pozitív")
if
utasítások is vannak int x = -2;
int abs_x = x>=0 ? x : -x;
Pythonban:
<kifejezés1> if <feltétel> else <kifejezés2>
n = -2
abs_n = n if n >= 0 else -n
print(abs_n)
l = [] # empty list
l.append(2)
l.append(2)
l.append("foo")
len(l), l
type(l)
l[1] = "bar"
l.extend([-1, True])
len(l), l
for e in ["foo", "bar"]:
print(e)
print(e)
Így nézne ki C++-ban:
for (int i=0; i<5; i++)
cout << i << endl;
A range
mindig 0-val kezdődik!
for i in range(5):
print(i)
Megadhatjuk a kezdőértéket:
for i in range(2, 5):
print(i)
Megadhatjuk a növekedés értékét is. Ekkor viszont kötelező megadni a kezdőértéket is.
for i in range(0, 10, 2):
print(i)
i = 0
while i < 5:
print(i)
i += 1
i
Nincs do...while
Pythonban.
break
: ha korábban ki akarunk lépni egy ciklusbólcontinue
: ha korábban szeretnénk a következő ciklus futásra lépnifor i in range(10):
if i % 2 == 0:
continue
print(i)
for i in range(10):
if i > 4:
break
print(i)
Fontos, hogy ezek nem matematikai függvények. Például nem csak a bemenettől függ a függvényérték.
Függvényeket a def
kulcsszó segítségévek használhatunk:
def foo():
print("én egy nagyon okos függvény vagyok")
foo()
Először a pozíció szerintieket kell írni aztán a kulcsszavasokat
def foo(arg1, arg2, arg3):
print("arg1 ", arg1)
print("arg2 ", arg2)
print("arg3 ", arg3)
foo(1, 2, "asdfs")
import this
import random
def make_maze(w = 16, h = 8):
vis = [[0] * w + [1] for _ in range(h)] + [[1] * (w + 1)]
ver = [["| "] * w + ['|'] for _ in range(h)] + [[]]
hor = [["+--"] * w + ['+'] for _ in range(h + 1)]
def walk(x, y):
vis[y][x] = 1
d = [(x - 1, y), (x, y + 1), (x + 1, y), (x, y - 1)]
random.shuffle(d)
for (xx, yy) in d:
if vis[yy][xx]: continue
if xx == x: hor[max(y, yy)][x] = "+ "
if yy == y: ver[y][max(x, xx)] = " "
walk(xx, yy)
walk(random.randrange(w), random.randrange(h))
s = ""
for (a, b) in zip(hor, ver):
s += ''.join(a + ['\n'] + b + ['\n'])
return s
print(make_maze())