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

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

 

 

Megoldás

# 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))

News Reporter