ArrayList für Objekt mit mehreren Werten

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
invisible
User
Beiträge: 6
Registriert: Freitag 13. März 2020, 02:40

Hallo,

ich möchte eine ArrayList für ein Objekt der Klasse Rechteck erstellen, in der ich neue Rechtecke mit anderen Längen und Breitenwerte hinzufüge um diese dann zu erstellen, so dass mir nach dem Compilervorgang, alle Rechtecke über eine print-Methode aufgelistet werden. Könnte mir jemand helfen? Aktueller Code siehe unten. LG

Code: Alles auswählen

class Rechteck:
    def __init__(self,laenge,breite):
        self.laenge = laenge
        self.breite = breite

    print('Rechteck erstellt!')


    def print_rechteck(self):
        print('Die Rechtecklänge beträgt: '+ str(self.laenge)+ ' und die Rechteckbreite beträgt: ' +str(self.breite))


rechteck = Rechteck(20,5)

rechteck.print_rechteck()
invisible
User
Beiträge: 6
Registriert: Freitag 13. März 2020, 02:40

ok also in etwa hab ich es schon geschafft! Jetzt wird mir die Länge des Rechtecks, welches an Position xyz in der Liste gespeichert wurde, ausgegeben. Jetzt möchte ich gerne, dass mir. 1. zusätzlich auch die Breite mit ausgegeben wird und zudem einmal eine komplette Auflistung aller gespeicherten Rechtecke.


Code siehe wie folgt:

Code: Alles auswählen

class Rechteck(object):
    def __init__(self, laenge=None, breite=None):
        self.laenge = laenge
        self.breite = breite

    print('Rechteck erstellt!')
    
rechteckList = []
rechteckList.append(Rechteck(20,5))
rechteckList.append(Rechteck(40,5))

print (rechteckList[1].laenge)
invisible
User
Beiträge: 6
Registriert: Freitag 13. März 2020, 02:40

ok länge und breite wird nun zusammen ausgegeben! Das hätten wir schonmal! Jetzt hätte ich gerne nur noch, dass alle Rechtecke gelistet mit einer print-Methode ausgegeben werden.

Code:

Code: Alles auswählen

class Rechteck(object):
    def __init__(self, laenge=None, breite=None):
        self.laenge = laenge
        self.breite = breite

    print('Rechteck erstellt!')


    def print_rechteck(self):
        print('Die Rechtecklänge beträgt: '+ str(self.laenge)+ ' und die Rechteckbreite beträgt: ' +str(self.breite))

rechteckList = []
rechteckList.append(Rechteck(20,5))
rechteckList.append(Rechteck(40,5))

print (f"Länge beträgt:  {rechteckList[1].laenge}  und Breite beträgt:  {rechteckList[1].breite}")

Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Das erste `print` sieht falsch eingerückt aus. Warum stückekst Du in print_rechteck Strings mit + zusammen, unten verwendest Du aber Formatstrings?
Variablennamen werden klein_mit_unterstrich geschrieben. Datentypen haben in Namen nichts zu suchen. rechteckList sollte besser rechtecke heißen. Zur Ausgabe aller Rechtecke brauchst Du eine for-Schleife.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

In der offiziellen Dokumentation gibt es ein ganz gutes Tutorial, das die Grundlagen von Python vermittelt. Unter anderem lernt man dort auch etwas über for-Schleifen.
Das Tutorial ist ein guter Startpunkt um sich entsprechendes Grundwissen anzueignen.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Was mir gerade noch aufgefallen ist: laenge und breite in Rechteck haben als default-Argument None. Ist es sinnvoll ein Rechteck ohne eine Länge zu haben? Nein, die beiden Argumente müssen Pflicht-Argumente sein.
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Damit du mal eine Basis hast, auf der du aufbauen kannst.

Code: Alles auswählen

class Rechteck:
    
    def __init__(self, laenge, breite):
        self.laenge = laenge
        self.breite = breite

    def __str__(self):
        return f'Die Rechtecklänge beträgt: {self.laenge} und die Rechteckbreite beträgt: {self.breite}'

rechtecke = [Rechteck(laenge, breite) for laenge, breite in [(20, 5), (40, 5)]]

for rechteck in rechtecke:
    print(rechteck)

Code: Alles auswählen

Die Rechtecklänge beträgt: 20 und die Rechteckbreite beträgt: 5
Die Rechtecklänge beträgt: 40 und die Rechteckbreite beträgt: 5
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten