Liste ausgeben

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
Alpha-Phonix
User
Beiträge: 36
Registriert: Dienstag 10. Januar 2006, 13:24
Kontaktdaten:

Hallo Forum!

ich suche eine Formatierung, die mir es ermöglicht eine Liste auszuegeben. Ich habe mehrere Klassenobjekte in dieser gespeichert, die alles individuelle Werte besitzen!
Wie kann ich die nun sinnvoll ausgeben?
wenn ich mit print liste, die liste ausgeben, dann gibt er mir die speicheradressen von allen listen, jedoch nicht die werte!

vielen dank
:idea:
Never touch a running system...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Meinst Du sowas?

Code: Alles auswählen

In [23]: class A:
   ....:     def __init__(self, x):
   ....:         self.x = x
   ....:     def __repr__(self):
   ....:         return "x = %s" % self.x
   ....:

In [24]: a = A(1)

In [25]: b = A(2)

In [26]: c = A(3)

In [27]: l = [a,b,c]

In [28]: for i in l: print i
   ....:
x = 1
x = 2
x = 3
Gruß, mawe
Alpha-Phonix
User
Beiträge: 36
Registriert: Dienstag 10. Januar 2006, 13:24
Kontaktdaten:

Code: Alles auswählen

class Zeichnung:
    def __init__(self):
        self.m_figurListe = list()

    def hinzufuegen_figur(self,figur):
        self.m_figurListe.append( figur )
so in figur steht jetzt ein objekt mit verschiedenen werten! diese figur wird der liste m_figurListe zugefügt und diese möchte ich jetzt ausgeben! in dem objekt sind int und float werte gespeichert!
Never touch a running system...
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

umm alle werte Auszugeben einfach eine for Schleife verwenden

Bsp für einfach print:

Code: Alles auswählen

for name in self.m_figure:
        print name
wie du siehst wird der Inhalt jeweils an die Variable name übergeben, damit kannst du dann innerhalb der Schleife nach belieben verfahren. Der Variablenname ist frei wählbar und muss keinen Bezug auf die Liste haben. Falls das nicht funktionieren sollte würde ich aus der Liste nen Array machen:

Code: Alles auswählen

self.m_figurListe = []
und dann wie oben weiter verfahren. Array bietet auch den Vorteil, dass du auf einzelne Elemente einfach zugreifen kannst.
Alpha-Phonix
User
Beiträge: 36
Registriert: Dienstag 10. Januar 2006, 13:24
Kontaktdaten:

irgendwas mache ich falsch, er liefert mir nur die adresse! hab hier mal einen ausschnitt, vielleicht mache ich noch was anderes falsch!

Code: Alles auswählen

class Zeichnung:
    def __init__(self):
        self.m_figurListe = list()
        
    def hinzufuegen_figur(self,figur):
        self.m_figurListe.append( figur )
    
        for name in self.m_figurListe:
            print name
dass ist eine klasse

Code: Alles auswählen

class Kreis(GeometrischeFigur):

    def __init__( self, t_xCenter, t_yCenter, t_radius ):
        self.m_xCenter = t_xCenter
        self.m_yCenter = t_yCenter
        self.m_radius = t_radius
            
    def rechneSchnittlaenge(self):
        schnittlaenge = (float(math.pi)) * float(self.m_radius) * 2
        return schnittlaenge
    
    def rechneFlaeche(self):
        flaeche = (float(math.pi)) * float(self.m_radius) * float(self.m_radius)
        return flaeche
und schließlich der aufruf:

Code: Alles auswählen

x_center=raw_input("X-Position: ")
                y_center=raw_input("Y-Position: ")
                radius=raw_input("Radius (cm): ")
                kreis=Kreis(radius,x_center,y_center)
                schnittlaenge_kreis=kreis.rechneSchnittlaenge()
                flaeche_kreis=kreis.rechneFlaeche()
                
                z1.hinzufuegen_figur(kreis)
Never touch a running system...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

@AlphaPhoenix: Und warum schreibst Du in der Klasse Kreis kein __repr__() wie ich's Dir gezeigt habe? Die wird nämlich beim print aufgerufen.

Code: Alles auswählen

def __repr__(self):
    return "%s, %s, %s" % (self.m_xCenter, self.m_yCenter, self.m_radius)
@Buell: Warum sollte l = [] ein Array ergeben? Bei mir ist das auch eine Liste. Und wie genau ist der Zugriff auf einzelne Elemente besser?
Alpha-Phonix
User
Beiträge: 36
Registriert: Dienstag 10. Januar 2006, 13:24
Kontaktdaten:

ok sorry, ich glaub ich kriegs jetzt hin, wenn net melde ich mich nochmal!
vielen danke für eure hilfe!
jetzt würd mich natürlich noch interessieren, was die __repr__(....
macht?
Never touch a running system...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

AlphaPhoenix hat geschrieben: jetzt würd mich natürlich noch interessieren, was die __repr__(....
macht?
mawe hat geschrieben: Die wird nämlich beim print aufgerufen
Wozu schreib ich mir hier eigentlich die Finger wund? :D
Alpha-Phonix
User
Beiträge: 36
Registriert: Dienstag 10. Januar 2006, 13:24
Kontaktdaten:

ja nun das ist ja klar, das hast ja schon geschrieben. aber was macht die fkt genau, dass sie beim print aufgerufen wird, weiß ich ja jetzt!
Never touch a running system...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Ich versteh Deine Frage nicht ganz. Sie mach das was eine brave Funktion nun mal macht, nämlich das was Du ihr sagst was sie tun soll ;)

Code: Alles auswählen

def __repr__(self):
    return "lala"
Hier gibt sie den String "lala" zurück.

Code: Alles auswählen

In [4]: class A:
   ...:     def __repr__(self):
   ...:         return "lala"
   ...:

In [5]: a = A()

In [6]: print a
lala
BlackJack

Alpha-Phonix hat geschrieben:

Code: Alles auswählen

class Zeichnung:
    def __init__(self):
        self.m_figurListe = list()

    def hinzufuegen_figur(self,figur):
        self.m_figurListe.append( figur )
Kleine Anmerkung zur Namensgebung: Die (IMHO) Unart ein `m_` vor Variablennamen zu schreiben um sie als `Member`-Variablen zu kennzeichnen und sie von lokalen Namen unterscheiden zu können ist zwar in C++ weit verbreitet, in Python aber total unnötig. In Python muss vor `Member`-Variablen ein `self.` stehen. Das sollte deutlich genug sein. ;-)
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

@mawe

ja hast recht, komme etwas durcheinander, da ich momentan in 4 Sprachen gleichzeitig progge, in der Python Welt ist das natürlich auch eine Liste, die du aber theoretisch behandelst wie ein array, hab grad keine Lust das zu testen, aber müsste doch theoretisch auch mit sowieso[5] gehen, oder?

PS: würde nicht einfach str() das gleiche tun...?
Antworten