{ "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Hotel nameNr. roomsPoolGymTennis courtSpaCasinoTraveler typePeriod of stayScore
0Circus Circus Hotel & Casino Las Vegas3773NOYESNONOYESFriendsDec-Feb5
1Circus Circus Hotel & Casino Las Vegas3773NOYESNONOYESBusinessDec-Feb3
2Circus Circus Hotel & Casino Las Vegas3773NOYESNONOYESFamiliesMar-May5
3Circus Circus Hotel & Casino Las Vegas3773NOYESNONOYESFriendsMar-May4
4Circus Circus Hotel & Casino Las Vegas3773NOYESNONOYESSoloMar-May4
.................................
499The Westin las Vegas Hotel Casino & Spa826YESYESNOYESYESCouplesSep-Nov5
500The Westin las Vegas Hotel Casino & Spa826YESYESNOYESYESCouplesSep-Nov4
501The Westin las Vegas Hotel Casino & Spa826YESYESNOYESYESFriendsSep-Nov4
502The Westin las Vegas Hotel Casino & Spa826YESYESNOYESYESFamiliesDec-Feb2
503The Westin las Vegas Hotel Casino & Spa826YESYESNOYESYESFamiliesDec-Feb4
\n", "

504 rows × 10 columns

\n", "
" ], "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 }