{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## [Standard adatfolyamok](https://en.wikipedia.org/wiki/Standard_streams)\n", "\n", "Az operációs rendszer indításkor minden folyamathoz hozzárendel 3 szabványos adatfolyamot: a [standard bemenetet](https://docs.python.org/3/library/sys.html#sys.stdin), a [standard kimenetet](https://docs.python.org/3/library/sys.html#sys.stdout), és a [standard hibakimenetet](https://docs.python.org/3/library/sys.html#sys.stderr). Alapértelmezés szerint a standard bemenet a billentyűzettel, a standard kimenet és hibakimenet pedig a képernyővel van összekötve. Ez a beállítás módosítható, pl. a standard bemenet érkezhet egy fájlból vagy egy másik programból, a standard kimenet és hibakimenet pedig íródhat fájlba vagy továbbítódhat másik programnak." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Standard bemenet\n", "\n", "- A standard bemenetről adatokat bekérni az [input](https://docs.python.org/3/library/functions.html#input) függvény segítségével lehet.\n", "- Az eredmény sztring típusú. Ha más adattípusra van szükség, akkor a konvertálni kell." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kérek egy szöveget: alma\n" ] }, { "data": { "text/plain": [ "'alma'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sztring típusú adat beolvasása.\n", "s = input('Kérek egy szöveget: ')\n", "s" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kérek egy egész számot: 23\n" ] }, { "data": { "text/plain": [ "23" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Egész típusú adat beolvasása.\n", "n = int(input('Kérek egy egész számot: '))\n", "n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Standard kimenet és hibakimenet\n", "\n", "- A standard kimenetre és hibakimenetre kiírni a [print](https://docs.python.org/3/library/functions.html#print) függvény segítségével lehet." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello\n", "bello\n" ] } ], "source": [ "# Kiírás a standard kimenetre.\n", "print('hello')\n", "print('bello')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hellobello" ] } ], "source": [ "# Kiírás soremelés nélkül.\n", "print('hello', end='')\n", "print('bello', end='')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# Egyetlen soremelés kiírása.\n", "print()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Hiba történt!\n" ] } ], "source": [ "# Kiírás a standard hibakimenetre.\n", "import sys\n", "print('Hiba történt!', file=sys.stderr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### [Formázott kiírás](https://docs.python.org/3/tutorial/inputoutput.html#fancier-output-formatting)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Az első megoldás 2.5, a második megoldás 4.78.\n" ] } ], "source": [ "# Formázott kiírás f-sztringgel.\n", "x1 = 2.5\n", "x2 = 4.78\n", "print(f'Az első megoldás {x1}, a második megoldás {x2}.')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "első megoldás: 2.5, második megoldás: 4.8\n" ] } ], "source": [ "# Kiírás 1 tizedesjegy pontossággal.\n", "print(f'első megoldás: {x1:.1f}, második megoldás: {x2:.1f}')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "egész szám: 42, sztring: alma\n" ] } ], "source": [ "# Egész szám ill. sztring kiírása.\n", "i = 42\n", "s = 'alma'\n", "print(f'egész szám: {i}, sztring: {s}')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Az első megoldás 2.500000, a második megoldás 4.780000.\n" ] } ], "source": [ "# Formázott kiírás % operátorral.\n", "x1 = 2.5\n", "x2 = 4.78\n", "print('Az első megoldás %f, a második megoldás %f.' % (x1, x2))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Az első megoldás 2.5, a második megoldás 4.8.\n" ] } ], "source": [ "# Kiírás 1 tizedesjegy pontossággal.\n", "print('Az első megoldás %.1f, a második megoldás %.1f.' % (x1, x2))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Az első megoldás 2.500\n" ] } ], "source": [ "# Kiírás adott tizedesjegy pontossággal.\n", "t = 3\n", "print(f'Az első megoldás {x1:.{t}f}')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Az első megoldás 2.500\n" ] } ], "source": [ "# Kiírás adott tizedesjegy pontossággal.\n", "t = 3\n", "print('Az első megoldás %.*f' % (t, x1))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "egész szám: 42, sztring: alma\n" ] } ], "source": [ "# Egész szám ill. sztring kiírása.\n", "i = 42\n", "s = 'alma'\n", "print('egész szám: %d, sztring: %s' % (i, s))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Egy meg egy az 2.'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Megjegyzés: A f-sztring ill. a % operátor\n", "# kiírás nélkül is alkalmazható, sztringműveletként.\n", "f'Egy meg egy az {1 + 1}.'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vezérlési szerkezetek\n", "\n", "- Pythonban a vezérlési szerkezetek belsejét indentálással (azaz beljebb írással) kell jelölni.\n", "- Emiatt garantált, hogy a program megjelenése és logikai jelentése összhangban van." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### [if utasítás](https://docs.python.org/3/reference/compound_stmts.html#the-if-statement)\n", "\n", "- Szintaxis:\n", "```\n", " if FELTÉTEL1:\n", " UTASÍTÁS1\n", " elif FELTÉTEL2:\n", " UTASÍTÁS2\n", " else:\n", " UTASÍTÁS3\n", "```\n", "\n", "- Működés:\n", "``` \n", " +-----------+ igaz +-----------+\n", " --->| FELTÉTEL1 |---+-------->| UTASÍTÁS1 |-----------------------------+--->\n", " +-----------+ | +-----------+ |\n", " | |\n", " | hamis +-----------+ igaz +-----------+ |\n", " +-------->| FELTÉTEL2 |---+-------->| UTASÍTÁS2 |---+\n", " +-----------+ | +-----------+ |\n", " | |\n", " | hamis +-----------+ |\n", " +-------->| UTASÍTÁS3 |---+\n", " +-----------+\n", "```\n", "- Megjegyzések:\n", " + Több elif ág is szerepelhet.\n", " + Az elif ágak és az else ág is elhagyható.\n", " + Ha az utasítás 1 soros, akkor írható az if-fel elif-fel ill. az else-szel azonos sorba." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hány éves vagy? 16\n", "Sajnos nem adhatok sört.\n" ] } ], "source": [ "# Példa: Kérsz sört?\n", "x = int(input('Hány éves vagy? '))\n", "if x < 18:\n", " print('Sajnos nem adhatok sört.') \n", "else:\n", " print('Kérsz sört?')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a: 1\n", "b: -3\n", "c: 2\n", "x1=2.0, x2=1.0\n" ] } ], "source": [ "# Példa: Másodfokú egyenlet megoldó.\n", "\n", "# együtthatók bekérése\n", "a = float(input('a: '))\n", "b = float(input('b: '))\n", "c = float(input('c: '))\n", "\n", "# diszkrimináns kiszámítása\n", "d = b**2 - 4 * a * c\n", "\n", "# elágazás\n", "if d > 0: \n", " # 2 megoldás\n", " x1 = (-b + d**0.5) / (2 * a)\n", " x2 = (-b - d**0.5) / (2 * a)\n", " print(f'x1={x1}, x2={x2}')\n", "elif d == 0: \n", " # 1 megoldás\n", " x1 = -b / (2 * a)\n", " print(f'x1={x1}')\n", "else:\n", " # 0 megoldás\n", " print('Nincs valós megoldása.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### [while utasítás](https://docs.python.org/3/reference/compound_stmts.html#the-while-statement)\n", "\n", "- Szintaxis:\n", "```\n", " while FELTÉTEL:\n", " UTASÍTÁS\n", "```\n", "\n", "- Működés:\n", "```\n", " +----------+ igaz\n", " +<-----| UTASÍTÁS |--------+\n", " | +----------+ |\n", " | |\n", " | +----------+ | hamis\n", " ---+----->| FELTÉTEL |--------+-------->\n", " +----------+ \n", "```\n", "- Megjegyzések:\n", " + Egy jól megírt program esetén az utasítás a feltételt előbb-utóbb hamisra állítja. (Ellenkező esetben, ha a feltétel igaz, akkor az is marad, így végtelen ciklus keletkezik.)\n", " + Akkor érdemes while ciklust alkalmazni, ha a ciklus elején még nem tudjuk pontosan az iterációk számát." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hány pontot értél el? 10\n", "Sajnos nem sikerült. Tanulj még!\n", "Hány pontot értél el? 8\n", "Sajnos nem sikerült. Tanulj még!\n", "Hány pontot értél el? 12\n", "Gratulálok, átmentél!\n" ] } ], "source": [ "# Példa: Móricka a programozásvizsgán.\n", "while int(input('Hány pontot értél el? ')) < 12:\n", " print('Sajnos nem sikerült. Tanulj még!')\n", "print('Gratulálok, átmentél!')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# Példa végtelen ciklusra.\n", "#while True:\n", "# pass # üres utasítás" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### [for utasítás](https://docs.python.org/3/reference/compound_stmts.html#the-for-statement)\n", "\n", "- Szintaxis:\n", "```\n", " for ELEM in SZEKVENCIA:\n", " UTASÍTÁS\n", "```\n", "\n", "- Működés:\n", "```\n", " +----------+ van még elem\n", " +<-----| UTASÍTÁS |<----------------+ \n", " | +----------+ |\n", " | |\n", " | +---------------------+ |\n", " ------+----->| vegyük a SZEKVENCIA |------+------------------->\n", " | következő ELEMÉt | nincs több elem\n", " +---------------------+\n", "```\n", "- Megjegyzések:\n", " + A szekvencia lehet egész számok folytonos sorozata, de lehet más is (pl. sztring, tuple, lista, halmaz, szótár, megnyitott fájl).\n", " + Akkor érdemes for ciklust alkalmazni, ha A) a szekvencia már rendelkezésre áll vagy B) a ciklus kezdetekor tudjuk az iterációk számát." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "range(0, 5)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Értéktartomány (range) létrehozása.\n", "r = range(5)\n", "r" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 1, 2, 3, 4]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(r)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(range(10, 20))" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[3, 5, 7, 9, 11]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(range(3, 12, 2))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "n: 5\n", "1\n", "4\n", "9\n", "16\n", "25\n" ] } ], "source": [ "# Példa: Első n négyzetszám kiírása.\n", "n = int(input('n: '))\n", "for i in range(1, n + 1):\n", " print(i**2)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "n: 5\n", "*****" ] } ], "source": [ "# Példa: n darab * karakter kiírása.\n", "n = int(input('n: '))\n", "for i in range(n):\n", " print('*', end='')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.3" } }, "nbformat": 4, "nbformat_minor": 2 }