gewählte Elemente der vorgegebenen Liste ausgegeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lini
User
Beiträge: 26
Registriert: Freitag 13. November 2020, 00:39

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
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

`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)
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Lini
User
Beiträge: 26
Registriert: Freitag 13. November 2020, 00:39

Vielen Dank!

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

Prima!
imonbln
User
Beiträge: 191
Registriert: Freitag 3. Dezember 2021, 17:07

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