{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. előadás\n", "_Tartalom_: Python bevezetés, Python 2 vs Python 3, IDE, egyszerű matematika, változók, szintaxis, és logika, ciklusok I., string I.\n", "\n", "A Python egy népszerű, általános célú, magas szintű szkript nyelv, melyet Guido van Rossum holland programozó publikált 1991-ben. A Python keresztplatformos nyelv, futtatókörnyezete több operációs rendszeren (Windows, Linux, OsX, Android) elérhető. A népszerűségéhez nagyban hozzájárul számos kiegészítőcsomagja, mint a később tárgyalandó numpy, matplotlib, TensorFlow, pyQT, openCV, iPython, stb.\n", "\n", "A Pythont tanuláshoz és egyszerűbb esetekben használhatjuk interaktívan is, az értelmezővel soronként végrehajttathatjuk az utasításainkat. Persze lehetőségünk van `.py` kiterjesztésű fájlokat készíteni és futtatni is, sőt lehet generálni futtatható fájlt vagy telepítőt. Egyelőre viszont maradjunk az alapoknál, ismerkedjünk a szintaktikával és az egyszerű matematikával. \n", "\n", "_Megjegyzés_: az előadások során a Jupyter notebookot fogjuk használni ez interaktív python notebook (`.ipynb`) fájlokat hoz létre, amiben a kódok és kimenetek szerkeszthetőek, illetve GitHub-on a legutolsó futás lesz látható. A gyakorlati `.py` kiterjesztésű fájlokhoz a Jupyter notebook nem fog kelleni, ez csak a demonstrációt könnyíti meg.\n", "\n", "_Kedvcsinálóként_ nézzünk meg egy rövid videót, ahogy hogyan használhatjuk a VS code könnyűsúlyú kódszerkesztőjét python scriptek futtatására. Közvetlen link: [youtu.be/QKFjbnWpQ-E](https://www.youtube.com/watch?v=QKFjbnWpQ-E) " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAoICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgIChALCAgOCQgIDRUNDxERExMTCAsWGBYSGBASExIBBQUFCAcIDwkJDxUSDxAWGBUVEhUSFRIVFRUVFRIVFRUWFRIWFRISEhUSFRUWFRIWFRUVFhUVFRUSFRUVEhUSFf/AABEIAWgB4AMBIgACEQEDEQH/xAAdAAEAAgIDAQEAAAAAAAAAAAAAAgUEBgEDCQcI/8QATBAAAgICAQICAwoLBwEHBAMAAQIAAwQREgUTITEGFCIHIzJBUVJxkbHTFSQ0QlRhc4GhsrMzNXJ0k8HCCBZDU1VikvAYJYLRREWD/8QAGwEBAQEBAAMBAAAAAAAAAAAAAAECAwQGBwX/xAA6EQEAAgECAwQIBAMIAwAAAAAAAQIRAwQSITFBUWFxBRMVUoGRsfAiMkKhBnLRFCMzU2KCweFjwvH/2gAMAwEAAhEDEQA/APxlERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQERED2YmDabRlVcQ5xzRb3D7zwW7nSaT4nu74d4eG18tzOlfdRacquwEChaiG1dZyd2J0po49sIB4898iSB4BSHsM2WBmvYFOdXhZJucWZjtZZSqMjrWCAK6kY1ICBon2lPn478psMTE1yTXLW0rz3JV7OArbFYNWKw1uzWcusl6ypARSQyhQxuYezwnXXjdSVQguqbSOA7cCeRxRx5+97fWT5Hw9kHly8JtEScHjLPq/Gfmq8hMj1esA871tqLlSi860vQ27OgoLUq3gABtviEwXxuoe0wvQ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\n", "text/html": [ "\n", " <iframe\n", " width=\"1000\"\n", " height=\"600\"\n", " src=\"https://www.youtube.com/embed/QKFjbnWpQ-E\"\n", " frameborder=\"0\"\n", " allowfullscreen\n", " ></iframe>\n", " " ], "text/plain": [ "<IPython.lib.display.YouTubeVideo at 0x2345bdd3240>" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Youtube\n", "from IPython.lib.display import YouTubeVideo\n", "YouTubeVideo('QKFjbnWpQ-E', width = 1000, height = 600)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Python 2 vs Python 3\n", "\n", "Sajnos a Python még relatív széles körben használt 2.x változata, és a 2008 óta elérhető 3.x változat között nincs teljes kompatibilitás. Tehát, ha például az interneten ilyen kóddokat találunk:\n", "\n", "``` python\n", "print \"Hello, World!\"\n", "```\n", "gyaníthatjuk, hogy Python 2.x -el van dolgunk. Ugyanez a kód Python 3.x-ben így néz ki:\n", "``` python\n", "print(\"Hello, World!\")\n", "```\n", "\n", "Erről még lesz szó, egyelőre annyit kell tudnunk, hogy ez a segédlet a 3.x verzióval lett tesztelve." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.7.1\n" ] } ], "source": [ "# mivel a Python 2.x és 3.x szintakitiája enyhén eltér ellenőrizzük, hogy a 3-ast használjuk-e\n", "# később további magyarázat lesz ezekről is\n", "import platform\n", "print(platform.python_version())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Térjük tehát rá a matematikai alapokra.\n", "#### Egyszerű matematika" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "48" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "6 * 8 # szorzás" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1024" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2 ** 10 # hatványozás" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "33.333333333333336" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100 / 3 # osztás" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "33" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100 // 3 # egész osztás" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "52 % 10 # modulo osztás" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Pythonban a megszokott *aritmetikai operátorok* jelen vannak, sőt további hasznosak is.\n", "\n", "| Operátor| Leírás| \n", "| ------------- |-------------|\n", "|`+`| összeadás |\n", "|`-`| kivonás|\n", "|`*`| osztás |\n", "|`**`| hatványozás |\n", "|`//`| egész osztás |\n", "|`/`| osztás |\n", "|`%`| modulo osztás |\n", "\n", "A Python a # karakter utáni szöveget a sor végéig megjegyzésnek értelmezi, több soros megjegyzést 3 idézőjellel vagy aposztróffal kezdhetünk és zárhatunk le.\n", "\n", "```python\n", "\"\"\"\n", "Ez több \n", "soros komment\n", "\"\"\"\n", "'''\n", "Ez \n", "is.\n", "'''\n", "```\n", "#### Változók\n", "A változókba mentett értékek esetén interaktív módban nem jelenik meg a művelet adott eredménye. Pl:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "x = (3 ** 3 ) + 0.2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "De kiírhatjuk például a `print` funkcióval" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "27.2\n" ] } ], "source": [ "print(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python-ban nincs automatikus típus konverzió a változókra, de a `type` függvénnyel kiírathatjuk egy változó típusát." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "str" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = \"1024\"\n", "type(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A következő műveletben sincs automatikus típus konverzió, így hibát kapunk. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`x + s`\n", "``` python\n", "TypeError: unsupported operand type(s) for +: 'float' and 'str'\n", "```" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "str" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(s)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(s) is str " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "float" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A Python alapvetően 3 numerikus típust ismer: `int`, `float` és `complex`. " ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "<class 'int'>\n", "<class 'float'>\n", "<class 'complex'>\n", "<class 'float'>\n" ] } ], "source": [ "a1 = 120\n", "print(type(a1))\n", "\n", "a2 = 12.0\n", "print(type(a2))\n", "\n", "a3 = 5 + 1j\n", "print(type(a3))\n", "\n", "a4 = float(7)\n", "print(type(a4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A `sys.float_info.dig` megadja a tizedesjegyek maximális pontosságát." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sys\n", "sys.float_info.dig" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A változóinkat integerré konvertálhatjuk, például így:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1051.2" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x + int(s)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'10241024102410241024102410241024102410241024102410241024102410241024102410241024'" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s * 20 # ez nem megszorozza, hanem többszörözi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pythonban az osztályokat `StudlyCaps` a konstanasokat `ALLCAPS` a változókat, metódusokat pedig `snake_case` konvenccióval szokás jelölni. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### String I.\n", "Stringeket többféleképp definiálhatunk: például aposztróffal és idézőjellel is.\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ez az egyik mód. De ez is működik.\n" ] } ], "source": [ "s1 = \"Ez az egyik mód.\"\n", "s2 = 'De ez is működik.'\n", "print(s1, s2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Emlékeztető a karakterkódolásokról:\n", "- Az egybájtos karakterkódolások:\n", " - *ASCII* » 128 karakter, 7 bit (2^7 = 128)\n", " - *Latin-1* » másnéven ISO8859-1 » az első 128 ugyanaz, mint az ASCII, de, utána még 96 betűt használ (160-255 tartományban), így is belefér az egy bájtba (2^8 = 256) » nincs benn magyar ő és ű csak û és õ\n", " - *Latin-2* » hasonló a Latin-1-hez, de ebben a magyar ő és ű is megtalálható\n", " - *Windows-1250* » ez hasonlít a Latin-2-hez, többek közt a Windows szöveges fájok is használják, konzolos alkalmazásoknál előfordul.\n", " - *OEM-852* » konzolban szintén előfordulhat, de nem hasonlít a Latin2-höz\n", "- A többbájtos karakterkódolások:\n", " - *Unicode* » A Unicode az előzőekkel ellentétben nem egyetlen szabvány, inkább egy szabványcsomag. Az első 128 karaktere ugyanaz, az ASCII-é, de több, mint 120000 karaktert tartalmaz a világ majdnem összes nyelvén. Több bájtos, de az egybájtosról viszonylag könnyen átalakítható kódolás, de vissza már kevésbé, hiszen egy Unicode karakter nem biztos, hogy létezik pl.: Latin-2-ben. További probléma, hogy a 2 bájtot nem minden architektúra ugyanabban a sorrendben tárolja. Ezt a BOM (byte order mark) hivatott jelezni, mely vagy 0xFEFF vagy 0xFFFE. A Unicode szövegeket különböző karakterkódolással tárolhatjuk. A Unicode szabvány meghatározza az `UTF-8`, `UTF-16` és az `UTF-32` karakterkódolást, de számos más kódolás is használatban van.\n", " - *UTF-8* » Változó méretű karakterkódolás, 1 bájtos egységeket használ, így nem csak sorrendben, de tényleges bináris kódban is kompatibilis az ASCIIvel, hiszen az egy bájtba beleférő értékeket egy bájton is tárolja. Neve a 8-bit Unicode Transformation Format, 8 bites Unicode átalakítási formátum, ami utal arra, hogy bármilyen Unicode karaktert képes reprezentálni, gyakran használják internet-alapú karakterkódolásra.\n", " \n", "A `sys.getdefaultencoding()` megadja, mi az alapértelmezett kódolás." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "utf-8\n" ] } ], "source": [ "import sys\n", "print(sys.getdefaultencoding())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A különbség az aposztróffal és idézőjellel készített stringek között, hogy \n", "``` python\n", "\"ebben így lehet ' karakter\" \n", "'ebben viszont \\' kell a visszaper elé'\n", "'illetve fordítva: itt lehet \" '\n", "\"itt viszont így: \\\" \"\n", "```\n", "\n", "#### Formázott kiíratás\n", "A `print` funckió rengeteg lehetőséget ad. Később erre még visszatérünk, most nézzük meg a `sep` elválasztó és az `end` működését példákon szemléltetve." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a b c da'sda\"as\"sd--e\n", "a b c deas'aaa'asd\n", "abcde\n", "a***b***c***de\n", "x\n", "y\n", "Ez kerüljön egy sorba.\n" ] } ], "source": [ "print('a','b', 'c', 'da\\'sda\"as\"sd--e')\n", "print(\"a\",\"b\", \"c\", \"deas'aaa'asd\")\n", "print(\"a\",\"b\", \"c\", \"de\", sep=\"\")\n", "print(\"a\",\"b\", \"c\", \"de\", sep=\"***\")\n", "print(\"x\\ny\")\n", "print(\"Ez kerüljön\", end=\" \")\n", "print(\"egy sorba.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ciklusok I., alapvető szintaktika\n", "\n", "Összetettebb kódsorok készítése előtt ki kell emelni a Python azon sajátosságát, hogy a Python programokban a kód blokkokat\n", "a sor elején található szóközökkel vagy tabulátorokkal jelöljük. Más nyelvekben a blokk elejét és végét jelölik meg, például C-ben, C++-ban stb. `'{'` és `'}'` zárójelekkel. A nyelv ezen tulajdonsága kikényszeríti a könnyen olvasható kód készítését, másik oldalon nagyobb figyelmet igényel a sorok írásánál. A szóköz és tabulátor karaktereket nem lehet keverni, gyakran négy szóközös tagolást alkalmaznak. " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "range(6): \t 0 1 2 3 4 5\n", "range(3, 9): \t 3 4 5 6 7 8\n", "range(3,14,2):\t 3 5 7 9 11 13\n", "range(14,3,-2):\t 14 12 10 8 6 4\n", "array (tömb):\t 2 3 5 7\n", "while:\t\t 0 1 2 3 4" ] } ], "source": [ "print(\"range(6): \\t\", end=\"\")\n", "# 0 1 2 3 4 5\n", "for x in range(6):\n", " print(\"%4d\" % x, end=\"\")\n", " \n", "print(\"\\nrange(3, 9): \\t\", end=\"\")\n", "# 3 4 5 6 7 8\n", "for x in range(3, 9):\n", " print(\"%4d\" % x, end=\"\") \n", "\n", "print(\"\\nrange(3,14,2):\\t\", end=\"\")\n", "# 3 5 7 9 11 13\n", "for x in range(3, 14, 2):\n", " print(\"%4d\" % x, end=\"\")\n", " \n", "\n", "print(\"\\nrange(14,3,-2):\\t\", end=\"\")\n", "# 14 12 10 8 6 4\n", "for x in range(14,3,-2):\n", " print(\"%4d\" % x, end=\"\")\n", " \n", "\n", "print(\"\\narray (tömb):\\t\", end=\"\") \n", "primes = [2, 3, 5, 7] # ez egy tömb, később erről bővebben\n", "for prime in primes:\n", " print(\"%4d\" % prime, end=\"\")\n", "\n", "\n", "print(\"\\nwhile:\\t\\t\", end=\"\")\n", "# 0 1 2 3 4 \n", "i = 0\n", "while i < 5:\n", " print(\"%4d\" % i, end=\"\")\n", " i += 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Comprehension\n", "A listaértelmezések (list comprehension) a listák létrehozásának rövidebb módja. _Megjegyzés_: a listákról még később lesz szó." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 2, 3, 4, 5]\n", "[3, 5, 7, 9, 11, 13]\n", "[8, 32, 128, 512, 2048, 8192]\n" ] } ], "source": [ "print([i for i in range(6)])\n", "print([i for i in range(3,14,2)])\n", "print([2**i for i in range(3,14,2)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### _Used sources_ / Felhasznált források\n", "- [Shannon Turner: Python lessons repository](https://github.com/shannonturner/python-lessons) MIT license (c) Shannon Turner 2013-2014\n", "- [Siki Zoltán: Python mogyoróhéjban](http://www.agt.bme.hu/gis/python/python_oktato.pdf) GNU FDL license (c) Siki Zoltán" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }