Files
PythonProgramozas_GKNB_MSTM…/KiadottMegoldasok/vizsga_01_minta_mego.ipynb
2024-09-21 14:23:31 +02:00

580 lines
17 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Vizsgaminta 1."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. feladat [6p]\n",
"\n",
"Készítsünk programot, amely bekér a felhasználótól két sztringet, majd kiírja a bennük található leghosszabb közös részsztringet! Példa futási eredmény:\n",
"```\n",
"1. sztring: András\n",
"2. sztring: Bandi\n",
"A leghosszabb közös rész: nd\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A leghosszabb közös rész: nd\n"
]
}
],
"source": [
"# Két sztring leghosszabb közös része\n",
"def kozos_resz(a, b):\n",
" ''' Két sztring leghosszabb közös része'''\n",
" er = ''\n",
" for i in range(len(a)):\n",
" s = a[i:]\n",
" for j in range(len(s)):\n",
" ss = s[:j+1]\n",
" if ss in b:\n",
" if len(ss) > len(er): \n",
" er = ss\n",
" return er\n",
"\n",
"# Teszt\n",
"er = kozos_resz('András', 'Bandi')\n",
"if er == '':\n",
" print('Nincs közös rész!')\n",
"else: \n",
" print('A leghosszabb közös rész:',er)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. feladat [6p]\n",
"\n",
"A `birthdays` lista kitalált személyek nevét és születési dátumát tartalmazza. Készítsünk programot, amely megkeresi, hogy kik állnak életkorban egymáshoz a legközelebb, és hány nap köztük a különbség! A program ne csak a megadott `birthdays` listára működjön, hanem tetszőleges, ugyanilyen formátumú bemenetre is! Feltehetjük, hogy minden név különböző, és legalább két név meg van adva."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"birthdays = [\n",
" ('Kovács Andor', '1999-10-29'),\n",
" ('Kiss Martina', '2000-02-13'),\n",
" ('Horváth Barna', '1999-12-05'),\n",
" ('Győri Eszter', '2000-10-29'),\n",
" ('Nagy Tivadar', '1999-08-16'),\n",
" ('Tóth Tamara', '2000-01-30'),\n",
" ('Szakács Sándor', '1999-09-02')\n",
"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Elvárt futási eredmény:\n",
"```\n",
"Életkorban legközelebb állók: Kiss Martina, Tóth Tamara\n",
"14 nap köztük a különbség\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Életkorban legközelebb állók: Kiss Martina, Tóth Tamara\n",
"14 nap köztük a különbség\n"
]
}
],
"source": [
"from datetime import date\n",
"\n",
"# Ez a függvény a 3.7-es Python már szerepel\n",
"def fromisoformat(s):\n",
" y = int(s[:4])\n",
" m = int(s[5:7])\n",
" d = int(s[8:])\n",
" return date(y, m, d)\n",
"\n",
"min = -1\n",
"for i in birthdays:\n",
" di = fromisoformat(i[1])\n",
" for j in birthdays:\n",
" dj = fromisoformat(j[1])\n",
" if i != j:\n",
" diff = abs(di-dj)\n",
" if min == -1:\n",
" min = diff; eri = i; erj = j \n",
" else:\n",
" if diff < min: \n",
" min = diff\n",
" eri = i\n",
" erj = j\n",
"print(f'Életkorban legközelebb állók: {eri[0]}, {erj[0]}')\n",
"print(f'{min.days} nap köztük a különbség')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. feladat [8p]\n",
"\n",
"Az [investments.txt](investments.txt) szövegfájl amerikai cégekbe történő befektetésekről tartalmaz adatokat (a TechCrunch hírportál alapján). Készítsünk programot, amely kiszámítja és kiírja az alábbi statisztikákat:\n",
"- Hány befektetés történt összesen?\n",
"- Melyik cég(ek)be fektették be a legtöbbször és hányszor?\n",
"- Cégkategóriánként hány dollárt fektettek be összesen?"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A cégekbe összesen 1434 db befektetés történt\n",
"\n",
"A legtöbb (7 db) befektetést kapó cég(ek): ['Facebook']\n",
"\n",
"Cégkategóriánként a befektetett összes pénz:\n",
"1. web 11753474750\n",
"2. software 1017942000\n",
"3. hardware 824500000\n",
"4. mobile 323020000\n",
"5. other 119850000\n",
"6. biotech 77250000\n",
"7. cleantech 258900000\n",
"8. consulting 32135000\n"
]
}
],
"source": [
"# Megoldás 1. (hagyományos eszközökkel)\n",
"f = open('investments.txt')\n",
"# A fejlécsor átugrása\n",
"f.readline()\n",
"# A többi sor beolvasása\n",
"lines = f.readlines()\n",
"f.close()\n",
"\n",
"# Az összes befektetés darabszáma\n",
"print(f'A cégekbe összesen {len(lines)} db befektetés történt\\n') \n",
"\n",
"# A cég, akibe a legtöbbször fektettek be\n",
"d = {}\n",
"for l in lines:\n",
" t = l.strip().split('|')\n",
" if t[0] in d:\n",
" d[t[0]] += 1\n",
" else:\n",
" d[t[0]] = 1\n",
"# Az egy cégbe történt legtöbb befektetés \n",
"maxdb = max(d.values())\n",
"# Azok a cégek, akiknél a maximális befektetés történt\n",
"l = [c for c in d if d[c] == maxdb]\n",
"print(f'A legtöbb ({maxdb} db) befektetést kapó cég(ek): {l}\\n') \n",
"\n",
"# Cégkategóriánként a befektetett összes pénz\n",
"d = {}\n",
"for l in lines:\n",
" t = l.strip().split('|')\n",
" if t[2] in d:\n",
" d[t[2]] += int(t[6])\n",
" else:\n",
" d[t[2]] = int(t[6])\n",
"# Listává alakítjuk a szótár adatait (a könnyebb listázás végett)\n",
"l = list(d.items())\n",
"print('Cégkategóriánként a befektetett összes pénz:')\n",
"# A sorokat ellátjuk sorszámmal és az oszlopokat igazítjuk\n",
"for i, (x, y) in enumerate(l):\n",
" print(f'{i + 1}. {x:15} {y:15}')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>company</th>\n",
" <th>numEmps</th>\n",
" <th>category</th>\n",
" <th>city</th>\n",
" <th>state</th>\n",
" <th>fundedDate</th>\n",
" <th>raisedAmt</th>\n",
" <th>raisedCurrency</th>\n",
" <th>round</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>LifeLock</td>\n",
" <td>NaN</td>\n",
" <td>web</td>\n",
" <td>Tempe</td>\n",
" <td>AZ</td>\n",
" <td>1-May-07</td>\n",
" <td>6850000</td>\n",
" <td>USD</td>\n",
" <td>b</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>LifeLock</td>\n",
" <td>NaN</td>\n",
" <td>web</td>\n",
" <td>Tempe</td>\n",
" <td>AZ</td>\n",
" <td>1-Oct-06</td>\n",
" <td>6000000</td>\n",
" <td>USD</td>\n",
" <td>a</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>LifeLock</td>\n",
" <td>NaN</td>\n",
" <td>web</td>\n",
" <td>Tempe</td>\n",
" <td>AZ</td>\n",
" <td>1-Jan-08</td>\n",
" <td>25000000</td>\n",
" <td>USD</td>\n",
" <td>c</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>MyCityFaces</td>\n",
" <td>7.0</td>\n",
" <td>web</td>\n",
" <td>Scottsdale</td>\n",
" <td>AZ</td>\n",
" <td>1-Jan-08</td>\n",
" <td>50000</td>\n",
" <td>USD</td>\n",
" <td>seed</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Flypaper</td>\n",
" <td>NaN</td>\n",
" <td>web</td>\n",
" <td>Phoenix</td>\n",
" <td>AZ</td>\n",
" <td>1-Feb-08</td>\n",
" <td>3000000</td>\n",
" <td>USD</td>\n",
" <td>a</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1429</th>\n",
" <td>Trusera</td>\n",
" <td>15.0</td>\n",
" <td>web</td>\n",
" <td>Seattle</td>\n",
" <td>WA</td>\n",
" <td>1-Jun-07</td>\n",
" <td>2000000</td>\n",
" <td>USD</td>\n",
" <td>angel</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1430</th>\n",
" <td>Alerts.com</td>\n",
" <td>NaN</td>\n",
" <td>web</td>\n",
" <td>Bellevue</td>\n",
" <td>WA</td>\n",
" <td>8-Jul-08</td>\n",
" <td>1200000</td>\n",
" <td>USD</td>\n",
" <td>a</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1431</th>\n",
" <td>Myrio</td>\n",
" <td>75.0</td>\n",
" <td>software</td>\n",
" <td>Bothell</td>\n",
" <td>WA</td>\n",
" <td>1-Jan-01</td>\n",
" <td>20500000</td>\n",
" <td>USD</td>\n",
" <td>unattributed</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1432</th>\n",
" <td>Grid Networks</td>\n",
" <td>NaN</td>\n",
" <td>web</td>\n",
" <td>Seattle</td>\n",
" <td>WA</td>\n",
" <td>30-Oct-07</td>\n",
" <td>9500000</td>\n",
" <td>USD</td>\n",
" <td>a</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1433</th>\n",
" <td>Grid Networks</td>\n",
" <td>NaN</td>\n",
" <td>web</td>\n",
" <td>Seattle</td>\n",
" <td>WA</td>\n",
" <td>20-May-08</td>\n",
" <td>10500000</td>\n",
" <td>USD</td>\n",
" <td>b</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1434 rows × 9 columns</p>\n",
"</div>"
],
"text/plain": [
" company numEmps category city state fundedDate \\\n",
"0 LifeLock NaN web Tempe AZ 1-May-07 \n",
"1 LifeLock NaN web Tempe AZ 1-Oct-06 \n",
"2 LifeLock NaN web Tempe AZ 1-Jan-08 \n",
"3 MyCityFaces 7.0 web Scottsdale AZ 1-Jan-08 \n",
"4 Flypaper NaN web Phoenix AZ 1-Feb-08 \n",
"... ... ... ... ... ... ... \n",
"1429 Trusera 15.0 web Seattle WA 1-Jun-07 \n",
"1430 Alerts.com NaN web Bellevue WA 8-Jul-08 \n",
"1431 Myrio 75.0 software Bothell WA 1-Jan-01 \n",
"1432 Grid Networks NaN web Seattle WA 30-Oct-07 \n",
"1433 Grid Networks NaN web Seattle WA 20-May-08 \n",
"\n",
" raisedAmt raisedCurrency round \n",
"0 6850000 USD b \n",
"1 6000000 USD a \n",
"2 25000000 USD c \n",
"3 50000 USD seed \n",
"4 3000000 USD a \n",
"... ... ... ... \n",
"1429 2000000 USD angel \n",
"1430 1200000 USD a \n",
"1431 20500000 USD unattributed \n",
"1432 9500000 USD a \n",
"1433 10500000 USD b \n",
"\n",
"[1434 rows x 9 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Megoldás 2. (pandas segítségével)\n",
"import pandas as pd\n",
"\n",
"# Beolvasás DataFrame-be\n",
"df = pd.read_csv('investments.txt', sep='|')\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A cégekbe összesen 1434 db befektetés történt.\n"
]
}
],
"source": [
"# Az összes befektetés darabszáma\n",
"print(f'A cégekbe összesen {len(df)} db befektetés történt.') "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A cég, amelyikbe a legtöbb (7) befektetés történt: Facebook\n",
"\n",
"A cégek, amelyekbe a legtöbb (7) befektetés történt:\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>company</th>\n",
" <th>0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>212</th>\n",
" <td>Facebook</td>\n",
" <td>7</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" company 0\n",
"212 Facebook 7"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Melyik cégbe történt a legtöbb befektetés és mennyi?\n",
"\n",
"# Ha csak egy ilyen van\n",
"db = df.groupby('company').size()\n",
"print(f'A cég, amelyikbe a legtöbb ({db.max()}) befektetés történt: {db.idxmax()}')\n",
"print()\n",
"\n",
"# Ha több ilyen is lehet\n",
"db_max = db.max()\n",
"df1 = db.reset_index()\n",
"print(f'A cégek, amelyekbe a legtöbb ({db_max}) befektetés történt:')\n",
"df1[df1[0] == db_max]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cégkategóriánként a befektetett összes pénz:\n",
"category\n",
"biotech 77250000\n",
"cleantech 258900000\n",
"consulting 32135000\n",
"hardware 824500000\n",
"mobile 323020000\n",
"other 119850000\n",
"software 1017942000\n",
"web 11753474750\n",
"Name: raisedAmt, dtype: int64\n"
]
}
],
"source": [
"# Cégkategóriánként a befektetett összes pénz\n",
"print('Cégkategóriánként a befektetett összes pénz:')\n",
"print(df.groupby('category')['raisedAmt'].sum())"
]
}
],
"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.12.6"
}
},
"nbformat": 4,
"nbformat_minor": 1
}