Seite 1 von 1

gewählte Elemente der vorgegebenen Liste ausgegeben

Verfasst: Freitag 14. Januar 2022, 09:34
von Lini
Hallo,

ich schreibe ein Python-Programm, wo zwei letzten Elemente der vorgegebenen Liste 'volunteer_datas' ausgegeben werden sollten.
Es muss auch die Vererbung eingesetzt werden (das ist schon realisiert):

Code: Alles auswählen

class Person:
    def __init__(self, name: str):
        self.name = name

    def __str__(self):
        return f'{self.name}'

class Volunteer(Person):
    def __init__(self, name: str, place: str, status: str):
        super().__init__(name)                                   
        self.place = place
        self.status = status

    def __str__(self):
        return f'{self.name}, {self.place}, {self.status}'

volunteer_datas = [
        {"name": "Smith", "place": "Boston", "status": 'Consultant'},
        {"name": "Elvin", "place": "Paris", "status": 'Mentor'},
	    {"name": "Schwarz", "place": "Viena", "status": 'Trainer'}]

print('list of guests :')
for volunteer_data in volunteer_datas:
    for i in volunteer_data:
        if i == 'name' and (volunteer_data['name'] == 'Elvin' or 'Schwarz'):
            obj_vol = Volunteer(volunteer_data['name'], volunteer_data['place'], volunteer_data['status'])
            print(obj_vol.__str__())
Das Programm gibt momentan aber alle Elementen der Liste, nicht die zwei letzten:

Code: Alles auswählen

list of guests :
Smith, Boston, Consultant
Elvin, Paris, Mentor
Schwarz, Viena, Trainer

Process finished with exit code 0

Ich wollte zuerst die Ausgabe mittels -if- realisieren (ich weiss, es ginge auch mittel -for- aber das lieber danach).
Also, bei der Ausgabe wollte ich die Angaben der zwei letzten Positionen aus der Liste 'volunteer_datas' (mit der 'name', place', Status') bekommen:

Code: Alles auswählen

        {"name": "Elvin", "place": "Paris", "status": 'Mentor'},
	    {"name": "Schwarz", "place": "Viena", "status": 'Trainer'}
Ich bitte um Hilfe

Re: gewählte Elemente der vorgegebenen Liste ausgegeben

Verfasst: Freitag 14. Januar 2022, 10:46
von Sirius3
`i` ist ein sehr schlechter Variablenname für einen Schlüssel. Die for-Schleife an sich, macht keinen Sinn, da eh nur maximal einmal die if-Bedingung erfüllt ist und `i` sonst auch nicht gebraucht wird. Die for-Schleife kann man also ersatzlos streichen. Alles in Python sind Objekte die Vorsilbe in `obj_vol` ist also nichts-sagend und kann weg.
__str__ ruft man nicht explizit auf, sondern per `str(...)`, wobei dieser Aufruf bei `print` nicht nötig ist.
Kommen wir also hier an:

Code: Alles auswählen

print('list of guests :')
for volunteer_data in volunteer_datas:
    if volunteer_data['name'] == 'Elvin' or 'Schwarz':
        volunteer = Volunteer(volunteer_data['name'], volunteer_data['place'], volunteer_data['status'])
        print(volunteer)
Nun macht ein `or` nicht das, was Du denkst. Hier brauchst Du `in`:

Code: Alles auswählen

print('list of guests :')
for volunteer_data in volunteer_datas:
    if volunteer_data['name'] in ['Elvin', 'Schwarz']:
        volunteer = Volunteer(volunteer_data['name'], volunteer_data['place'], volunteer_data['status'])
        print(volunteer)

Re: gewählte Elemente der vorgegebenen Liste ausgegeben

Verfasst: Freitag 14. Januar 2022, 10:47
von /me

Re: gewählte Elemente der vorgegebenen Liste ausgegeben

Verfasst: Freitag 14. Januar 2022, 11:14
von Lini
Vielen Dank!

-in- statt -or- jetzt habe ich den Unterschied kennengelernt.
Und Sie haben es für den Anfänger vereinfacht.

Prima!

Re: gewählte Elemente der vorgegebenen Liste ausgegeben

Verfasst: Freitag 14. Januar 2022, 14:53
von imonbln
ich schreibe ein Python-Programm, wo zwei letzten Elemente der vorgegebenen Liste 'volunteer_datas' ausgegeben werden sollten.
Immer die letzten zwei unabhängig vom Namen?
Dann wäre die negative Indizierung dein Freund, wenn ein Index einer Liste in Python negativ ist bedeutet das vom Ende
volunteer_datas[-1] ist also der letzte Eintrag, volunteer_datas[-2] der vorletzte. Achtung Negtive Indeizerung ist 1 based nicht zero based. Der letzte Eintrag ist also -1.
volunteer_datas[-2:] gibt dir dann die (Teilliste) der letzten zwei Einträge.

Code: Alles auswählen

print('list of guests :')
for volunteer_data in volunteer_datas[-2:] : 
        volunteer = Volunteer(volunteer_data['name'], volunteer_data['place'], volunteer_data['status'])
        print(volunteer)