This commit is contained in:
2024-09-21 11:23:22 +02:00
parent 9da4794519
commit 361c49551f
15 changed files with 10085 additions and 0 deletions

View File

@ -0,0 +1,558 @@
{
"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
}