{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Változók\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

\n", " Egy változó egy olyan név, \n", " amelyhez valamilyen érték rendelhető.\n", "

\n", "\n", "

\n", " A név és az érték közé az \n", " = \n", " értékadó műveleti jelet kell kitenni.\n", "

\n", "\n", "

\n", " A programozás során a változóra a \n", " neve alapján lehet hivatkozni.\n", "

\n", "\n", "

\n", " Képzelj el egy dobozt: ráírsz egy \n", " nevet (címkét), és \n", " beleteszel valamit. A programban a név a címke, \n", " az érték a tartalom.\n", "

\n", "
\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "nev = \"Benedek\"\n", "eletkor = 21\n", "magassag = 1.96\n", "hazas = False" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Névhasználati szabályok:

\n", " \n", "\n", "

Formázás, stílus, olvashatóság:

\n", " \n", "
\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kulcsszavak: False None True and as assert async await break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield\n" ] } ], "source": [ "import keyword\n", "\n", "print(\"Kulcsszavak: \", *keyword.kwlist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Adattípusok" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "

A Python különböző adattípusokat támogat.

\n", "\n", "

Alaptípusok:

\n", " \n", "\n", "

Konténerek:

\n", " \n", "
\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Szöveges változó létrehozása\n", "nev = \"Benedek\"\n", "\n", "# Egész szám változó létrehozása\n", "eletkor = 21\n", "\n", "# Lebegőpontos szám változó létrehozása\n", "magassag = 1.96\n", "\n", "# Logikai változók létrehozása\n", "hazas = True # False\n", "\n", "# Lista létrehozása\n", "hobbik = [\"pénzkeresés\", \"kondizás\", \"programozás\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Kiíratás" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "

\n", " A \n", " print() \n", " függvény használható a változók, \n", " értékek vagy \n", " kifejezések \n", " kiíratására a konzolra.\n", "

\n", "\n", "

\n", " ⚠️ A változónak már ismertnek kell lennie a kiíratás előtt.\n", "

\n", "\n", "

Két alap opcionális paramétere:

\n", " \n", "
\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Gábor\n", "9\n", "Gábor 25\n", "Név: Gábor\n", "Életkor: 25\n", "Magasság: 1.75\n", "Házas: True\n", "Hobbik: ['programozás', 'zenehallgatás', 'sport']\n", "Nevem: Gábor, Életkorom: 25\n", "Nevem: Gábor, Életkorom: 25\n", "Nevem:|Gábor|Életkorom:|25év\n" ] } ], "source": [ "# Egyszerű változó értékének a kiíratása\n", "print(nev)\n", "\n", "# Kifejezés kiíratása\n", "print(2 + 2 * 5 - 3)\n", "\n", "# Több változó kiíratása\n", "print(nev, eletkor)\n", "\n", "# Érték és szöveg kiíratása együtt\n", "print(\"Név:\", nev)\n", "print(\"Életkor:\", eletkor)\n", "print(\"Magasság:\", magassag)\n", "print(\"Házas:\", hazas)\n", "print(\"Hobbik:\", hobbik)\n", "\n", "# Szöveg kiíratása behelyettesítéssel\n", "print(\"Nevem: {0}, Életkorom: {1}\".format(nev, eletkor))\n", "\n", "# f-string használata (Python 3.6 vagy újabb verziókban)\n", "print(f\"Nevem: {nev}, Életkorom: {eletkor}\")\n", "\n", "# opcionális paraméterek az elválasztásra és a sorvégre\n", "print(\"Nevem:\", nev, \"Életkorom:\", eletkor, sep=\"|\", end=\"év\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. Dinamikusan változó típusok" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "

Pythonban a változók dinamikus típusúak:

\n", "\n", " \n", "\n", "

\n", " Ez egyszerűsíti a kódot és növeli a \n", " rugalmasságot, de fontos \n", " figyelmet fordítani a típusokra, hogy ne vezessenek hibákhoz.\n", "

\n", "\n", "

\n", " A változó aktuális típusát a \n", " type() \n", " függvény segítségével lehet lekérdezni.\n", "

\n", "
\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] } ], "source": [ "# Változó típusának ellenőrzése\n", "print(type(nev))\n", "print(type(eletkor))\n", "print(type(magassag))\n", "print(type(hazas))\n", "print(type(hobbik))\n", "\n", "# Dinamikus típusváltás\n", "magassag = 175 # Mostantól int típusú változó lesz\n", "print(type(magassag))\n", "\n", "magassag = \"alacsony\" # Mostantól str típusú változó lesz\n", "print(type(magassag))\n", "\n", "magassag = eletkor # Mostantól int típusú változó lesz, mert az eletkor is int\n", "print(type(magassag))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 5. Típuskonverzió" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "
    \n", "
  • \n", " A programozás során gyakran szükséges lehet az \n", " adatok típusának megváltoztatása, \n", " hogy azokat a kívánt módon lehessen használni, vagy más típusú adatokkal tudjon együtt dolgozni.\n", "
  • \n", "
    \n", "
  • \n", " Az egész számra való átalakítása az \n", " int(), \n", " a lebegőpontos számra való átalakítása a \n", " float(), \n", " a szövegre való átalakítása a \n", " str() \n", " függvény segítségével hajtható végre.\n", "
  • \n", "
    \n", "
  • \n", " ⚠️ Figyelem: az átalakítás során \n", " nem változik meg az átadott változó típusa, \n", " hanem új értéket hoz létre.\n", "
  • \n", "
\n", "
\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Szöveg (string) → Egész szám (integer)\n", "szoveg = \"123\"\n", "egesz_szam = int(szoveg) # eredmény: 123\n", "\n", "# Szöveg (string) → Lebegőpontos szám (float)\n", "szoveg = \"3.14\"\n", "lebego_pontos = float(szoveg) # eredmény: 3.14\n", "\n", "# Egész szám (integer) → Lebegőpontos szám (float)\n", "egesz_szam = 42\n", "lebego_pontos = float(egesz_szam) # eredmény: 42.0\n", "\n", "# Lebegőpontos szám (float) → Egész szám (integer)\n", "lebego_pontos = 7.9\n", "egesz_szam = int(lebego_pontos) # eredmény: 7\n", "\n", "# Egész szám (integer) → Szöveg (string)\n", "egesz_szam = 123\n", "szoveg = str(egesz_szam) # eredmény: \"123\"\n", "\n", "# Lebegőpontos szám (float) → Szöveg (string)\n", "lebego_pontos = 3.14\n", "szoveg = str(lebego_pontos) # eredmény: \"3.14\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "

\n", " A logikai típusra való átalakításnál a \n", " bool() \n", " függvényt használjuk. \n", " Figyelni kell arra, hogy a \n", " 0 \n", " egész szám és a \n", " 0.0 \n", " lebegőpontos szám logikai értéke \n", " False lesz, \n", " minden más szám esetén \n", " True-t kapunk.\n", "

\n", "\n", "

\n", " Szöveg konvertálása esetén: az üres \n", " \"\" \n", " szöveg False-t jelent, \n", " míg nem üres szöveget átalakítva \n", " True-t kapunk \n", " (még akkor is, ha a szöveg tartalma pl. \"False\").\n", "

\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TípusHamisIgaz
logikaiFalseTrue
egész0nem 0 (pl. 5, -3)
lebegőpontos0.0nem 0.0 (pl. 3.1, -5.4)
szöveg\"\"nem üres (pl. \"Helló\")
\n", "
\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Egész szám (integer) → Logikai (bool)\n", "nulla = 0\n", "nem_nulla = 42\n", "\n", "nulla_bool = bool(nulla) # eredmény: False\n", "nem_nulla_bool = bool(nem_nulla) # eredmény: True\n", "\n", "\n", "# Szöveg (string) → Logikai (bool)\n", "ures_sztring = \"\"\n", "nem_ures_sztring = \"Nem üres\"\n", "\n", "ures_bool = bool(ures_sztring) # eredmény: False\n", "nem_ures_bool = bool(nem_ures_sztring) # eredmény: True\n", "\n", "\n", "# Logikai (bool) → Szöveg (string)\n", "igaz_bool = True\n", "hamis_bool = False\n", "\n", "igaz_sztring = str(igaz_bool) # eredmény: \"True\"\n", "hamis_sztring = str(hamis_bool) # eredmény: \"False\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 6. Műveletek" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Értékadás" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "

\n", " A leggyakrabban alkalmazott művelet az \n", " értékadás, amely az \n", " = \n", " értékadó operátorral történik.\n", "

\n", "\n", "

\n", " Ha több változónak szeretnénk értéket adni, akkor nem szükséges azokat külön sorban megadni, \n", " egy sorban is elvégezhetjük. \n", "
\n", " ⚠️ Fontos: a bal oldalon és a \n", " jobb oldalon azonos számú elemet kell megadni.\n", "

\n", "
\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "x, y, z = 10, 3.5, 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "

\n", " Ezzel a megadással könnyedén felcserélhető két \n", " érték.\n", "

\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "a = 10\n", "b = 20\n", "\n", "# Csere hagyományos módszerrel\n", "tmp = a\n", "a = b\n", "b = tmp\n", "\n", "# Csere python-ban\n", "a, b = b, a" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ha több változó is ugyanazt az értéket veszi fel, akkor alkalmazhatjuk a következő megadást:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "x = y = z = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Matematikai műveletek" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Összeadás: 8\n", "Kivonás: 6\n", "Szorzás: 24\n", "Osztás: 3.3333333333333335\n", "Egész osztás: 3\n", "Maradék (modulus): 1\n", "Hatványozás: 16\n", "Abszolút érték: 7\n", "Kerekítés: 3.14\n" ] } ], "source": [ "# Összeadás\n", "osszeg = 5 + 3\n", "print(\"Összeadás:\", osszeg)\n", "\n", "# Kivonás\n", "kulonbseg = 8 - 2\n", "print(\"Kivonás:\", kulonbseg)\n", "\n", "# Szorzás\n", "szorzat = 4 * 6\n", "print(\"Szorzás:\", szorzat)\n", "\n", "# Osztás (eredmény mindig lebegőpontos szám lesz)\n", "hanyados = 10 / 3\n", "print(\"Osztás:\", hanyados)\n", "\n", "# Egész osztás\n", "egesz_osztas = 10 // 3\n", "print(\"Egész osztás:\", egesz_osztas)\n", "\n", "# Maradék (modulus)\n", "maradek = 10 % 3\n", "print(\"Maradék (modulus):\", maradek)\n", "\n", "# Hatványozás\n", "hatvany = 2**4\n", "print(\"Hatványozás:\", hatvany)\n", "\n", "# Abszolút érték\n", "abszolut_ertek = abs(-7)\n", "print(\"Abszolút érték:\", abszolut_ertek)\n", "\n", "# Kerekítés\n", "kerekitett = round(3.14159, 2)\n", "print(\"Kerekítés:\", kerekitett)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "

Összevont műveletek

\n", "\n", "

\n", " A matematikai műveletek esetén \n", " (+,\n", " -,\n", " *,\n", " /,\n", " //,\n", " %,\n", " **) \n", " ha úgy adunk értéket a változónak,
hogy annak aktuális értékét fel kell használni \n", " (pl.: a = a + 2), \n", " akkor az értékadás és a \n", " művelet összevonható.\n", "

\n", "\n", "

Az összevont alak így használjuk:

\n", "\n", "
\n",
    "a = a + 2    →    a += 2\n",
    "a = a - 5    →    a -= 5\n",
    "a = a * 3    →    a *= 3\n",
    "a = a / 4    →    a /= 4\n",
    "a = a % 2    →    a %= 2\n",
    "a = a ** 2   →    a **= 2\n",
    "  
\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 7. Matematikai modul" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "

\n", " Pythonban több beépített matematikai függvény is található a \n", " math \n", " modulban. \n", " Ehhez először importálnod kell a \n", " math \n", " modult.\n", "

\n", "
\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Gyökvonás: 4.0\n", "Hatványozás: 8.0\n", "Logaritmus (alap 10): 2.0\n", "Logaritmus (természetes alapú): 3.2188758248682006\n", "Exponenciális függvény: 24.999999999999996\n", "Pi értéke: 3.141592653589793\n", "Szinusz: 0.49999999999999994\n", "Koszinusz: 0.5000000000000001\n", "Tangens: 0.9999999999999999\n", "Abszolút érték: 7.5\n", "Kerekítés felfelé: 5\n", "Kerekítés lefelé: 4\n" ] } ], "source": [ "# math modul importálása\n", "import math\n", "\n", "# Gyökvonás\n", "gyok = math.sqrt(16)\n", "print(\"Gyökvonás:\", gyok)\n", "\n", "# Hatványozás\n", "hatvany = math.pow(2, 3)\n", "print(\"Hatványozás:\", hatvany)\n", "\n", "# Logaritmus (alap 10)\n", "log10 = math.log10(100)\n", "print(\"Logaritmus (alap 10):\", log10)\n", "\n", "# Logaritmus (természetes alapú)\n", "ln = math.log(25)\n", "print(\"Logaritmus (természetes alapú):\", ln)\n", "\n", "# Exponenciális függvény\n", "exp = math.exp(ln)\n", "print(\"Exponenciális függvény:\", exp) # kerekítési hiba van\n", "\n", "# Pi értéke\n", "pi = math.pi\n", "print(\"Pi értéke:\", pi)\n", "\n", "# Trigonometrikus függvények (radiánban)\n", "sinus = math.sin(30 * (pi / 180)) # 30 fok\n", "cosinus = math.cos(math.radians(60))\n", "tangens = math.tan(math.radians(45))\n", "\n", "print(\"Szinusz:\", sinus)\n", "print(\"Koszinusz:\", cosinus)\n", "print(\"Tangens:\", tangens)\n", "\n", "# Abszolút érték\n", "abszolut_ertek = math.fabs(-7.5)\n", "print(\"Abszolút érték:\", abszolut_ertek)\n", "\n", "# Kerekítés felfelé\n", "felfele_kerekitett = math.ceil(4.3)\n", "print(\"Kerekítés felfelé:\", felfele_kerekitett)\n", "\n", "# Kerekítés lefelé\n", "lefele_kerekitett = math.floor(4.9)\n", "print(\"Kerekítés lefelé:\", lefele_kerekitett)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

\n", " Létezik komplex számok kezelésére alkalmas \n", " cmath modul is. \n", " A képzetes rész jele a \n", " j. \n", " ⚠️ A tényező és a j karakter közé \n", " nem kerülhet semmi.\n", "

\n", "
\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(-4+3j)\n", "\n" ] } ], "source": [ "# Példa komplex számokra\n", "import cmath\n", "\n", "x = 3 + 4j\n", "y = cmath.sqrt(-1) # 1j\n", "\n", "print(x * y)\n", "print(type(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 8. Precedencia szabályok" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "
    \n", "
  • \n", " A műveleteknek van egy \n", " végrehajtási sorrendje (precedenciája), \n", " amelyet be kell tartaniuk a műveletek megfelelő elvégzése érdekében.\n", "
  • \n", "
  • \n", " A kifejezések értelmezése során a Python a következő sorrendet alkalmazza:\n", "
  • \n", "
\n", "\n", "

1. szint

\n", "
    \n", "
  1. \n", " Zárójelek: Legmagasabb precedencia a zárójeleknek van. \n", " Ha zárójelek vannak, akkor a kifejezésük lesz először kiértékelve.\n", "
  2. \n", "
\n", "\n", "

2. szint – Matematika

\n", "
    \n", "
  1. Hatványozás: Az ** operátor precedenciája a legmagasabb a matematikai műveletek között.
  2. \n", "
  3. Előjelek és bitenkénti invertálás: -, +, illetve bitenkénti ~.
  4. \n", "
  5. Szorzás, Osztás, Maradék: *, /, % – balról jobbra történik a kiértékelés.
  6. \n", "
  7. Összeadás, Kivonás: +, - – szintén balról jobbra történik a kiértékelés.
  8. \n", "
\n", "\n", "

3. szint – Bitműveletek

\n", "
    \n", "
  1. Biteltoló műveletek: egész szám bitjeinek eltolása.
  2. \n", "
  3. Bitenkénti ÉS: &
  4. \n", "
  5. Bitenkénti kizáróvagy (XOR): ^
  6. \n", "
  7. Bitenkénti VAGY: |
  8. \n", "
\n", "\n", "

4. szint – Logikai operátorok

\n", "
    \n", "
  1. Összehasonlító operátorok: <, >, <=, >=, ==, !=
  2. \n", "
  3. Logikai NEM: not
  4. \n", "
  5. Logikai ÉS: and
  6. \n", "
  7. Logikai VAGY: or
  8. \n", "
\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Műveleti jelekFunkciók
()Zárójel
**Hatványozás
+x   -x   ~xPlusz és mínusz előjelek, bitenkénti invertálás
*   /   //   %Szorzás, Osztás, Egész osztás, Maradék
+   -Összeadás és kivonás
<<   >>Bit eltolása balra, jobbra
&Bitenkénti ÉS
^Bitenkénti kizáróvagy XOR
|Bitenkénti VAGY
\n", " ==   !=   >   >=   <   <=
\n", " is   not is
\n", " in   not in\n", "
Összehasonlító,
Objektumazonosság ellenőrző,
Tagságot vizsgáló műveletek
notLogikai tagadás (NEM)
andLogikai ÉS
orLogikai VAGY
\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

\n", " Ha bizonytalanok vagyunk a \n", " kiértékelés sorrendjében, akkor használjunk \n", " zárójeleket, mert az abban található \n", " kifejezések értékelődnek ki először.\n", "

\n", "
\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "512\n", "64\n", "17\n", "21\n" ] } ], "source": [ "# 2 ^ 3 ^ 2\n", "print(2**3**2) # 2^9 = 512\n", "print((2**3) ** 2) # 8^2 = 64\n", "\n", "print(2 + 5 * 3) # 2 + 15 = 17\n", "print((2 + 5) * 3) # 7 * 3 = 21" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 9. Bemenet fogadása" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

\n", " Az input() \n", " függvény használható a felhasználói bemenet fogadására \n", " Pythonban.\n", "

\n", "
\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Üdv, Ákoska!\n" ] } ], "source": [ "# Felhasználói bemenet kérése\n", "nev = input(\"Kérem, adja meg a nevét: \")\n", "\n", "# Az input() mindig szövegként értelmezi a beírt értéket\n", "print(\"Üdv, \" + nev + \"!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

\n", " Fontos megjegyezni, hogy az \n", " input() \n", " függvény által visszaadott érték mindig egy \n", " szöveg lesz.\n", "

\n", "

\n", " Ha számokkal szeretnél dolgozni, \n", " akkor át kell alakítanod őket megfelelő típusra \n", " (pl. int() \n", " vagy float() \n", " használatával).\n", "

\n", "
\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Születési év: 23\n" ] } ], "source": [ "# Szám bekérése és használata\n", "eletkor = input(\"Kérem, adja meg az életkorát: \")\n", "eletkor = int(eletkor) # Az input() által kapott szöveget integer típussá alakítjuk\n", "\n", "# Most már integer típussal dolgozhatunk\n", "szuletesi_ev = 2024 - eletkor\n", "print(\"Születési év:\", szuletesi_ev)" ] } ], "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.13.6" } }, "nbformat": 4, "nbformat_minor": 2 }