Seite 1 von 1

geordnete ausgabe mit formatting aber wie?

Verfasst: Freitag 23. Dezember 2005, 23:32
von splsah
hi leute ich müsste euch mal um eure hilfe bitten und zwar habe ich ja in diesem http://www.python-forum.de/viewtopic.php?t=4669 thread
ja schon mal mein script vorgestellt.

der unterschied zu diesem script ist das hier nun die zehn zufällig erzeugten
zwerge in einer liste gespeichert werden und ebenfalls wider ausgegeben werden

also hier ist mal der neue scriptcode:

Code: Alles auswählen

#Obersteklasse,welche die Steuern ausrechnet und sonst alle informationen über die hofzbediensteten festlegtt
class hofburg:
    def __init__(self):
        self.name=''
        self.basisfreibetrag=10
        self.freibetrag=0
        self.steuerbetrag=0
        self.nettogehalt=0
 
    def berechnung(self):#Prozedur um die Steuern vom Gehalt abzuziehen
        self.freibetrag=self.basisfreibetrag+self.zusatzfreibetrag
        if self.bruttogehalt > 13:
            self.steuerbetrag=(self.bruttogehalt-self.freibetrag)*45/100 #Formel um die Steuer zu berechnen
        else:
            self.freibetrag=self.bruttogehalt
        self.nettogehalt=self.bruttogehalt-self.steuerbetrag
        
                         
    def ausgabe(self):            
        print 'Nummer des Zwerges:'+str(self.name)
        print 'Beruf:'+str(self.z)
        print 'Bruttogehalt:'+str(self.bruttogehalt)
        print 'Basisfreibetrag:'+str(self.basisfreibetrag)
        print 'Zusatzfreibetrag:'+str(self.zusatzfreibetrag)
        print 'Freibetrag:'+str(self.freibetrag)
        print 'Steuer:'+str(self.steuerbetrag)
        print 'Nettogehalt:'+str(self.nettogehalt)        
 
 
#Basisklasse der Hofzwerge
class hofzwerge(hofburg):
    def __init__(self):
       hofburg.__init__(self)

 
#Hofzwerge 1.Klasse
class hofzwerg1klasse(hofzwerge):
    def __init__(self):
        self.z='Hofzwerg 1.Klasse'
        self.bruttogehalt=35
        self.zusatzfreibetrag=3
        hofzwerge.__init__(self)
 
 
#Hofzwerge 2.Klasse
class hofzwerg2klasse(hofzwerge):
    def __init__(self):
        self.z='Hofzwerg 2.Klasse'
        self.bruttogehalt=45
        self.zusatzfreibetrag=4
        hofzwerge.__init__(self) 
 
 
#Basisklass der Zeitarbeiter(Achtung diese Arbeiter werden nach Arbeitszeit bezahlt)
class zeitarbeiter(hofburg):
    def __init__(self):
        self.zusatzfreibetrag=3
        hofburg.__init__(self)
 
#Klasse der Kammerkaligraphen
class kammerkaligraph(zeitarbeiter):
    def __init__(self):
        self.z='Kammerkaligraph'
        self.stundenlohn=2
        self.stundenanzahl=1
        self.bruttogehalt=self.stundenlohn*self.stundenanzahl #Berechnung des Gehaltes
        zeitarbeiter.__init__(self)
 
 
#Klasse der Hofpompfuenbristen
class hofpompfuenebristen(zeitarbeiter):
    def __init__(self):
        self.z='Hofpompfuenebristen'
        self.stundenlohn=8
        self.stundenanzahl=1
        self.bruttogehalt=self.stundenanzahl*self.stundenlohn
        zeitarbeiter.__init__(self) #Basisklasse wird als Prozedur in der Unterklasse aufgeführtt
 
 
# Hier beginnt das eigentliche script denn hier werden nun die Bediensteten entwickelt
 
 
import random
l=[]
for i in range(1,11):
    x = random.randint(1, 4)
    if x==1:
        z=hofzwerg1klasse()
        l.append(z)
    elif x==2:
        z=hofzwerg2klasse()
        l.append(z)
    elif x==3:
        z=kammerkaligraph()
        l.append(z)
    elif x==4:
        z=hofpompfuenebristen()
        l.append(z)
    z.name = i
    z.berechnung()#Steuer des jeweiligen Zwerges wird berechnet
    z.ausgabe()#Ausgabe der Steuern mit der dazugehörigen Nummer des Zwerges
nun will unser infolehrer
das diese sachen geordnet in einer tabelle im ausgabefenster ausgeben werden
jedenfalls habe ich schon gehört das geht auch mit tkinter aber unser lehrer will das nicht, warum auch immer, wnaja kenne mich mit tkinter auch ncoh nicht aus.
jedenfalls hat er uns dann auf die libary reference in python >index>% formatting hingewiesen, aber ich werde darus nicht schlau und meine mitschüler auch nicht. jedenfalls wollte ich euch mal um hilfe bitten, d.h. nur um einen hinweis oder so oder ein beispiel, denn in der wiki und durch die forumsuche habe ich nichts gefunden.
habe nochmal ein bild angehängt wie sich das mein lehrer vorstellt:
http://www.sebastians-home.de/tabelle.gif

Re: geordnete ausgabe mit formatting aber wie?

Verfasst: Samstag 24. Dezember 2005, 00:50
von joe

Re: geordnete ausgabe mit formatting aber wie?

Verfasst: Samstag 24. Dezember 2005, 11:43
von jens
splsah hat geschrieben:nun will unser infolehrer (gott weiß ich hasse ihn;))
Wenn der nicht ganz auf dem Kopf gefallen ist, wird es sicherlich deinen Beitrag schnell im Netz finden, als dir lieb ist :lol:

Verfasst: Sonntag 25. Dezember 2005, 16:15
von splsah
also sorry leute wir kommen nicht weiter, haben da etwas formuliert aber es klappt nicht und wir erkennen leider nicht den fehler

Code: Alles auswählen

import string
print 'Nr.  Brutto   Gruppe   Stlohn.   Arbeitszeit   Basisfr.   Zusatzfr.   Freib.   Steuer   Netto'
print '---------------------------------------------------------------------------------------------'
print '% 1d  2d       2s       2d           2d          2d         2d         2d       2d      2d %' (self.name)
hoffe ihr könnt uns nochmal helfen

Verfasst: Sonntag 25. Dezember 2005, 16:24
von Leonidas
Das sollte eher so sein:

Code: Alles auswählen

print 'Nr.  Brutto   Gruppe   Stlohn.   Arbeitszeit   Basisfr.   Zusatzfr.   Freib.   Steuer   Netto'
print '-' * 93
print '  %d  %d       %s       %d           %d          %d         %d         %d       %d      %d' % (nr, brutto, gruppe, lohn, zeit, basis, zusatz, frei, steuer, netto)

Verfasst: Sonntag 25. Dezember 2005, 16:33
von Joghurt
Wohl eher so:

Code: Alles auswählen

print 'Nr.  Brutto   Gruppe   Stlohn.   Arbeitszeit   Basisfr.   Zusatzfr.   Freib.   Steuer   Netto'
print '-' * 93
print '  %2d  %2d       %2s       %2d           %2d          %2d         %2d         %2d       %2d      %2d' % (nr, brutto, gruppe, lohn, zeit, basis, zusatz, frei, steuer, netto)

Verfasst: Sonntag 25. Dezember 2005, 16:38
von Leonidas
Kommt davon, wenn man es nur aus dem Kopf macht ;)

Verfasst: Sonntag 25. Dezember 2005, 16:58
von splsah
danke habe aber selbst den fehler gefunden unser code sieht jetzt so aus:

Code: Alles auswählen

#Script bei Sebastian Dewald
#Obersteklasse,welche die Steuern ausrechnet und sonst alle informationen über die hofzbediensteten festlegtt
class hofburg:
    def __init__(self):
        self.name=''
        self.basis=10
        self.frei=0
        self.steuer=0
        self.netto=0
 
    def berechnung(self):#Prozedur um die Steuern vom Gehalt abzuziehen
        self.frei=self.basis+self.zusatz
        if self.brutto > 13:
            self.steuer=(self.brutto-self.frei)*45/100 #Formel um die Steuer zu berechnen
        else:
            self.frei=self.brutto
        self.netto=self.brutto-self.steuer
        
                         
    def ausgabe(self):
        print "Auflistung der 10 Zwerge"             
        print ' Nr.  Brutto      Gruppe           Stlohn.   Arbeitszeit   Basisfr.   Zusatzfr.   Freib.   Steuer   Netto'
        print '---------------------------------------------------------------------------------------------------------'
        print '%3d    %2d      %1s  %2d        %3d          %3d         %3d        %3d        %2d     %3d' % (self.name,self.brutto,self.z,self.stundenl,self.stunden,self.basis,self.zusatz,self.frei,self.steuer,self.netto)
       
 
 
#Basisklasse der Hofzwerge
class hofzwerge(hofburg):
    def __init__(self):
       hofburg.__init__(self)

 
#Hofzwerge 1.Klasse
class hofzwerg1klasse(hofzwerge):
    def __init__(self):
        self.z='Hofzwerg 1.Klasse'
        self.brutto=35
        self.zusatz=3
        hofzwerge.__init__(self)
 
 
#Hofzwerge 2.Klasse
class hofzwerg2klasse(hofzwerge):
    def __init__(self):
        self.z='Hofzwerg 2.Klasse'
        self.brutto=45
        self.zusatz=4
        hofzwerge.__init__(self) 
 
 
#Basisklass der Zeitarbeiter(Achtung diese Arbeiter werden nach Arbeitszeit bezahlt)
class zeitarbeiter(hofburg):
    def __init__(self):
        self.zusatz=3
        hofburg.__init__(self)
 
#Klasse der Kammerkaligraphen
class kammerkaligraph(zeitarbeiter):
    def __init__(self):
        self.z='Kammerkaligraph'
        self.stundenl=2
        self.stunden=1
        self.brutto=self.stundenl*self.stunden #Berechnung des Gehaltes
        zeitarbeiter.__init__(self)
 
 
#Klasse der Hofpompfuenbristen
class hofpompfuenebristen(zeitarbeiter):
    def __init__(self):
        self.z='Hofpompfuenebristen'
        self.stundenl=8
        self.stunden=1
        self.brutto=self.stunden*self.stundenl
        zeitarbeiter.__init__(self) #Basisklasse wird als Prozedur in der Unterklasse aufgeführtt
 
 
# Hier beginnt das eigentliche script denn hier werden nun die Bediensteten entwickelt
 
import random
l=[]
for i in range(1,11):
    x = random.randint(1, 4)
    if x==1:
        z=hofzwerg1klasse()
        l.append(z)
    elif x==2:
        z=hofzwerg2klasse()
        l.append(z)
    elif x==3:
        z=kammerkaligraph()
        l.append(z)
    elif x==4:
        z=hofpompfuenebristen()
        l.append(z)
    z.name = i
    z.berechnung()#Steuer des jeweiligen Zwerges wird berechnet
    z.ausgabe()#Ausgabe der Steuern mit der dazugehörigen Nummer des Zwerges
jetzt habe wir nur noch zwei probs und zwar wie können wir das mit den zwei atributten stundenl und stunden machen, da diese ja nur atributte der hofpompfünebristen und die der kammerkaligraphen sind

außerdem wie erreichen wir es das die 10 zwerge in einer liste ausgegeben werden mit einer variable?

Verfasst: Sonntag 25. Dezember 2005, 18:17
von Joghurt
Ist zwar keine Antwort auf eure Frage, aber dennoch ein Tipp:
Ihr schreibt:

Code: Alles auswählen

#Obersteklasse,welche die Steuern ausrechnet und sonst alle informationen über die hofzbediensteten festlegtt
class hofburg:
...
    def berechnung(self):#Prozedur um die Steuern vom Gehalt abzuziehen
... 
#Basisklasse der Hofzwerge
class hofzwerge(hofburg):
Besser ist es, die Kommentare direkt als Docstrings zu machen:

Code: Alles auswählen

class hofburg:
    "Oberste Klasse, welche die Steuern ..."
    ...
    def berechnung(self):
        "Prozedur um die Steuern vom Gehalt abzuziehen"
...
class hofzwerge(hofburg):
   "Basisklasse der Hofzwerge"
etc.

Das hat den Vorteil, das man mit help(objekt) die Beschreibung angezeigt bekommt. Bei mehrzeilgen Kommentaren diese in """ statt " einschließen.

Code: Alles auswählen

def foo():
    """Dies ist eine ganz tolle
Funktion. Jawohl, sie ist so toll, dass ich
mich gar nicht traue zu erwähnen, was sie macht."""
Edit: pydoc und epydoc nutzen diese Docstrings natürlich auch, um eine automatische API-Doku zu erstellen

Verfasst: Sonntag 25. Dezember 2005, 18:22
von splsah
danke dir
nochmal ein kurzes update

Code: Alles auswählen

#Script bei Sebastian Dewald
#Obersteklasse,welche die Steuern ausrechnet und sonst alle informationen über die hofzbediensteten festlegtt
class hofburg:
    def __init__(self):
        self.name=''
        self.basis=10
        self.frei=0
        self.steuer=0
        self.netto=0
 
    def berechnung(self):#Prozedur um die Steuern vom Gehalt abzuziehen
        self.frei=self.basis+self.zusatz
        if self.brutto > 13:
            self.steuer=(self.brutto-self.frei)*45/100 #Formel um die Steuer zu berechnen
        else:
            self.frei=self.brutto
        self.netto=self.brutto-self.steuer
        
                         
    def ausgabe(self):
        print "Auflistung der 10 Zwerge"             
        print ' Nr.  Brutto  Gruppe             Basisfr.    Zusatzfr.   Freib.    Steuer     Netto'
        print '-------------------------------------------------------------------------------------------'
        print '%2d    %3d   %1s           %2d            %1d     %5d       %4d      %5d' % (self.name,self.brutto,self.z,self.basis,self.zusatz,self.frei,self.steuer,self.netto)
      
 
 
#Basisklasse der Hofzwerge
class hofzwerge(hofburg):
    def __init__(self):
       hofburg.__init__(self)

 
#Hofzwerge 1.Klasse
class hofzwerg1klasse(hofzwerge):
    def __init__(self):
        self.z='Hofzwerg1kl.'
        self.brutto=35
        self.zusatz=3
        self.stundenl=0
        self.stunden=0
        hofzwerge.__init__(self)
 
 
#Hofzwerge 2.Klasse
class hofzwerg2klasse(hofzwerge):
    def __init__(self):
        self.z='Hofzwerg2kl.'
        self.brutto=45
        self.zusatz=4
        self.stundenl=0
        self.stunden=0
        hofzwerge.__init__(self) 
 
 
#Basisklass der Zeitarbeiter(Achtung diese Arbeiter werden nach Arbeitszeit bezahlt)
class zeitarbeiter(hofburg):
    def __init__(self):
        self.zusatz=3
        hofburg.__init__(self)
 
#Klasse der Kammerkaligraphen
class kammerkaligraph(zeitarbeiter):
    def __init__(self):
        self.z='Kammerkalig.'
        self.stundenl=2
        self.stunden=1
        self.brutto=self.stundenl*self.stunden #Berechnung des Gehaltes
        zeitarbeiter.__init__(self)
 
 
#Klasse der Hofpompfuenbristen
class hofpompfuenebristen(zeitarbeiter):
    def __init__(self):
        self.z='Hofpompfuen.'
        self.stundenl=8
        self.stunden=1
        self.brutto=self.stunden*self.stundenl
        zeitarbeiter.__init__(self) #Basisklasse wird als Prozedur in der Unterklasse aufgeführtt
 
 
# Hier beginnt das eigentliche script denn hier werden nun die Bediensteten entwickelt
 
import random
l=[]
for i in range(1,11):
    x = random.randint(1, 4)
    if x==1:
        z=hofzwerg1klasse()
        l.append(z)
    elif x==2:
        z=hofzwerg2klasse()
        l.append(z)
    elif x==3:
        z=kammerkaligraph()
        l.append(z)
    elif x==4:
        z=hofpompfuenebristen()
        l.append(z)
    z.name = i
    z.berechnung()#Steuer des jeweiligen Zwerges wird berechnet
    z.ausgabe()#Ausgabe der Steuern mit der dazugehörigen Nummer des Zwerges