{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# Bevezetés a Python nyelvbe\n", "\n", "
\n", "Az előadás nagyvonalakban a hivatalos Python tutorial-t követi.\n", "
\n", "\n", "A Python egy olyan általános körben használható magas szintű programozási nyelv, aminek az egyik alapelve az olvasható kód írása egy nagyon tiszta szintaxis használatával. 1991-ben alkotta meg Guido Van Rossum.\n", "
\n", "\n", "Nevét a Monthy Python ihlette, nem az állat.\n", "
" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Miért Python?\n", "### Népszerűsége\n", "\n", "* http://blog.codeeval.com/codeevalblog/2016/2/2/most-popular-coding-languages-of-2016\n", "* http://www.tiobe.com/tiobe-index/\n", "* http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2016\n", "* http://pypl.github.io/PYPL.html\n", "\n", "### Előnyei\n", "\n", "* Könnyen tanulható, interaktív, kezdőknek ideális (ld. Raspberry Pi)\n", "* A kód könnyen olvasható, bonyolult feladatokra egyszerű parancsok\n", "* Több rendszeren, platformon fut\n", "* Objektumorientált\n", "* Web-programozásra alkalmas (Google, Yahoo, IBM, NASA, Disney, Dropbox,...)\n", "* Gyors fejlesztés, rövid kód, nagy feladatokra is alkalmas\n", "* Források nagy száma\n", "* Az adattudományban (data science) erős\n", "* Nyílt forráskódú, szabadon hozzáférhető, használható, üzleti célra is\n", "\n", "### Hátrányai\n", "\n", "* Lassú\n", "* Mobil-programozásra nem a legjobb\n", "* Nagy grafikai igényű (3D) programozásra nem alkalmas\n" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# Futtatás\n", "Több módon is futtathatunk python kódot.\n", "\n", "### Parancssorból\n", "Parancssorból futtatható, pl interaktívan:\n", "\n",
"$ python\n",
"
\n",
"Ekkor interaktív pythont kapunk amibe közvetlen írhatunk parancsokat.\n",
"\n",
"$ python hello.py\n",
"
\n",
"Ekkor lefut a program és ha van szöveges kimenete a programnak az látható lesz a parancssorban.\n",
"\n",
"### Jupyter (IPython)\n",
"A Jupyter egy böngészőn keresztül használható fejlesztői környezet pythonhoz, mely a tavalyi Sage notebookhoz hasonlít. Ez az amit az előadás írásához használunk és gyakorlaton is fogjuk használni.\n",
"\n",
"$ ipython notebook --port=##### --no-browser\n",
"
\n",
"Ahol a ##### helyére egy 16000 és 20000 közti számot írjunk. Ekkor böngészőben a localhost:##### oldalon érhetjük el az IPython notebookunkat.\n",
"\n",
"### Spyder\n",
"A Spyder is egy fejlesztői környezet pythonhoz, a leibniz-en fent van és kényelmesen telepíthető bármilyen oprendszerre: Telepítés\n",
"int
(egész): 2354, -12\n",
"* float
(lebegőpontos szám): 1.0, -23.567, 2.3E4\n",
"* bool
(logikai): True, False\n",
"* string
(karakterlánc): \"kiskutya\", \"Volt egyszer egy kiskutya\""
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Műveletek, kifejezések\n",
"Az objektumok műveletekkel összekapcsolva kifejezéseket adnak, melyek kiértékelve valamilyen típusú objektumot adnak. Az egész és a lebegőpontos műveletek:\n",
"* a + b
összeadás\n",
"* a - b
kivonás\n",
"* a * b
szorzás\n",
"* a / b
osztás (Python 2.7-ben int/int = int, Python 3-tól float)\n",
"* a // b
egész osztás\n",
"* a % b
maradékképzés\n",
"* a ** b
hatványozás (NEM a ^ b
, mint a sage-ben!)\n",
"* a == b, a < b, a > b, a <= b, a >= b, a != b, a <> b
\n",
"\n",
"Logikai műveletek bool-típusúak közt:\n",
"* a and b
, „és”\n",
"* a or b
, „megengedő vagy” \n",
"* not a
, „nem”\n",
"\n",
"Stringeken alapvető műveletek:\n",
"* a + b
, konkatenálás\n",
"* a in b
, tartalmazás vizsgálat (eredménye bool)\n",
"\n",
"### Például"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"5 + 11"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"2 ** 251"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"a = 54\n",
"b = a - 50\n",
"a * b"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"54 > 12"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"b < 0"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"54 > 12 or b < 0"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"s = \"macska\"\n",
"\"ma\" in s"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"s = \"kis\" + s\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Változónevek\n",
"* a név betűvel vagy aláhúzással kezdődhet: [_a-zA-Z]\n",
"* a név további karakterei az előbbieken felül számok is lehetnek: [_a-zA-Z0-9]\n",
"* elméletileg bármilyen hosszú lehet a név\n",
"* név nem lehet foglalt szó\n",
"* nagybetű-kisbetű érzékeny, tehát a val1 név nem azonos a Val1 névvel"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Karakterláncok\n",
"Három módon adhatunk meg karakterláncokat:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"s = \"kiskutya\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"s = 'kiskutya'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"s = \"\"\"Volt egyszer egy kiskutya.\n",
"Elment a vásárba.\"\"\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Itt a vezérlő karaketerek (\\n a sorvége jel) és az ékezetes karakterek UTF-8 kódja (á betű kódja c3a1, \\x után a bájt hexa kódja) jelenik meg. A print utasítás olvashatóan írja ki: "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"print s"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Az első kettőnek kényelmi szerepe van, mert amelyik idézőjelet nem használjuk a string jelzésére azt használhatjuk a stringben. Például:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"print \"Egy 'macskaköröm' \" + 'ketto \"macskaköröm\"'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"'Van ilyen: \\' meg ilyen: \"'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"print 'Van ilyen: \\' meg ilyen: \"'"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"A harmadikban használhatunk sortörést és ez a stringben is sortörésként fog megjelenni. Míg a többi jelöléssel sortörést a \\n
kifejezéssel tudunk tenni.\n",
"\\\\\\\\ (\\\\), \\' ('), \\\" (\"), \\n
(új sor), \\t
(tab)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Kiírás\n",
"Itt a Jupyterben az egyes cellák eredménye az utolsó érték ami kiértékelődött, de például, ha parancssorban futtatunk egy korábban megírt python file-t, akkor még ez sem lesz kiírva. Ha valamit ki akarunk írni azt konkrétan meg kell tennünk:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"5 + 8\n",
"5 + 7"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"a = 5\n",
"print a\n",
"a = 15\n",
"print a * 2\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"string = \"kiskutya\"\n",
"\"Volt egyszer egy \" + string"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"print \"Volt egyszer egy %s, elment a vásárba.\" % string"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Ha egy stringben %s
szerepel akkor utána %
jellel behelyettesíthetünk erre a pozícióra egy másik stringet. Több behelyettesítés esetén:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"print \"Volt %s egy %s, elment a %s.\" % (\"egyszer\", \"kiskutya\", \"vásárba\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Nem csak stringeket lehet behelyettesíteni, egész vagy lebegőpontos számokat is lehet:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"print \"\"\"A %d egy decimális egész (integer), \n",
"a %f pedig egy lebegőpontos (floating point) szám.\"\"\" % (23, 1.0/3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Beolvasás\n",
"Ha már kiírni tudunk dolgokat, akkor tanuljunk meg beolvasni is:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"raw_input()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"a = 5\n",
"nev = raw_input(\"Mi a neved? \")\n",
"print \"Szia %s!\" % nev"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"input() > 10"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"input() ** 10"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"source": [
"A különbség a raw_input
és input
között ez:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"a = raw_input()\n",
"a + \" macska\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"b = input()\n",
"b + \" macska\""
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Azaz a raw_input
mindig stringként olvassa be bármit is adunk meg, míg az input
megpróbálja értelmezni azt amit beírtunk:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"type(input())"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Elágazás"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"x = input()\n",
"if x < 0:\n",
" print \"ez negatív\"\n",
"elif x == 0:\n",
" print \"ez nulla\"\n",
"elif x == 1:\n",
" print \"ez egy\"\n",
"else:\n",
" print \"ez sok\""
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true,
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Az elif
-ek száma tetszőleges, de se az elif
se az else
megadása nem kötelező.\n",
"elif
blokk fut le aminek a feltétele igaz, ha ezek se igazak akkor az else
ág blokkja fut le, feltéve hogy van.\n",
"while
ciklus blokkja lefut újra és újra, amíg teljesül a ciklus feltétele.\n",
"a
változót, amíg annak köbe legalább 1000 nem lesz.\n",
"