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.
Olvassuk be és tároljuk el az adatokat két adatállományból.
Hány fegyőr, és hány rab van az intézetben? Írassuk ki a képernyőre a létszámokat.
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é.
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.
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!"
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).
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]
# 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))