{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "python_alapok_01.ipynb",
"version": "0.3.2",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tw9aFQ4EKYyf",
"colab_type": "text"
},
"source": [
"# Python alpok"
]
},
{
"cell_type": "code",
"metadata": {
"id": "IUnDwIl9fV5Z",
"colab_type": "code",
"colab": {}
},
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "X1WTQqEjK2Xt",
"colab_type": "code",
"colab": {}
},
"source": [
"# megjegyzés sor kettős kereszttel kezdődik és ezt a python értelmező kihagyja\n",
"\n",
"A jol szerkesztett program jól olvasható, a programon belüli tagolások a space(betüköz behúzással) vagy TABULATOR nyomással lehetséges. \n",
"Csak az egyiket alkalmazzuk és ne keverjük.\n",
"\n",
"A véletlen szerú behúzásokat kerüljük. Ez általában hiba üzenetet is okoz."
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "zJQh1b04KiAW",
"colab_type": "text"
},
"source": [
"## Tipusok"
]
},
{
"cell_type": "code",
"metadata": {
"id": "nNUaRG4SKGwq",
"colab_type": "code",
"outputId": "e3325677-57da-40ba-dc04-5cf54b8696fe",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 126
}
},
"source": [
"## Szám tipusú változók\n",
"i = 10 # egész szám (int) \n",
"f = 3.14 # lebegőpontos szám (float) \n",
"c = 2 - 5j # komplex szám (complex) \n",
"\n",
"print(c) # egy szerű nyomtatás\n",
"\n",
"## Szöveges állandók\n",
"s1 = 'alma' # a határoló jel lehet ' \n",
"s2 = \"szilva\" # ...és \" is \n",
"s3 = '\"alma\" \"szilva\"' # <= ilyenkor nem kell levédeni a sztringben a \" karaktert!\n",
"\n",
"# többsoros szöveges állandók\n",
"s4 = \"\"\"\n",
" alma \n",
" szilva\n",
" \"\"\" \n",
"\n",
"print(s4) # egy szerű nyomtatás\n",
"\n",
"## tömbszerű váltózók\n",
"t = (1, 2, 3) # tuple !! utolag nem változtatható meg\n",
"l = [1, 2, 3] # lista !! késöbb is bármely eleme módositható\n",
"\n",
"## halmazszerű \n",
"s = {1, 2, 3} # halmaz \n",
"d = {'x': 1, 'y': 2, 'z': 3} # szótár\n",
"d['x'] # az 'x' kulcshoz rendelt érték lekérdezése \n",
"d['x'] = 9 # az 'x' kulcshoz érték módosítása\n",
"d['w'] = 0 # új kulcs-érték pár hozzáadása\n",
"1 in s # eleme 1 az s halmaznak? \n",
"'x' in d # van a d szótárban 'x' kulcs?\n",
"\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"(2-5j)\n",
"\n",
" alma \n",
" szilva\n",
" \n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"True"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BQQss_qHN7kz",
"colab_type": "text"
},
"source": [
"## Műveleti jelek\n",
"\n",
"Aritmetikai műveletek: +, -, *, /, **, %, //. \n",
"\n",
"Összehasonlítás: <, <=, ==, !=, >, >=. \n",
"\n",
"Logikai műveletek: and, or, not. \n",
"\n",
"Bitenkénti logikai műveletek: &, |, ˆ, ˜, «, ». \n",
"\n",
"Halmazműveletek: &, |, -. \n",
"\n",
"Tartalmazásvizsgálat: in, not in. \n",
"\n",
"Azonosságvizsgálat: is, is not. \n",
"\n",
"Értékadás: =, +=, -=, *=, /=, **=, %=, //=, ...\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "thJEWh2SPVUY",
"colab_type": "text"
},
"source": [
"## Tipusok közötti konverziók"
]
},
{
"cell_type": "code",
"metadata": {
"id": "rf8gy99ZOwSR",
"colab_type": "code",
"outputId": "2dd3d5a4-06c3-454a-c708-724a2f34fb1f",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
}
},
"source": [
"## tipus konverzió\n",
"int(2.3) # float => int \n",
"float('10') # str => float \n",
"str(20) # int => str \n",
"tuple([1, 2, 3]) # list => tuple \n",
"list((4, 5, 6)) # tuple => list \n",
"set((7, 8, 9)) # tuple => set\n",
"\n",
"dict([('a', 1), ('b', 2)]) # pairs => dict \n",
"list({'a': 1, 'b': 2}.items()) # dict => pairs\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[('a', 1), ('b', 2)]"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6yxGh8lyPxHG",
"colab_type": "text"
},
"source": [
"## Vezérlési szerkezetek (elágazás, ciklus)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "U_AfIagwP3zm",
"colab_type": "code",
"outputId": "d5ebc457-b987-4228-ab2b-480548d21f2f",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 108
}
},
"source": [
"## Elágazások\n",
"if 2 * 2 == 4: # Pythonban a elágazás feltétel megadása kettős ponttal zárulnak\n",
" print('alma') # feltétel teljesülés belseje (végrehajtási kód) sorbehuzással különül el \n",
"elif 2 * 2 == 5: # a kód többi részétől. \n",
" print('szilva') \n",
"else: # Emiatt garantált, hogy a program \n",
" print('tök') # megjelenése és logikai jelentése # összhangban van.\n",
"\n",
"\n",
"## Ciklusok\n",
"\n",
"# végtelen ciklus megjegyzésként védve\n",
"# while True: pass # Ha csak 1 végrehajtandó utasítás van, akkor írhatjuk a while-lal 1 sorba.\n",
"\n",
" \n",
"# a 0-tól 4-ig terjedő egész számok hetedik hatványának kiírása \n",
"for i in range(4): \n",
" print(i**7)\n",
"\n",
"# ciklusokből (azonnali) kilési parancsok : break, continue\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"alma\n",
"0\n",
"1\n",
"128\n",
"2187\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6hNJsj5vRwIH",
"colab_type": "text"
},
"source": [
"## Program be és kimenet "
]
},
{
"cell_type": "code",
"metadata": {
"id": "vRY0VuSbR30b",
"colab_type": "code",
"outputId": "76f75906-0bb6-4dbf-84c6-f87325a9aa91",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 90
}
},
"source": [
"## standard bemenet \n",
"\n",
"x = input('Kérek egy mondatot: ') # programon belüli adatbekérő lehetőség\n",
"y = int(input('Kérek egy egész számot: ')) # tipus konverzióvál váltunk számjegy kérésre\n",
" \n",
" \n",
"## standard kimenet \n",
"print('hello') # kiírás soremeléssel \n",
"print('hello', end='') # kiírás soremelés nélkül\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Kérek egy mondatot: 2\n",
"Kérek egy egész számot: 34\n",
"hello\n",
"hello"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CQI2p2yCThQz",
"colab_type": "text"
},
"source": [
"## Comprehension (értelmezés, érték feltölés)\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "vIzXKS5YTlgj",
"colab_type": "code",
"outputId": "87fb0b79-f498-494d-be5a-bee65f721fc1",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 54
}
},
"source": [
"\n",
"## feltétel nélküli \n",
"a = [x**2 for x in range(10)] \n",
"b = {x**2 for x in range(10)} \n",
"c = {x: x**2 for x in range(10)} \n",
"\n",
"print (c)\n",
"\n",
"## feltételes \n",
"a = [x**2 for x in range(10) if x % 2 == 0] \n",
"b = {x**2 for x in range(10) if x % 2 == 0} \n",
"c = {x: x**2 for x in range(10) if x % 2 == 0}\n",
"\n",
"print (c)\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}\n",
"{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qBF6Uv8tUBha",
"colab_type": "text"
},
"source": [
"## Rendezés"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Ps-YNwCNUG0p",
"colab_type": "code",
"outputId": "087acf8a-a81d-4ac2-fc05-52b45b8e9d3d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 54
}
},
"source": [
"# lista rendezése helyben \n",
"l = [2, 4, 1, 3] \n",
"l.sort()\n",
"\n",
"\n",
"# kollekció rendezése listába \n",
"l1 = sorted((2, 4, 1, 3)) \n",
"l2 = sorted([2, 4, 1, 3]) \n",
"l3 = sorted({2: 'b', 4: 'd', 1: 'a', 3: 'c'})\n",
"\n",
"print(l3)\n",
"\n",
"\n",
"# párok listájának rendezése \n",
"l1 = [('alma', 20), ('szilva', 30), ('barack', 10)] \n",
"l2 = sorted(l1) # a kulcs a 0-ás elem \n",
"l3 = sorted(l1, key=lambda x: x[1]) # a kulcs az 1-es elem\n",
"\n",
"print(l3)\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"[1, 2, 3, 4]\n",
"[('barack', 10), ('alma', 20), ('szilva', 30)]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xYB20tAuU5M3",
"colab_type": "text"
},
"source": [
"## Fájl kezelés"
]
},
{
"cell_type": "code",
"metadata": {
"id": "O-oxSaDFU9UH",
"colab_type": "code",
"outputId": "a0fe639d-fc5b-4783-b408-d2ba240a5205",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 272
}
},
"source": [
"## fájl irás\n",
"f = open('pascal.txt', 'w') ## elérési könyvtár megadása is szükséges lehet\n",
"f.write(' Első sor \\n') \n",
"f.write(' 2 sor \\n') \n",
"f.write(' 3 sor \\n') \n",
"f.close()\n",
"\n",
"\n",
"## fájl olvasás 1\n",
"content = open('pascal.txt').read() # azonnali, direct beolvasás sztringbe (!! csinnyán bánjunk vele nagy fájlok esetén)\n",
"print(content)\n",
"\n",
"## fájl olvasás 2\n",
"lines = open('pascal.txt').readlines() # sorok beolvasása sztringlistába\n",
"print(lines)\n",
"\n",
"\n",
"\n",
"# Pascal-háromszög kiszámítása és fájlba írása (komplex minta)\n",
"f = open('pascal.txt', 'w') ## elérési könyvtár megadása is szükséges lehet\n",
"p = [1] \n",
"for n in range(10): \n",
" f.write(str(p) + '\\n') \n",
" q = [p[i] + p[i + 1] for i in range(len(p) - 1)] \n",
" p = [1] + q + [1] \n",
"f.close()\n",
"\n",
"\n",
"\n",
"## olvasás ciklusal\n",
"f = open('pascal.txt') \n",
"f.readline() # 1. sor átugrása\n",
"for line in f: # további sorok tokenizálása \n",
" print(line.split(',')) \n",
"f.close()\n",
"\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
" Első sor \n",
" 2 sor \n",
" 3 sor \n",
"\n",
"[' Első sor \\n', ' 2 sor \\n', ' 3 sor \\n']\n",
"['[1', ' 1]\\n']\n",
"['[1', ' 2', ' 1]\\n']\n",
"['[1', ' 3', ' 3', ' 1]\\n']\n",
"['[1', ' 4', ' 6', ' 4', ' 1]\\n']\n",
"['[1', ' 5', ' 10', ' 10', ' 5', ' 1]\\n']\n",
"['[1', ' 6', ' 15', ' 20', ' 15', ' 6', ' 1]\\n']\n",
"['[1', ' 7', ' 21', ' 35', ' 35', ' 21', ' 7', ' 1]\\n']\n",
"['[1', ' 8', ' 28', ' 56', ' 70', ' 56', ' 28', ' 8', ' 1]\\n']\n",
"['[1', ' 9', ' 36', ' 84', ' 126', ' 126', ' 84', ' 36', ' 9', ' 1]\\n']\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "59TSgpBJXjzv",
"colab_type": "text"
},
"source": [
"## Kicsomagolás (unpacking)\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "G7fXFubYXnE4",
"colab_type": "code",
"outputId": "ccf3bdc5-bec4-4501-efb8-7949f78a1d17",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 199
}
},
"source": [
"## általános eset: \n",
"x, (y, z) = [10, (20, 30)] \n",
"\n",
"print(x)\n",
"print(y)\n",
"print(z)\n",
"print('-------1-----')\n",
" \n",
"## többszörös értékadás: \n",
"a, b = 30, 40 \n",
"\n",
"print(a)\n",
"print(b)\n",
"print('-------2-----')\n",
"\n",
"## csere (egylépésben): \n",
"a, b = b, a\n",
"\n",
"print(a)\n",
"print(b)\n",
"print('-------3-----')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"10\n",
"20\n",
"30\n",
"-------1-----\n",
"30\n",
"40\n",
"-------2-----\n",
"40\n",
"30\n",
"-------3-----\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "V_nd5xG2YSfl",
"colab_type": "text"
},
"source": [
"## Indexelés (slicing) \n",
"\n",
"Slice jelölésmód: [alsó határ: felső határ: lépésköz]\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "hnHEz-ORYYPs",
"colab_type": "code",
"outputId": "6925bab7-1e78-4f83-f550-17993a2b7b66",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 72
}
},
"source": [
"a = ['spam', 'eggs', 1, 2]\n",
"print(a[:2], a[1: 3], a[:]) # => ['spam', 'eggs'] ['eggs', 1] ['spam', 'eggs', 1, 2]\n",
"print(a[-1], a[:-2]) # => 2 ['spam', 'eggs']\n",
"print(a[::-1], a[1::2]) # => [2, 1, 'eggs', 'spam'] ['eggs', 2]\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"['spam', 'eggs'] ['eggs', 1] ['spam', 'eggs', 1, 2]\n",
"2 ['spam', 'eggs']\n",
"[2, 1, 'eggs', 'spam'] ['eggs', 2]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "KbZLuSJ_YrKE",
"colab_type": "text"
},
"source": [
"## Iterálási technikák\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "zQ28w3JIYv-s",
"colab_type": "code",
"outputId": "6995517b-7487-4f1c-a17b-af158ffaa1bd",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 290
}
},
"source": [
"a = ['A', 'B', 'C']\n",
"\n",
"for i in range(len(a)): # C nyelv szerü megadás mód \n",
" print(i, a[i])\n",
" \n",
"print('-------1-----')\n",
"\n",
"for i, ai in enumerate(a): # Python nyelv szerü megadás mód \n",
" print(i, ai)\n",
"\n",
"\n",
"print('-------11-----')\n",
" \n",
" \n",
"a = ['A', 'B', 'C'] \n",
"b = ['X', 'Y', 'Z']\n",
"\n",
"for i in range(len(a)): # C nyelv szerü megadás mód \n",
" print(a[i], b[i])\n",
" \n",
"print('-------1-----')\n",
"\n",
"for ai, bi in zip(a, b): # Python nyelv szerü megadás mód \n",
" print(ai, bi)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"0 A\n",
"1 B\n",
"2 C\n",
"-------1-----\n",
"0 A\n",
"1 B\n",
"2 C\n",
"-------11-----\n",
"A X\n",
"B Y\n",
"C Z\n",
"-------1-----\n",
"A X\n",
"B Y\n",
"C Z\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "86nxIovWZ9Fj",
"colab_type": "text"
},
"source": [
"## Függvények\n",
" \n",
" docstring \n",
" \n",
" pozícionális és kulcsszó argumentumok, \n",
" \n",
"\n",
"```\n",
" *args, \n",
" **kwargs\n",
"```\n",
"\n",
"\n",
" \n",
" egymásba ágyazás, attribútumok\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "CBjFXIM3aANQ",
"colab_type": "code",
"outputId": "c2366164-b852-431b-a417-6879e5929b66",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 72
}
},
"source": [
"## függvény létrehozása 1\n",
"def root(x, n=2): \n",
" ''' docstring rész\n",
" függvény belső leirasa, hogy mit csinál\n",
" n-th root of x.\n",
" ''' \n",
" return x**(1.0 / n)\n",
"\n",
"## függvény meghivása 1\n",
"print(root(2,2))\n",
"\n",
"print('----------1--------------')\n",
"\n",
"## függvény létrehozása 2\n",
"def fibon(F1=1, F2=1): \n",
" '''Return function that computes the \n",
" Fibonacci sequence with starting elements \n",
" F1 and F2.\n",
" ''' \n",
" \n",
" def g(n): \n",
" if n == 1: return F1 \n",
" elif n == 2: return F2 \n",
" else: return (g(n - 1) + g(n - 2)) \n",
" return g\n",
"\n",
"## függvény meghivása 2\n",
"print(fibon(3))\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"1.4142135623730951\n",
"----------1--------------\n",
".g at 0x7f2c4359ca60>\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "W0xSvsoH1xp4",
"colab_type": "text"
},
"source": [
"## Modulok és Csomagok\n",
"\n",
"### Modul: Python nyelvű fájl. \n",
"\n",
"- Definíciókat és utasításokat tartalmaz. \n",
"\n",
"- Ha a modulhoz az xyz.py fájl tartozik, akkor a modulra xyz néven lehet hivatkozni. \n",
"\n",
"- A modulok más Python programokból importálhatók. \n",
"\n",
"\n",
"### Csomag: Modulok gyűjteménye. \n",
" \n",
" - Egy csomag alcsomagokat/modulokat is tartalmazhat.\n",
"* A hierarchiát a csomagon belüli könyvtárszerkezet határozza meg. * \n",
"A használatnál az egye könyvtárak pont operator után adhatok meg a névben.\n",
"\n",
" - A standard csomagok és modulok a standard könyvtárban találhatók, és nem igényelnek telepítést. \n",
" \n",
" - A külső csomagok gyűjtőhelye a [PyPi](https://pypi.python.org/pypi) \n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "gT7mfSNJ3Lb6",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 70
},
"outputId": "edd029bd-c46a-4aea-ce98-c702ef8185c0"
},
"source": [
"\n",
"# a random nevű standard modul importálása \n",
"import random \n",
"print(random.randint(1, 100)) # eredmény nyomtatása\n",
"\n",
"\n",
"# a random modulban található randint függvény importálása \n",
"from random import randint \n",
"print(randint(1, 100)) # eredmény nyomtatása\n",
"\n",
"\n",
"# modul teljes tartalmának importálása (megjegyzés: általában kerülendő a névütközések miatt) \n",
"from random import * \n",
"print(randint(1, 100))\n",
"\n",
"\n",
"# függvény importálása almodulból \n",
"from os.path import basename\n",
"\n",
"\n",
"# csomag importálása rövidített néven \n",
"# (megjegyzés: a numpy egy külső csomag ezért előzetes installálása is szükséges lehet) \n",
"import numpy as np\n"
],
"execution_count": 40,
"outputs": [
{
"output_type": "stream",
"text": [
"13\n",
"17\n",
"10\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ao0QuAou4RU_",
"colab_type": "text"
},
"source": [
"## Standard könyvtár\n",
"\n",
"A Python standard könyvtára széleskörű szolgáltatásokat nyújt a programozók számára. \n",
"\n",
"- önmagában is több mint 200 csomagot ill. modult tartalmaz. \n",
"\n",
"- Szabványos megoldást biztosít a programozás mindennapjaiban felmerülő számos feladatra. \n",
"\n",
"- Részletes dokumentáció: https://docs.python.org/3/library/index.html \n",
"\n",
"\n",
"Kiindulásnak standard könyvtár egy kis részének az áttekintésére vállalkozunk. \n",
"\n",
"A jó programozó nem találja fel újra a spanyolviaszt. Ha lehetséges, akkor a standard könyvtár eszközeivel oldja meg a feladatot. *italicized text*\n",
"\n",
"\n",
"\n",
"### A standard könyvtár szolgáltatásai \n",
"\n",
"**szövegfeldolgozásra:** string, re, difflib, textwrap, unicodedata, stringprep, readline, rlcompleter \n",
"\n",
"**bináris adatok feldolgozására:** struct, codecs \n",
"\n",
"**adattípusokkal kapcsolatban**: datetime, calendar, collections, heapq, bisect, array, weakref, types, copy, pprint, reprlib \n",
"\n",
"**matematikai**: numbers, math, cmath, decimal, fractions, random \n",
"\n",
"**funkcionális programozásra**: itertools, functools, operator\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "mZgDDzjr5Ckl",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 70
},
"outputId": "75372c5c-00d5-480b-af56-0ee4c375d515"
},
"source": [
"import re ## könyvtár betöltés\n",
"\n",
"# illeszkedésvizsgálat \n",
"pattern = '^X+ .*' \n",
"text = 'XXXX alma' \n",
"if re.match(pattern, text): \n",
" print('a szöveg illeszkedik a mintára')\n",
" \n",
"# ha többször használunk egy reguláris kifejezést, érdemes lefordítani \n",
"p = re.compile('^X* .*')\n",
"\n",
"# illeszkedésvizsgálat lefordított reguláris kifejezéssel \n",
"print(p.match('alma')) # => None # (if-ben hamisnak számít) \n",
"print(p.match('XXXX alma')) # => _sre.SRE_Match object # (if-ben igaznak számít)\n"
],
"execution_count": 41,
"outputs": [
{
"output_type": "stream",
"text": [
"a szöveg illeszkedik a mintára\n",
"None\n",
"<_sre.SRE_Match object; span=(0, 9), match='XXXX alma'>\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "MGelMT-L51Li",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 87
},
"outputId": "ea239086-7a21-432b-f5ad-a0f93ac7baac"
},
"source": [
"import datetime ## könyvtár betöltés\n",
"# mikroszekundum pontosságú időpont megadása \n",
"print(datetime.datetime(2018, 2, 26, 9, 30, 30, 1000)) # (megjegyzés: időzóna információt is megadhatnánk)\n",
"\n",
"\n",
"# aritmetika nap pontosságú dátumokkal \n",
"print(datetime.date(2018, 7, 31) + datetime.timedelta(1)) # => '2018-08-01'\n",
"\n",
"\n",
"# időzóna megadása a dátumhoz \n",
"utc1 = datetime.timezone(datetime.timedelta(0, 3600)) \n",
"print(utc1) # => 'UTC+01:00' \n",
"\n",
"\n",
"print(datetime.datetime(2018, 2, 26, 9, 30, 30)) # => '2018-02-26 09:30:30'\n",
"\n",
"\n",
"## Megjegyzés : nem szabványos csomagok időkezelésre: dateutil, pytz\n"
],
"execution_count": 43,
"outputs": [
{
"output_type": "stream",
"text": [
"2018-02-26 09:30:30.001000\n",
"2018-08-01\n",
"UTC+01:00\n",
"2018-02-26 09:30:30\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "1an_rprb6tSp",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 87
},
"outputId": "63f9ebd7-58d1-4d03-f508-5f25a7e751d8"
},
"source": [
"import collections ## könyvtár betöltés\n",
"\n",
"# gyakoriságszámítást végző szótár \n",
"print(collections.Counter([1, 1, 2])) # => Counter({1: 2, 2: 1})\n",
"\n",
"\n",
"# alapértelmezett értéket feltételező szótár \n",
"data = [(1, 'alma'), (2, 'körte'), (1, 'barack')] \n",
"groups = collections.defaultdict(list) \n",
"for x, y in data: \n",
" groups[x].append(y) \n",
"print(groups) # => defaultdict(, \n",
" # {1: ['alma', 'barack'], 2: ['körte']})\n",
" \n",
"# garantáltan sorrendtartó szótár \n",
"od = collections.OrderedDict() \n",
"for i in 1, 2, 3: \n",
" od[i] = i**2 \n",
"print(od) # => OrderedDict([(1, 1), (2, 4), (3, 9)])\n",
" \n",
"# olyan tuple, ahol névvel is lehet hivatkozni az elemekre \n",
"Point = collections.namedtuple('Point', ('x', 'y')) \n",
"p = Point(2, 3) \n",
"print(p[0], p[1], p.x, p.y) # => 2 3 2 3\n"
],
"execution_count": 44,
"outputs": [
{
"output_type": "stream",
"text": [
"Counter({1: 2, 2: 1})\n",
"defaultdict(, {1: ['alma', 'barack'], 2: ['körte']})\n",
"OrderedDict([(1, 1), (2, 4), (3, 9)])\n",
"2 3 2 3\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "9q8QhnKo7bJW",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 87
},
"outputId": "8c9ddcfd-87c4-48a2-9c49-bc3846e15cb4"
},
"source": [
"import copy ## könyvtár betöltés\n",
"\n",
"# sekély másolat: csak legfelsőbb szintű elemek másolódnak \n",
"a = [1, [2, 3]] \n",
"b = copy.copy(a) \n",
"b[1][0] = 20 \n",
"print(a) # => [1, [20, 3]] \n",
"print(b) # => [1, [20, 3]] b változtatásától a is változott!\n",
"\n",
"# mély másolat: az adatszerkezet összes eleméről másolat készül \n",
"a = [1, [2, 3]] \n",
"b = copy.deepcopy(a) \n",
"b[1][0] = 20 \n",
"print(a) # => [1, [2, 3]] \n",
"print(b) # => [1, [20, 3]] a nem változott, csak b\n"
],
"execution_count": 45,
"outputs": [
{
"output_type": "stream",
"text": [
"[1, [20, 3]]\n",
"[1, [20, 3]]\n",
"[1, [2, 3]]\n",
"[1, [20, 3]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QnAHiNxn7_pU",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 212
},
"outputId": "00cbf5a9-42cd-4c88-b9df-e7edd97fe3c7"
},
"source": [
"import math ## könyvtár betöltés\n",
"\n",
"# állandók \n",
"print(math.e) # => 2.718281828459045 \n",
"print(math.pi) # => 3.141592653589793\n",
"\n",
"\n",
"# függvények \n",
"print(math.sin(0)) # => 0.0 \n",
"print(math.cos(0)) # => 1.0 \n",
"print(math.asin(0.5)) # => 0.5235987755982989 \n",
"print(math.acos(0.5)) # => 1.047197551196597 \n",
"print(math.exp(1)) # => 2.718281828459045 \n",
"print(math.log(1)) # => 0.0\n",
"\n",
"\n",
"# radián-fok átalakítás \n",
"print(math.degrees(math.pi)) # => 180.0 \n",
"print(math.radians(45)) # => 0.7853981633974483\n",
"\n",
"\n",
"# áttérés polárkoordinátákra \n",
"x, y = 3, -4 \n",
"r = math.hypot(x, y) \n",
"phi = math.atan2(y, x) \n",
"print(r, phi) # => 5.0 -0.9272952180016122\n"
],
"execution_count": 46,
"outputs": [
{
"output_type": "stream",
"text": [
"2.718281828459045\n",
"3.141592653589793\n",
"0.0\n",
"1.0\n",
"0.5235987755982989\n",
"1.0471975511965979\n",
"2.718281828459045\n",
"0.0\n",
"180.0\n",
"0.7853981633974483\n",
"5.0 -0.9272952180016122\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "liKQqSHQ8avE",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 105
},
"outputId": "65932e1d-af69-41e9-b887-cc89790ed8fb"
},
"source": [
"import random ## könyvtár betöltés\n",
"\n",
"\n",
"# véletlenszám-generátor állapotának beállítása \n",
"random.seed(42)\n",
"\n",
"\n",
"# float típusú érték generálása a [0, 1) intervallumból \n",
"print(random.random()) # => 0.6394267984578837\n",
"\n",
"\n",
"# véletlenszám-generátor objektum létrehozása \n",
"r = random.Random(42)\n",
"\n",
"\n",
"# float típusú érték generálása a [0, 1) intervallumból \n",
"print(r.random()) # => 0.6394267984578837\n",
"\n",
"\n",
"# kockadobás szimulálása \n",
"print(r.randint(1, 6)) # => 2\n",
"\n",
"\n",
"# elem kisorsolása egy szekvenciából \n",
"print(r.choice(['a', 'b', 'c', 'd'])) # => 'b'\n",
"\n",
"\n",
"# visszatevés nélküli mintavétel \n",
"print(r.sample(['a', 'b', 'c', 'd'], 2)) # => ['a', 'c']\n",
"\n"
],
"execution_count": 47,
"outputs": [
{
"output_type": "stream",
"text": [
"0.6394267984578837\n",
"0.6394267984578837\n",
"1\n",
"c\n",
"['b', 'a']\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1j6kC8yr87w-",
"colab_type": "text"
},
"source": [
"## Funkcionális programozás"
]
},
{
"cell_type": "code",
"metadata": {
"id": "-bkFhgdf88J5",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 52
},
"outputId": "8b965510-2aac-43c8-b837-4244f20b2df5"
},
"source": [
"## lambda kifejezés: egysoros, névtelen függvény \n",
"sqr = lambda x: x**2 \n",
"print(sqr(4)) # használata nyomtatásban\n",
"\n",
"\n",
"add = lambda x, y: x + y \n",
"print(add(1, 2)) # használata nyomtatásban\n",
"\n",
"\n",
"## map: függvényt alkalmaz egy kollekció elemeire \n",
"a = map(int, ['1', '2', '3']) \n",
"\n",
"b = map(lambda x: 2 * x, [1, 2, 3])\n",
"\n"
],
"execution_count": 57,
"outputs": [
{
"output_type": "stream",
"text": [
"16\n",
"3\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9FP_fFHu-mrU",
"colab_type": "text"
},
"source": [
"# Osztályok"
]
},
{
"cell_type": "code",
"metadata": {
"id": "1r7Znjxa-o4E",
"colab_type": "code",
"colab": {}
},
"source": [
"## ősosztály \n",
"import math\n",
"class Shape: \n",
" def circularity(self): \n",
" a = self.area() \n",
" p = self.perimeter() \n",
" return 4 * math.pi * a / p**2 \n",
" \n",
" \n",
"## leszármazott osztály 1 \n",
"class Circle(Shape): \n",
" def __init__(self, r): self._r = r \n",
" def perimeter(self): return 2 * self._r * math.pi \n",
" def area(self): return self._r**2 * math.pi\n",
" \n",
" \n",
"## leszármazott osztály 2 \n",
"class Rectangle(Shape): \n",
" def __init__(self, a, b): self._a, self._b = a, b \n",
" def perimeter(self): return 2 * (self._a + self._b) \n",
" def area(self): return self._a * self._b\n",
"\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "G-1DC56A_5QR",
"colab_type": "text"
},
"source": [
"## Speciális („dunder”) attribútumok és metódusok\n",
"\n",
"\n",
"```\n",
"__doc__, __class__, __init__(), __hash__(), __code__ \n",
"\n",
"**attribútumtárolásra:** __dict__, __dir__() \n",
"\n",
"**kiírásra:** __repr__(), __str__() \n",
"\n",
"**műveletvégzésre**: __add__(), __mul__(), ... \n",
"\n",
"**indexelésre**: __getitem__(), __setitem__(), __len__() \n",
"\n",
"**iterálásra**: __iter__(), __next__() \n",
"\n",
"**kontextuskezelésre**: __enter__(), __exit__()\n",
"```\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Fv4eY64i_5bR",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "152da6d2-f3de-4d47-c2cb-3292f4f27cd9"
},
"source": [
"## tesztelés vektorokkal\n",
"\n",
"class Vector(object):\n",
" def __init__(self, sequence):\n",
" self._internal_list = list(sequence)\n",
"\n",
"my_vector = Vector([1, 2, 3])\n",
"print(my_vector)\n",
"\n",
"\n",
"v1 = Vector([1.0, 2.0, 3.0]) \n",
"v2 = Vector([4.0, 5.0, 6.0]) \n",
"\n",
"print(len(v1), v1[0], v1[:2]) # => 3 1.0 [1.0, 2.0] \n",
"\n",
"print(v1 + v2) # => Vector([5.0, 7.0, 9.0]) \n",
"\n",
"print(v1 * v2) # => Vector([4.0, 10.0, 18.0])\n",
"\n",
"\n"
],
"execution_count": 71,
"outputs": [
{
"output_type": "stream",
"text": [
"<__main__.Vector object at 0x7f2c434d0198>\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5MjwosLIBT43",
"colab_type": "text"
},
"source": [
"## Kivételkezelés"
]
},
{
"cell_type": "code",
"metadata": {
"id": "mpdJ6hYaBVIm",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "dd475d10-1135-456b-a5ad-c46bed6caf9a"
},
"source": [
"##minta\n",
"x = int(input('Please enter an even number: ')) \n",
"if x % 2 != 0: \n",
" raise ValueError('Odd number given!')\n",
" \n",
" \n",
"def divide(x, y): \n",
" try: \n",
" return x / y \n",
" except ZeroDivisionError: \n",
" print('Division by zero!') \n",
" finally: \n",
" print('Executing finally clause.')\n"
],
"execution_count": 68,
"outputs": [
{
"output_type": "stream",
"text": [
"Please enter an even number: 4\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7Gyl7uxKBy-E",
"colab_type": "text"
},
"source": [
"## Hibakeresés"
]
},
{
"cell_type": "code",
"metadata": {
"id": "TmBrsM6pB0iU",
"colab_type": "code",
"colab": {}
},
"source": [
"## buggy.py file tartalma\n",
"def myavg(sequences): \n",
" joined = [] \n",
" for s in sequences: \n",
" joined.append(s) \n",
" return sum(joined) / len(joined)\n",
"\n",
"\n",
"sequences = [[1, 2, 3], [4, 5], [6, 7]] \n",
"print(myavg(sequences)) \n",
"\n",
"\n",
"\n",
"## hibakeresés Jupyter Notebook környezetben: %run buggy.py %debug\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "NyOcSyQaEbAz",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 52
},
"outputId": "f94dd2b5-4920-41bc-8276-c6800d881b30"
},
"source": [
"## modul installálása colab Jupyter notebook alatt\n",
"!pip install -U -q PyDrive \n",
" \n",
" "
],
"execution_count": 74,
"outputs": [
{
"output_type": "stream",
"text": [
"\u001b[?25l\r\u001b[K |▎ | 10kB 14.0MB/s eta 0:00:01\r\u001b[K |▋ | 20kB 1.8MB/s eta 0:00:01\r\u001b[K |█ | 30kB 2.6MB/s eta 0:00:01\r\u001b[K |█▎ | 40kB 1.7MB/s eta 0:00:01\r\u001b[K |█▋ | 51kB 2.1MB/s eta 0:00:01\r\u001b[K |██ | 61kB 2.5MB/s eta 0:00:01\r\u001b[K |██▎ | 71kB 2.8MB/s eta 0:00:01\r\u001b[K |██▋ | 81kB 3.2MB/s eta 0:00:01\r\u001b[K |███ | 92kB 3.6MB/s eta 0:00:01\r\u001b[K |███▎ | 102kB 2.8MB/s eta 0:00:01\r\u001b[K |███▋ | 112kB 2.8MB/s eta 0:00:01\r\u001b[K |████ | 122kB 2.8MB/s eta 0:00:01\r\u001b[K |████▎ | 133kB 2.8MB/s eta 0:00:01\r\u001b[K |████▋ | 143kB 2.8MB/s eta 0:00:01\r\u001b[K |█████ | 153kB 2.8MB/s eta 0:00:01\r\u001b[K |█████▎ | 163kB 2.8MB/s eta 0:00:01\r\u001b[K |█████▋ | 174kB 2.8MB/s eta 0:00:01\r\u001b[K |██████ | 184kB 2.8MB/s eta 0:00:01\r\u001b[K |██████▎ | 194kB 2.8MB/s eta 0:00:01\r\u001b[K |██████▋ | 204kB 2.8MB/s eta 0:00:01\r\u001b[K |███████ | 215kB 2.8MB/s eta 0:00:01\r\u001b[K |███████▎ | 225kB 2.8MB/s eta 0:00:01\r\u001b[K |███████▋ | 235kB 2.8MB/s eta 0:00:01\r\u001b[K |████████ | 245kB 2.8MB/s eta 0:00:01\r\u001b[K |████████▎ | 256kB 2.8MB/s eta 0:00:01\r\u001b[K |████████▋ | 266kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████ | 276kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████▎ | 286kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████▋ | 296kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████ | 307kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████▎ | 317kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████▋ | 327kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████ | 337kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████▎ | 348kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████▋ | 358kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████ | 368kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████▎ | 378kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████▋ | 389kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████ | 399kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████▎ | 409kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████▋ | 419kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████ | 430kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████▎ | 440kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████▋ | 450kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████ | 460kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████▎ | 471kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████▋ | 481kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████ | 491kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████▎ | 501kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████▋ | 512kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████ | 522kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████▎ | 532kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████▋ | 542kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████ | 552kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████▎ | 563kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████▋ | 573kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████ | 583kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████▎ | 593kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████▋ | 604kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████ | 614kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████▎ | 624kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████▋ | 634kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████████ | 645kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████████▎ | 655kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████████▋ | 665kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████████ | 675kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████████▎ | 686kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████████▋ | 696kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████████ | 706kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████████▎ | 716kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████████▋ | 727kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████████ | 737kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████████▎ | 747kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████████▋ | 757kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████████▉ | 768kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████▏ | 778kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████▌ | 788kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████▉ | 798kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████▏ | 808kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████▌ | 819kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████▉ | 829kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████▏ | 839kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████▌ | 849kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████▉ | 860kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████████████▏ | 870kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████████████▌ | 880kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████████████▉ | 890kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▏ | 901kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▌ | 911kB 2.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▉ | 921kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▏ | 931kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▌ | 942kB 2.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▉ | 952kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▏| 962kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▌| 972kB 2.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▉| 983kB 2.8MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 993kB 2.8MB/s \n",
"\u001b[?25h Building wheel for PyDrive (setup.py) ... \u001b[?25l\u001b[?25hdone\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "dMwT7MmVJ8BD",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 196
},
"outputId": "d6ea4dd1-290f-4d11-b93b-375d042acf37"
},
"source": [
"## minta modell\n",
"\n",
"import tensorflow as tf\n",
"from tensorflow import keras\n",
"import datetime as dt\n",
"import os\n",
"import numpy as np\n",
"from google.colab import files\n",
"from google.colab import drive\n",
"\n",
"# these are all the Google Drive and authentication libraries required\n",
"from pydrive.auth import GoogleAuth\n",
"from pydrive.drive import GoogleDrive\n",
"from google.colab import auth\n",
"from oauth2client.client import GoogleCredentials\n",
"\n",
"# import the CIFAR-10 data then load into TensorFlow datasets\n",
"(x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()\n",
"\n",
"# the training set with data augmentation\n",
"train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(256).shuffle(10000)\n",
"train_dataset = train_dataset.map(lambda x, y: (tf.div(tf.cast(x, tf.float32), 255.0), tf.reshape(tf.one_hot(y, 10), (-1, 10))))\n",
"train_dataset = train_dataset.map(lambda x, y: (tf.image.central_crop(x, 0.75), y))\n",
"train_dataset = train_dataset.map(lambda x, y: (tf.image.random_flip_left_right(x), y))\n",
"train_dataset = train_dataset.repeat()\n",
"\n",
"# the validation set\n",
"valid_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(5000).shuffle(10000)\n",
"valid_dataset = valid_dataset.map(lambda x, y: (tf.div(tf.cast(x, tf.float32),255.0), tf.reshape(tf.one_hot(y, 10), (-1, 10))))\n",
"valid_dataset = valid_dataset.map(lambda x, y: (tf.image.central_crop(x, 0.75), y))\n",
"valid_dataset = valid_dataset.repeat()\n",
"\n",
"# now the model creation function\n",
"def create_model():\n",
" model = keras.models.Sequential([\n",
" keras.layers.Conv2D(96, 3, padding='same', activation=tf.nn.relu,\n",
" kernel_initializer=keras.initializers.VarianceScaling(distribution='truncated_normal'),\n",
" kernel_regularizer=keras.regularizers.l2(l=0.001),\n",
" input_shape=(24, 24, 3)),\n",
" keras.layers.Conv2D(96, 3, 2, padding='same', activation=tf.nn.relu,\n",
" kernel_initializer=keras.initializers.VarianceScaling(distribution='truncated_normal'),\n",
" kernel_regularizer=keras.regularizers.l2(l=0.001)),\n",
" keras.layers.Dropout(0.2),\n",
" keras.layers.Conv2D(192, 3, padding='same', activation=tf.nn.relu,\n",
" kernel_initializer=keras.initializers.VarianceScaling(distribution='truncated_normal'),\n",
" kernel_regularizer=keras.regularizers.l2(l=0.001)),\n",
" keras.layers.Conv2D(192, 3, 2, padding='same', activation=tf.nn.relu,\n",
" kernel_regularizer=keras.regularizers.l2(l=0.001)),\n",
" keras.layers.BatchNormalization(),\n",
" keras.layers.Dropout(0.5),\n",
" keras.layers.Flatten(),\n",
" keras.layers.Dense(256, activation=tf.nn.relu,\n",
" kernel_initializer=keras.initializers.VarianceScaling(),\n",
" kernel_regularizer=keras.regularizers.l2(l=0.001)),\n",
" keras.layers.Dense(10),\n",
" keras.layers.Softmax()\n",
" ])\n",
"\n",
" model.compile(optimizer=tf.train.AdamOptimizer(),\n",
" loss='categorical_crossentropy',\n",
" metrics=['accuracy'])\n",
" return model\n",
" \n",
"# finally create the model\n",
"model = create_model()"
],
"execution_count": 82,
"outputs": [
{
"output_type": "stream",
"text": [
"Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n",
"170500096/170498071 [==============================] - 2s 0us/step\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"WARNING: Logging before flag parsing goes to stderr.\n",
"W0725 12:44:02.759559 139828683884416 deprecation.py:323] From :21: div (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Deprecated in favor of operator or tf.math.divide.\n",
"W0725 12:44:03.130238 139828683884416 deprecation.py:506] From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/init_ops.py:1251: calling VarianceScaling.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Call initializer instance with the dtype argument instead of passing it to the constructor\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "W1nfBsLrIcnB",
"colab_type": "text"
},
"source": [
"# LINUX-UNIX parancsok elérése"
]
},
{
"cell_type": "code",
"metadata": {
"id": "zyC5ztoXIbsr",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "261f16ae-cce9-430f-9509-433621114d9c"
},
"source": [
"# LINUX parancsok közül jópár elérhető pl.: ls, mkdir, rmdir and curl.\n",
"# A fuller list of bash commands and functionality available on Google Colaboratory \n",
"!cd ..\n",
"!ls "
],
"execution_count": 80,
"outputs": [
{
"output_type": "stream",
"text": [
"pascal.txt sample_data\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "W4s0Nt0CHk0n",
"colab_type": "code",
"colab": {
"resources": {
"http://localhost:8080/nbextensions/google.colab/files.js": {
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7Ci8vIE1heCBhbW91bnQgb2YgdGltZSB0byBibG9jayB3YWl0aW5nIGZvciB0aGUgdXNlci4KY29uc3QgRklMRV9DSEFOR0VfVElNRU9VVF9NUyA9IDMwICogMTAwMDsKCmZ1bmN0aW9uIF91cGxvYWRGaWxlcyhpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IHN0ZXBzID0gdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKTsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIC8vIENhY2hlIHN0ZXBzIG9uIHRoZSBvdXRwdXRFbGVtZW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBjYWxsCiAgLy8gdG8gdXBsb2FkRmlsZXNDb250aW51ZSBmcm9tIFB5dGhvbi4KICBvdXRwdXRFbGVtZW50LnN0ZXBzID0gc3RlcHM7CgogIHJldHVybiBfdXBsb2FkRmlsZXNDb250aW51ZShvdXRwdXRJZCk7Cn0KCi8vIFRoaXMgaXMgcm91Z2hseSBhbiBhc3luYyBnZW5lcmF0b3IgKG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIgeWV0KSwKLy8gd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGFzeW5jaHJvbm91cyBzdGVwcyBhbmQgdGhlIFB5dGhvbiBzaWRlIGlzIGdvaW5nCi8vIHRvIHBvbGwgZm9yIGNvbXBsZXRpb24gb2YgZWFjaCBzdGVwLgovLyBUaGlzIHVzZXMgYSBQcm9taXNlIHRvIGJsb2NrIHRoZSBweXRob24gc2lkZSBvbiBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcCwKLy8gdGhlbiBwYXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgc3RlcCBhcyB0aGUgaW5wdXQgdG8gdGhlIG5leHQgc3RlcC4KZnVuY3Rpb24gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpIHsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIGNvbnN0IHN0ZXBzID0gb3V0cHV0RWxlbWVudC5zdGVwczsKCiAgY29uc3QgbmV4dCA9IHN0ZXBzLm5leHQob3V0cHV0RWxlbWVudC5sYXN0UHJvbWlzZVZhbHVlKTsKICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5leHQudmFsdWUucHJvbWlzZSkudGhlbigodmFsdWUpID0+IHsKICAgIC8vIENhY2hlIHRoZSBsYXN0IHByb21pc2UgdmFsdWUgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlIG5leHQKICAgIC8vIHN0ZXAgb2YgdGhlIGdlbmVyYXRvci4KICAgIG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSA9IHZhbHVlOwogICAgcmV0dXJuIG5leHQudmFsdWUucmVzcG9uc2U7CiAgfSk7Cn0KCi8qKgogKiBHZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJldHdlZW4gZWFjaCBhc3luYyBzdGVwIG9mIHRoZSB1cGxvYWQKICogcHJvY2Vzcy4KICogQHBhcmFtIHtzdHJpbmd9IGlucHV0SWQgRWxlbWVudCBJRCBvZiB0aGUgaW5wdXQgZmlsZSBwaWNrZXIgZWxlbWVudC4KICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIG91dHB1dCBkaXNwbGF5LgogKiBAcmV0dXJuIHshSXRlcmFibGU8IU9iamVjdD59IEl0ZXJhYmxlIG9mIG5leHQgc3RlcHMuCiAqLwpmdW5jdGlvbiogdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKSB7CiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7CiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CgogIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRwdXRJZCk7CiAgb3V0cHV0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsKCiAgY29uc3QgcGlja2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBpbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgcmVzb2x2ZShlLnRhcmdldC5maWxlcyk7CiAgICB9KTsKICB9KTsKCiAgY29uc3QgY2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgaW5wdXRFbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICBjYW5jZWwudGV4dENvbnRlbnQgPSAnQ2FuY2VsIHVwbG9hZCc7CiAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBjYW5jZWwub25jbGljayA9ICgpID0+IHsKICAgICAgcmVzb2x2ZShudWxsKTsKICAgIH07CiAgfSk7CgogIC8vIENhbmNlbCB1cGxvYWQgaWYgdXNlciBoYXNuJ3QgcGlja2VkIGFueXRoaW5nIGluIHRpbWVvdXQuCiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9LCBGSUxFX0NIQU5HRV9USU1FT1VUX01TKTsKICB9KTsKCiAgLy8gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcGljayB0aGUgZmlsZXMuCiAgY29uc3QgZmlsZXMgPSB5aWVsZCB7CiAgICBwcm9taXNlOiBQcm9taXNlLnJhY2UoW3BpY2tlZFByb21pc2UsIHRpbWVvdXRQcm9taXNlLCBjYW5jZWxQcm9taXNlXSksCiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdzdGFydGluZycsCiAgICB9CiAgfTsKCiAgaWYgKCFmaWxlcykgewogICAgcmV0dXJuIHsKICAgICAgcmVzcG9uc2U6IHsKICAgICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICAgIH0KICAgIH07CiAgfQoKICBjYW5jZWwucmVtb3ZlKCk7CgogIC8vIERpc2FibGUgdGhlIGlucHV0IGVsZW1lbnQgc2luY2UgZnVydGhlciBwaWNrcyBhcmUgbm90IGFsbG93ZWQuCiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKCiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICBsaS5hcHBlbmQoc3BhbihmaWxlLm5hbWUsIHtmb250V2VpZ2h0OiAnYm9sZCd9KSk7CiAgICBsaS5hcHBlbmQoc3BhbigKICAgICAgICBgKCR7ZmlsZS50eXBlIHx8ICduL2EnfSkgLSAke2ZpbGUuc2l6ZX0gYnl0ZXMsIGAgKwogICAgICAgIGBsYXN0IG1vZGlmaWVkOiAkewogICAgICAgICAgICBmaWxlLmxhc3RNb2RpZmllZERhdGUgPyBmaWxlLmxhc3RNb2RpZmllZERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbi9hJ30gLSBgKSk7CiAgICBjb25zdCBwZXJjZW50ID0gc3BhbignMCUgZG9uZScpOwogICAgbGkuYXBwZW5kQ2hpbGQocGVyY2VudCk7CgogICAgb3V0cHV0RWxlbWVudC5hcHBlbmRDaGlsZChsaSk7CgogICAgY29uc3QgZmlsZURhdGFQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7CiAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7CiAgICB9KTsKICAgIC8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGJlIHJlYWR5LgogICAgbGV0IGZpbGVEYXRhID0geWllbGQgewogICAgICBwcm9taXNlOiBmaWxlRGF0YVByb21pc2UsCiAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgYWN0aW9uOiAnY29udGludWUnLAogICAgICB9CiAgICB9OwoKICAgIC8vIFVzZSBhIGNodW5rZWQgc2VuZGluZyB0byBhdm9pZCBtZXNzYWdlIHNpemUgbGltaXRzLiBTZWUgYi82MjExNTY2MC4KICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAocG9zaXRpb24gPCBmaWxlRGF0YS5ieXRlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGZpbGVEYXRhLmJ5dGVMZW5ndGggLSBwb3NpdGlvbiwgTUFYX1BBWUxPQURfU0laRSk7CiAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZmlsZURhdGEsIHBvc2l0aW9uLCBsZW5ndGgpOwogICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CgogICAgICBjb25zdCBiYXNlNjQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTsKICAgICAgeWllbGQgewogICAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgICBhY3Rpb246ICdhcHBlbmQnLAogICAgICAgICAgZmlsZTogZmlsZS5uYW1lLAogICAgICAgICAgZGF0YTogYmFzZTY0LAogICAgICAgIH0sCiAgICAgIH07CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPQogICAgICAgICAgYCR7TWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCl9JSBkb25lYDsKICAgIH0KICB9CgogIC8vIEFsbCBkb25lLgogIHlpZWxkIHsKICAgIHJlc3BvbnNlOiB7CiAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgIH0KICB9Owp9CgpzY29wZS5nb29nbGUgPSBzY29wZS5nb29nbGUgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYiA9IHNjb3BlLmdvb2dsZS5jb2xhYiB8fCB7fTsKc2NvcGUuZ29vZ2xlLmNvbGFiLl9maWxlcyA9IHsKICBfdXBsb2FkRmlsZXMsCiAgX3VwbG9hZEZpbGVzQ29udGludWUsCn07Cn0pKHNlbGYpOwo=",
"ok": true,
"headers": [
[
"content-type",
"application/javascript"
]
],
"status": 200,
"status_text": ""
}
},
"base_uri": "https://localhost:8080/",
"height": 40
},
"outputId": "cc8181b5-26d6-48fe-8c7f-5dc7813f457f"
},
"source": [
"## file feltöltés kiválasztással 1\n",
"from google.colab import files\n",
"uploaded = files.upload()\n",
"\n",
"\n",
"## file feltöltés kiválasztással 2\n",
"from google.colab import files\n",
"uploaded = files.upload()\n",
"for fn in uploaded.keys():\n",
" print('User uploaded file \"{name}\" with length {length} bytes'.format(\n",
" name=fn, length=len(uploaded[fn])))"
],
"execution_count": 81,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
"\n",
" \n",
" \n",
" "
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "S1T2CkUEJlbm",
"colab_type": "code",
"colab": {}
},
"source": [
"##file feltöltés közvetlen file elériut meadással\n",
"files.download(\"downloaded_weights.12-1.05.hdf5\")\n",
"\n",
"\n",
"\n",
"## google drive elérés\n",
"from google.colab import drive\n",
"drive.mount('/content/drive') ## a megjelenő ablakban azonosito megadása szükséges\n",
"\n",
"\n",
"\n",
"with open('/content/drive/My Drive/foo.txt', 'w') as f:\n",
" f.write('Hello Google Drive!')\n",
"!cat /content/drive/My\\ Drive/foo.txt\n",
"\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "V4HCdV47MW_h",
"colab_type": "code",
"colab": {}
},
"source": [
"## file letöltés\n",
"from google.colab import files\n",
"\n",
"with open('example.txt', 'w') as f:\n",
" f.write('some content') ### minta file létrehozása\n",
"\n",
"files.download('example.txt') # létrehozott file letöltése\n"
],
"execution_count": 0,
"outputs": []
}
]
}