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

559 lines
19 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 2."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. feladat [4p]\n",
"\n",
"A `planets` lista a Naprendszer bolygóinak tömegét és (átlagos) sugarát tartalmazza. Készítsünk programot, amely kiszámítja, hogy a bolygók felszínén érvényes nehézségi gyorsulás hányszorosa a földinek! A nehézségi gyorsulás képlete\n",
"$$g = G \\frac{M}{R^2},$$\n",
"ahol $G = 6,67408 \\cdot 10^{-11} \\frac{Nm^2}{kg^2}$ az univerzális gravitációs állandó, $M$ a bolygó tömege, $R$ pedig a bolygó tömegközéppontjától mért távolság. A program ne csak a `planets` listára működjön, hanem bármely ugyanilyen formátumú, bemenetre is! Elvárt futási eredmény:\n",
"```\n",
"\n",
"Merkúr: 0.38\n",
"Vénusz: 0.90\n",
"Föld: 1.00\n",
"...\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"planets = [\n",
" # bolygó neve, tömeg(10^21kg), sugár(km)\n",
" ('Merkúr', 330.2, 2439.7),\n",
" ('Vénusz', 4868.5, 6051.8),\n",
" ('Föld', 5973.6, 6371.0),\n",
" ('Mars', 641.85, 3389.5),\n",
" ('Jupiter', 1898600, 69911),\n",
" ('Szaturnusz', 568460, 58232),\n",
" ('Uránusz', 86832, 25362),\n",
" ('Neptunusz', 102430, 24622)\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Merkúr: 0.38\n",
"Vénusz: 0.90\n",
"Föld: 1.00\n",
"Mars: 0.38\n",
"Jupiter: 2.64\n",
"Szaturnusz: 1.14\n",
"Uránusz: 0.92\n",
"Neptunusz: 1.15\n"
]
}
],
"source": [
"G = 6.67408 * 10 ** -11\n",
"# A föld g-je\n",
"M = planets[2][1] * 10 ** 21\n",
"R = planets[2][2] * 1000\n",
"fold_g = G * M / R ** 2\n",
"for i in planets:\n",
" # Az adott bolygó g-je\n",
" M = i[1] * 10 ** 21\n",
" R = i[2] * 1000\n",
" g = G * M / R ** 2\n",
" print(f'{i[0]}: {g / fold_g:.2f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. feladat [4p]\n",
"\n",
"Készítsünk programot, amely bekéri a felhasználótól $n$ értékét, szimulál $n$ darab kockadobást, majd kiírja, hogy mi volt a leghosszabb 6-os sorozat hossza! Példa futási eredmény:\n",
"```\n",
"n: 50\n",
"31554643644341364414422455514666664664563666113524\n",
"leghosszabb 6-os sorozat hossza: 5\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"n: 20\n",
"65656556655565566665\n",
"A leghosszabb 6-os sorozat hossza: 4\n"
]
}
],
"source": [
"import random\n",
"n = int(input('n: '))\n",
"# A generált számsorozat egy sztringben (hogy kiírjuk a generált adatokat)\n",
"st = ''\n",
"# A leghosszabb 6-os sorozat hossza\n",
"maxh = 0\n",
"# Az aktuális 6-os sorozat hossza\n",
"db = 0\n",
"# Van-e már 'megkezdett' 6-os sorozat\n",
"van = False\n",
"for i in range(n):\n",
" # Az aktuális dobás véletlen generálása\n",
" # A teszthez csak 5 és 6 között, hogy hosszabb legyen az eredmény (de ez átirandó (1, 6)-ra)\n",
" x = random.randint(5, 6)\n",
" if x == 6:\n",
" if van: \n",
" db += 1\n",
" else:\n",
" # Most kezdődik egy 6-os sorozat\n",
" db = 1\n",
" van = True\n",
" else:\n",
" van = False\n",
" # Hosszabb-e mint az eddigi leghosszabb\n",
" if db > maxh: \n",
" maxh = db\n",
" # A kiíráshoz \n",
" st += str(x)\n",
"print(st) \n",
"print('A leghosszabb 6-os sorozat hossza:', maxh)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. feladat [12p]\n",
"\n",
"A [hotels.txt](hotels.txt) szövegfájl Las Vegas-i szállodák értékeléséről tartalmaz adatokat. Minden sor egy szállóvendég által kiosztott értékeléshez tartozik. Készítsünk programot, amely kiszámítja és kiírja az alábbi statisztikákat:\n",
"- A szobák száma (`Nr. rooms`) alapján melyik az öt legnagyobb szálloda?\n",
"- Melyik szállodá(ka)t értékelték (`Score`) átlagosan a legmagasabbra és mekkora ez az átlagpont?\n",
"- Hány ponttal magasabb a medencével (`Pool`) rendelkező szállodák átlagos értékelése (`Score`) a többi szálloda átlagos értékelésénél?"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Az 5 legnagyobb szálloda:\n",
"1. The Venetian Las Vegas Hotel 4027\n",
"2. Excalibur Hotel & Casino 3981\n",
"3. Bellagio Las Vegas 3933\n",
"4. Circus Circus Hotel & Casino Las Vegas 3773\n",
"5. Caesars Palace 3348\n",
"\n",
"A maximális (átlagos) pontszám: 4.625\n",
"Azok a szállodák, akik a maximális pontot kapták:\n",
"Wynn Las Vegas, 4.625\n",
"\n",
"Medencés átlagpont: 4.17\n",
"Nem medencés átlagpont: 3.21\n",
"Különbség: 0.96\n"
]
}
],
"source": [
"# Megoldás 1. (hagyományos eszközökkel)\n",
"f = open('hotels.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 5 legnagyobb szálloda\n",
"d = {}\n",
"for l in lines:\n",
" t = l.strip().split(';')\n",
" if t[0] not in d:\n",
" d[t[0]] = int(t[1])\n",
"\n",
"# Listává alakítjuk a szótár adatait (a könnyebb listázás végett)\n",
"l = list(d.items())\n",
"# A szobák száma szerint csökkenően rendezzük az adatokat\n",
"l = sorted(l, key=lambda p: p[1], reverse = True)\n",
"print('Az 5 legnagyobb szálloda:')\n",
"# A sorokat ellátjuk sorszámmal és az oszlopokat igazítjuk\n",
"for x in enumerate(l[:5]):\n",
" print(f'{x[0] + 1}. {x[1][0]:40} {x[1][1]:10}')\n",
" \n",
"# A legmagasabb értékelést kapó szálloda/szállodák\n",
"d = {}\n",
"for l in lines:\n",
" t = l.strip().split(';')\n",
" if t[0] in d:\n",
" d[t[0]][0] += int(t[9])\n",
" d[t[0]][1] += 1\n",
" else:\n",
" d[t[0]] = [int(t[9]), 1]\n",
"# Az átlagok kiszámítása\n",
"atlag = [x / y for (x, y) in list(d.values())]\n",
"max_atlag = max(atlag)\n",
"print()\n",
"print('A maximális (átlagos) pontszám:', max_atlag)\n",
"print('Azok a szállodák, akik a maximális pontot kapták:')\n",
"for i in range(len(atlag)):\n",
" if atlag[i] == max_atlag:\n",
" print(f'{list(d.keys())[i]}, {round(atlag[i], 3)}') \n",
" \n",
"# A medencével rendelkező szállodák értékelése a többihez képest\n",
"# 'm' előtag: medencével rendelkező, 'mn' előtag: medencével nem rendelkező \n",
"mdb, mossz, mndb, mnossz = 0, 0, 0, 0\n",
"for l in lines:\n",
" t = l.strip().split(';')\n",
" if t[2] == 'YES':\n",
" mdb += 1; mossz += int(t[9]) \n",
" else: \n",
" mndb += 1; mnossz += int(t[9]) \n",
"print()\n",
"if mdb > 0:\n",
" if mndb > 0:\n",
" matl = mossz / mdb\n",
" mnatl = mnossz / mndb\n",
" print(f'Medencés átlagpont: {matl:.2f}')\n",
" print(f'Nem medencés átlagpont: {mnatl:.2f}')\n",
" print(f'Különbség: {matl - mnatl:.2f}')\n",
" else:\n",
" print('Minden szálloda úszómedencével ellátott!')\n",
"else:\n",
" print('Egyik szállodában sincs úszómedence!')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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>Hotel name</th>\n",
" <th>Nr. rooms</th>\n",
" <th>Pool</th>\n",
" <th>Gym</th>\n",
" <th>Tennis court</th>\n",
" <th>Spa</th>\n",
" <th>Casino</th>\n",
" <th>Traveler type</th>\n",
" <th>Period of stay</th>\n",
" <th>Score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Circus Circus Hotel &amp; Casino Las Vegas</td>\n",
" <td>3773</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>Friends</td>\n",
" <td>Dec-Feb</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Circus Circus Hotel &amp; Casino Las Vegas</td>\n",
" <td>3773</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>Business</td>\n",
" <td>Dec-Feb</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Circus Circus Hotel &amp; Casino Las Vegas</td>\n",
" <td>3773</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>Families</td>\n",
" <td>Mar-May</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Circus Circus Hotel &amp; Casino Las Vegas</td>\n",
" <td>3773</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>Friends</td>\n",
" <td>Mar-May</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Circus Circus Hotel &amp; Casino Las Vegas</td>\n",
" <td>3773</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>Solo</td>\n",
" <td>Mar-May</td>\n",
" <td>4</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",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>499</th>\n",
" <td>The Westin las Vegas Hotel Casino &amp; Spa</td>\n",
" <td>826</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>Couples</td>\n",
" <td>Sep-Nov</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>500</th>\n",
" <td>The Westin las Vegas Hotel Casino &amp; Spa</td>\n",
" <td>826</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>Couples</td>\n",
" <td>Sep-Nov</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>501</th>\n",
" <td>The Westin las Vegas Hotel Casino &amp; Spa</td>\n",
" <td>826</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>Friends</td>\n",
" <td>Sep-Nov</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>502</th>\n",
" <td>The Westin las Vegas Hotel Casino &amp; Spa</td>\n",
" <td>826</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>Families</td>\n",
" <td>Dec-Feb</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>503</th>\n",
" <td>The Westin las Vegas Hotel Casino &amp; Spa</td>\n",
" <td>826</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>NO</td>\n",
" <td>YES</td>\n",
" <td>YES</td>\n",
" <td>Families</td>\n",
" <td>Dec-Feb</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>504 rows × 10 columns</p>\n",
"</div>"
],
"text/plain": [
" Hotel name Nr. rooms Pool Gym \\\n",
"0 Circus Circus Hotel & Casino Las Vegas 3773 NO YES \n",
"1 Circus Circus Hotel & Casino Las Vegas 3773 NO YES \n",
"2 Circus Circus Hotel & Casino Las Vegas 3773 NO YES \n",
"3 Circus Circus Hotel & Casino Las Vegas 3773 NO YES \n",
"4 Circus Circus Hotel & Casino Las Vegas 3773 NO YES \n",
".. ... ... ... ... \n",
"499 The Westin las Vegas Hotel Casino & Spa 826 YES YES \n",
"500 The Westin las Vegas Hotel Casino & Spa 826 YES YES \n",
"501 The Westin las Vegas Hotel Casino & Spa 826 YES YES \n",
"502 The Westin las Vegas Hotel Casino & Spa 826 YES YES \n",
"503 The Westin las Vegas Hotel Casino & Spa 826 YES YES \n",
"\n",
" Tennis court Spa Casino Traveler type Period of stay Score \n",
"0 NO NO YES Friends Dec-Feb 5 \n",
"1 NO NO YES Business Dec-Feb 3 \n",
"2 NO NO YES Families Mar-May 5 \n",
"3 NO NO YES Friends Mar-May 4 \n",
"4 NO NO YES Solo Mar-May 4 \n",
".. ... ... ... ... ... ... \n",
"499 NO YES YES Couples Sep-Nov 5 \n",
"500 NO YES YES Couples Sep-Nov 4 \n",
"501 NO YES YES Friends Sep-Nov 4 \n",
"502 NO YES YES Families Dec-Feb 2 \n",
"503 NO YES YES Families Dec-Feb 4 \n",
"\n",
"[504 rows x 10 columns]"
]
},
"execution_count": 4,
"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('hotels.txt', sep=';')\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Az 5 legnagyobb szálloda:\n",
"Hotel name\n",
"The Venetian Las Vegas Hotel 4027\n",
"Excalibur Hotel & Casino 3981\n",
"Bellagio Las Vegas 3933\n",
"Circus Circus Hotel & Casino Las Vegas 3773\n",
"Caesars Palace 3348\n",
"Name: Nr. rooms, dtype: int64\n",
"\n",
"A szálloda, amelyik a legmagasabb (4.625) értékelést kapta: Wynn Las Vegas\n",
"\n",
"A legmagasabb értékelést (4.625) kapó szállodák:\n",
" Hotel name Score\n",
"20 Wynn Las Vegas 4.625\n",
"\n",
"Medencés átlagpont: 4.17\n",
"Nem medencés átlagpont: 3.21\n",
"Különbség: 0.96\n"
]
}
],
"source": [
"# Az 5 legnagyobb szálloda\n",
"print('Az 5 legnagyobb szálloda:')\n",
"print(df.groupby('Hotel name').last()['Nr. rooms'].sort_values(ascending=False)[:5])\n",
"print()\n",
"\n",
"# A legmagasabb értékelést kapó szálloda/szállodák\n",
"\n",
"# Ha csak egy ilyen van\n",
"pont = df.groupby('Hotel name')['Score'].mean()\n",
"print(f'A szálloda, amelyik a legmagasabb ({pont.max()}) értékelést kapta: {pont.idxmax()}')\n",
"print()\n",
"\n",
"# Ha több ilyen is lehet\n",
"pont_max = pont.max()\n",
"df1 = pont.reset_index()\n",
"print(f'A legmagasabb értékelést ({pont_max}) kapó szállodák:')\n",
"print(df1[df1['Score'] == pont_max])\n",
"print()\n",
"\n",
"# A medencével rendelkező szállodák értékelése a többihez képest\n",
"se = df.groupby('Pool')['Score'].mean()\n",
"print(f\"Medencés átlagpont: {round(se['YES'], 2)}\")\n",
"print(f\"Nem medencés átlagpont: {round(se['NO'], 2)}\")\n",
"print(f\"Különbség: {round(se['YES'] - se['NO'], 2)}\")"
]
}
],
"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": 1
}