Files
PythonProgramozas_GKNB_MSTM…/KiadottMegoldasok/vizsga_03_minta_mego.ipynb
2024-09-21 11:23:22 +02:00

267 lines
9.4 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Vizsgaminta 3."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. feladat [4p]\n",
"Készítsünk programot, amely pozitív egész számok egy nemüres listájára meghatározza és kiírja a lista azon elemét, amelyikben a számjegyek összege a legnagyobb! Ha több ilyen szám is lenne, akkor az elsőnek megtalált legyen az eredmény! Teszteljük a programot a `[245, 1132, 98, 465, 14231, 7854, 2542]` listával! "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Az eredmény szám: 7854, számjegyeinek összeg: 24\n"
]
}
],
"source": [
"l = [245, 1132, 98, 465, 14231, 7854, 2542]\n",
"maxossz, er = 0, 0\n",
"for i in l:\n",
" s, ossz = str(i), 0\n",
" for j in s:\n",
" ossz += int(j)\n",
" if ossz > maxossz:\n",
" maxossz, er = ossz, i\n",
"print(f'Az eredmény szám: {er}, számjegyeinek összeg: {maxossz}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. feladat [6p]\n",
"Az `edges` lista kitalált személyekből képezett párokat tartalmaz. Egy pár azt jelenti, hogy az adott személyek ismeri egymást. Készítsünk függvényt, amely egy adott, ilyen felépítésű listára meghatározza azt a 2 személyt, akiknek a legtöbb közös ismerősük van! Ha több ilyen személypár is lenne, akkor az egyik ilyen pár legyen az eredmény! Hívjuk meg a függvényt az `edges` listára és írjuk ki a kapott eredményeket!"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A két legtöbb közös ismerőssel rendelkező személyek: Adél, Mihály\n"
]
}
],
"source": [
"edges = [\n",
" (\"Adél\", \"Dezső\"), (\"Géza\", \"Mihály\"), (\"Károly\", \"Adél\"), (\"Antal\", \"Mihály\"), (\"Károly\", \"Sára\"),\n",
" (\"Mihály\", \"Vilma\"), (\"Dezső\", \"Vilma\"), (\"Vilma\", \"Antal\"), (\"Károly\", \"Mihály\"), (\"Elvira\", \"Adél\"),\n",
" (\"Izabella\", \"Adél\"), (\"Mihály\", \"Izabella\"), (\"Géza\", \"Vilma\"), (\"Károly\", \"Elvira\"), (\"Elvira\", \"Mihály\"),\n",
" (\"Géza\", \"Dezső\"), (\"Sára\", \"Adél\"), (\"Géza\", \"Adél\"), (\"Géza\", \"Izabella\"), (\"Izabella\", \"Dezső\") \n",
"]\n",
"\n",
"def f(edges):\n",
" # Felépítünk egy olyan szótárt, ahol a nevek a kulcsok és mindenkihez egy \n",
" # halmaz tartozik hozzá 'értékként', amely az ő ismerőseit tartalmazza\n",
" d = {}\n",
" for p in edges:\n",
" if p[0] in d:\n",
" d[p[0]] = d[p[0]] | {p[1]}\n",
" else:\n",
" d[p[0]] = {p[1]}\n",
" if p[1] in d:\n",
" d[p[1]] = d[p[1]] | {p[0]}\n",
" else:\n",
" d[p[1]] = {p[0]}\n",
" # A két legtöbb közös ismerőssel rendelkező személy megkeresése\n",
" maxdb = 0\n",
" for i in d:\n",
" for j in d:\n",
" if i != j:\n",
" # A két személy közös ismerőseinek száma\n",
" db = len(d[i] & d[j])\n",
" if db > maxdb:\n",
" maxdb = db\n",
" er = (i, j)\n",
" return er\n",
"\n",
"# A függvény tesztje\n",
"er = f(edges)\n",
"print(f'A két legtöbb közös ismerőssel rendelkező személyek: {er[0]}, {er[1]}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. feladat [10p]\n",
"\n",
"Az [unicef.txt](unicef.txt) szövegfájl a világ 5 év alatti népességének élelmezési helyzetéről tartalmaz adatokat. Az egyes sorok felméréseknek felelnek meg, a felmérések országonként időbeli sorrendben vannak felsorolva. Töltsük be az adatokat, határozzuk meg és írjuk ki az alábbi statisztikákat!\n",
"- Hány felmérés készült és hány országot érintett?\n",
"- Az alábbi statisztikákat csak azon felmérések alapján készítsük el, amelyeknél mind a három érintett indikátor (`Severe Wasting`, `Underweight`, `Overweight`) definiált (azaz ezek pozitív adatok). Ha egy országra több ilyen felmérés is van, akkor a legutóbbit vegyük figyelembe!\n",
" - Mely 5 országban a legmagasabb a `Severe Wasting` indikátor?\n",
" - Az országok hányadrészében magasabb az `Underweight` indikátor az `Overweight` indikátornál?"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A felmérések száma: 854\n",
"Az érintett országok száma: 152\n",
"\n",
"Az 5 ország, ahol a legmagasabb a 'Severe Wasting' indikátor:\n",
"1. SOUTH SUDAN 11.9\n",
"2. DJIBOUTI 9.2\n",
"3. INDIA 7.7\n",
"4. INDONESIA 6.7\n",
"5. PAPUA NEW GUINEA 6.4\n",
"\n",
"Az 'Underweight' > 'Overweight' százalékos arány: 53.62318840579711\n"
]
}
],
"source": [
"# Megoldás 1. (hagyományos eszközökkel)\n",
"\n",
"# Segédfüggvény ami egy sztringben megadott tizedesvesszős számot valós számmá alakít\n",
"# Az üres sztringre 0-t adunk eredményként\n",
"def atalakit(s):\n",
" if s == '': \n",
" st = '0.0'\n",
" else:\n",
" st = ''\n",
" for c in s:\n",
" if c == ',': st = st + '.'\n",
" else: st = st + c\n",
" return float(st)\n",
"\n",
"# Adatbeolvasás\n",
"f = open('unicef.txt')\n",
"# A fejlécsor beolvasása\n",
"fej = f.readline().strip().split('|')\n",
"# A többi sor beolvasása\n",
"lines = f.readlines()\n",
"f.close()\n",
"\n",
"# Az adatsorok átalakítása és tárolása \n",
"# o: az országok nevei (halmazként)\n",
"# d: a megfelelő felmérések (szótárként, kulcs az ország neve, adat a 3 indikátor egy szótárban) \n",
"o = set()\n",
"d = {}\n",
"for l in lines:\n",
" t = l.strip().split('|')\n",
" adat = {\n",
" fej[6]: atalakit(t[6]), # Severe Wasting \n",
" fej[9]: atalakit(t[9]), # Underweight\n",
" fej[10]: atalakit(t[10]) # Overweight\n",
" }\n",
" o.add(t[0])\n",
" if adat['Severe Wasting'] > 0 and adat['Underweight'] > 0 and adat['Overweight'] > 0:\n",
" d[t[0]] = adat\n",
"\n",
"# 1. feladat\n",
"print('A felmérések száma:', len(lines))\n",
"print('Az érintett országok száma:', len(o))\n",
"print()\n",
"\n",
"# 2. feladat\n",
"l = [(o, d[o]['Severe Wasting']) for o in d]\n",
"l.sort(key = lambda p: p[1], reverse = True)\n",
"print(\"Az 5 ország, ahol a legmagasabb a 'Severe Wasting' indikátor:\")\n",
"for i in range(5):\n",
" print(f'{i + 1}. {l[i][0]:20} {l[i][1]:5}')\n",
"print()\n",
"\n",
"# 3. feladat\n",
"er = sum([d[o]['Underweight'] > d[o]['Overweight'] for o in d]) / len(d) * 100\n",
"print(f\"Az 'Underweight' > 'Overweight' százalékos arány: {er}\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A felmérések száma: 854\n",
"Az érintett országok száma: 152\n",
"\n",
"Az 5 ország, ahol a legmagasabb a 'Severe Wasting' indikátor:\n",
"Country\n",
"SOUTH SUDAN 11.9\n",
"DJIBOUTI 9.2\n",
"INDIA 7.7\n",
"INDONESIA 6.7\n",
"PAPUA NEW GUINEA 6.4\n",
"Name: Severe Wasting, dtype: float64\n",
"\n",
"Az 'Underweight' > 'Overweight' százalékos arány: 53.62318840579711\n"
]
}
],
"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('unicef.txt', sep='|', decimal=',')\n",
"print('A felmérések száma:', len(df))\n",
"print('Az érintett országok száma:', len(df.groupby('Country')))\n",
"print()\n",
"\n",
"# 2. feladat\n",
"# A megfelelő adatok kiszűrése\n",
"df1 = df[(df['Severe Wasting'] > 0) & (df['Underweight'] > 0) & (df['Overweight'] > 0)]\n",
"df2 = df1.groupby('Country').last()\n",
"\n",
"print(\"Az 5 ország, ahol a legmagasabb a 'Severe Wasting' indikátor:\")\n",
"print(df2['Severe Wasting'].sort_values(ascending=False)[:5])\n",
"print()\n",
"\n",
"# 3. feladat\n",
"er = sum(df2['Underweight'] > df2['Overweight']) / len(df2) * 100\n",
"print(f\"Az 'Underweight' > 'Overweight' százalékos arány: {er}\")"
]
}
],
"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
}