{ "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 }