Fizika, matek, informatika érettségi

Home Fizika Excel Access A weboldalról

4. szint

VI. Fegyház

A Very Hard Fegyintézet fegyőrei és rabjai kizárólag egyetlen adat alapján ítélik meg magukat és egymást: kinek mekkora a bicepsze. Adataikat a fegyorok.txt és a rabok.txt szöveges állomány tartalmazza: egy szóközzel elválasztva előbb a fegyőrök (illetve rabok) azonosítója, majd bicepszének kerülete szerepel centiméterben kifejezve.
A fegyőrök azonosítója háromjegyű egész szám, amely előtt egy R betű van, míg a rabok azonosítója egy négyjegyű egész szám. Például a fegyorok.txt állományban az R162-es azonosítójú fegyőr bicepsze 50,2 cm:
R162 50,2
míg a rabok.txt állományban:
1717 26,6
2563 40,5
3201 45,2

pl. a 2563-as rabé 40,5 cm. A fegyházban legfeljebb 40 fegyőr, és legfeljebb 100 rab van.
  1. Olvassuk be és tároljuk el az adatokat két adatállományból.
  2. Hány fegyőr, és hány rab van az intézetben? Írassuk ki a képernyőre a létszámokat.
  3. Kérjük be egy rab azonosítóját, majd írassuk ki bicepszének méretét. Ha nincs ilyen azonosítójú rab, akkor jelenjen meg egy erre utaló üzenet.

    A fegyházban a rabok egyenként sétálnak. Minden rabot egy sétára fegyőrnek kell kísérni, de olyannak, akinek a bicepsze nagyobb, mint az adott rabé.

  4. Kérjük be egy fegyőr azonosítóját (feltehetjük, hogy van ilyen), és írassuk ki, hogy hány olyan rab van, akit elkísérhet sétálni.
  5. Van-e olyan rab, aki sohase mehet sétálni? Ha igen, írassuk ki a képernyőre az azonosítóját! Ha nincs, akkor írassuk ki: "Minden rab mehet levegőzni!"
  6. A rabok titokban "Szökéselőkészítő Tanácsot" alakítanak. A tanácsnak a három legnagyobb bicepszű rab lesz a tagja. Írassuk a tanács tagjainak azonosítóját a képernyőre és a titok.txt szöveges állományba (feltehetjük, hogy nincsenek azonos bicepszű rabok).
Letöltés: fegyorok.txt     rabok.txt

Minta:
2. feladat
Fegyőrök száma: 12
Rabok száma: 36

3. feladat
Bicepsz méret: 43,8

4. feladat
12 rabot vihet sétálni

5. feladat
Nem mehet levegőzni: 5528, 9650

6. feladat
A tanács tagjainak azonosítója: 5528, 9650, 8889



# 1. feladat
with open('fegyorok.txt') as fajl:
forras = fajl.read().splitlines()
fegyorok = [sor.split(' ') for sor in forras]
with open('rabok.txt') as fajl:
forras = fajl.read().splitlines()
rabok = [sor.split(' ') for sor in forras]

# 2. feladat
print('\n2. feladat\nFegyőrök száma:',len(fegyorok),'\nRabok száma:',len(rabok))

# 3. feladat
print('\n3. feladat')
rab = input('Kérem egy rab azonosítóját: ')
lista = [adat[1] for adat in rabok if adat[0]==rab]
print('Bicepsz méret: '+lista[0] if lista else 'Nincs ilyen azonosítójú rab.')

# 4. feladat
print('\n4. feladat')
fegyor = input('Kérem egy fegyőr azonosítóját: ')
lista = [adat[1] for adat in fegyorok if adat[0]==fegyor]
if lista:
meret = lista[0]
kiserheti = [1 for adat in rabok if adat[1]<meret]
print(str(len(kiserheti))+' rabot vihet sétálni' if kiserheti else 'Nem kísérhet rabot.')
else:
print('Nincs ilyen fegyőr.')

# 5. feladat
print('\n5. feladat')
max_fegyor = max([adat[1] for adat in fegyorok])
nem_mehet = [adat[0] for adat in rabok if int(adat[1]>=max_fegyor)]
print('Nem mehet levegőzni: '+', '.join(nem_mehet) if nem_mehet else 'Minden rab mehet levegőzni.')

# 6. feladat
# A bicepszméretek rendezéséhez számmá kell alakítani a méreteket,
# de tizedesvessző van, amit tizedespontra kell cserélni
for rab in rabok:
csere = ''
for index1 in range(len(rab[1])):
if rab[1][index1]==',':
csere += '.'
else:
csere += rab[1][index1]
rab[1]=float(csere) # törtszám, ezért nem int
rabok.sort(key=lambda e:e[1], reverse=True)
tagok = [rabok[index1][0] for index1 in range(0,3)]
#print(tagok)
print('\n6. feladat\nA tanács tagjainak azonosítója:',', '.join(tagok))