Brauche Hilfe!

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
splsah
User
Beiträge: 5
Registriert: Mittwoch 14. Dezember 2005, 19:20

Hallo bin neu hier und bräuchte mal eure hilfe bei einem script, programmiere it python erst seit zwei wochen in der schule und unser lehrer erklärt und nix.

nun komme ich mal zu meinem script:

wir sollen ein script erstellen mit dem es uns möglich ist die steuern von vier verschiedenen hofzwergklassen zu berechnen.

und zwar habe ich eine oberklasse, welche später die steuern berechnet und
die daten+steuern etc ausgeben soll

dann habe ich die klassen zeitarbeiter(teilt sich nochmal in 2 auf) und hofzwerge(teilt sich noch,al in die hofzwerge 1. und 2. klasse auf)

und nun sollen wir mit dem modul random zehn verschiedene hofzwerge erzeugen und es sollen wenn möglich alle vier klassen vorkommen.

nun habe ich die klassen modelliert und das script geschrieben aber es funktioniert nicht

zu info noch: die hofzwerge sollen später auch einen namen haben, dieser sollte seine nummer sein sprich
zwerg 1 heißt 1
zwerg 2 heißt 2 usw

aber nun poste ich mal den code hoffe ihr könnt mir helfen
mfg splsah

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
    def berechnung(self):#Prozedur um die Steuern vom Gehalt abzuziehen
        self.freibetrag=self.basisfreibetrag+self.zusatzfreibetrag
        if self.gehalt > 13:
            self.steuerbetrag=(self.gehalt-self.freibetrag)*45/100 #Formel um die Steuer zu berechnen
        else:
            self.freibetrag=self.gehalt
            self.nettogehalt=self.gehalt-self.steuerbetrag

    def ausgabe(self):
        print 'Nummer des Zwerges:'+str(self.name)
        print 'Beruf:'+str(self.arbeitergruppe)
        print 'Gehalt:'+str(self.gehalt)
        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):
       self.freibetrag=10
    
#Hofzwerge 1.Klasse
class hofzwerg1klasse(hofzwerge):
    def __init(self):
        self.arbeitergruppe='Hofzwerg 1.Klasse'
        self.gehalt=35
        self.zusatzfreibetrag=3
        hofzwerge.__init__(self) #Basisklasse wird als Prozedur in der Unterklasse aufgeführtt


#Hofzwerge 2.Klasse
class hofzwerg2klasse(hofzwerge):
    def __init__(self):
        self.arbeitergruppe='Hofzwerg 2.Klasse'
        self.gehalt=45
        self.zusatzfreibetrag=4
        hofzwerge.__init__(self) #Basisklasse wird als Prozedur in der Unterklasse aufgeführtt


#Basisklass der Zeitarbeiter(Achtung diese Arbeiter werden nach Arbeitszeit bezahlt)
class zeitarbeiter(hofburg):
    def __init__(self):
        self.nummer=""
        self.freibetrag=10
        
#Klasse der Kammerkaligraphen 
class kammerkaligraph(zeitarbeiter):
    def __init__(self):
        self.stundenlohn=2
        self.zeiteinheit=1
        self.zusatzfreibetrag=3
        self.gehalt=self.stundenlohn*self.zeiteineit #Berechnung des Gehaltes
        zeitarbeiter.__init__(self) #Basisklasse wird als Prozedur in der Unterklasse aufgeführtt


#Klasse der Hofpompfuenbristen
class hofpompfuenebristen(zeitarbeiter):
    def __init__(self):
        self.stundenlohn=8
        self.zeiteinheit=1
        self.zusatzfreibetrag=3
        self.gehalt=self.zeiteinheit*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

z=10
while z<10:
    x=int(random.uniform(1,4))
    z=name()
    if x==1:
        arbeitergruppe=hofzwerg1klasse()
    elif x==2:
        arbeitergruppe=hofzwerg2klasse()
    elif x==3:
        arbeitergruppe=kammerkaligraph()
    elif x==4:
        arbeitergruppe=hofpompfuenebristen()
    z=z-1
    z.name=z
    z.berechnung()#Steuer des jeweiligen Zwerges wird berechnet
    z.ausgabe(name)#Ausgabe der Steuern mit der dazugehörigen Nummer des Zwergess
    
    
Edit (Leonidas): Code in Python-Tags gesetzt und verschoben.
joe

Was mir so auf die schnelle auffällt:
- du schreibst nicht, was nicht funktioniert
- ctor von hofzwerge ruft nicht den ctor von hofburg
- hofzwerg1klasse hat keinen ctor (genau hingucken)
- zumindest was debuggen ist, sollte euer lehrer noch verraten
joe
joe

Einen hab ich noch: die while-schleife wird ausgeführt, solange z kleiner 10 ist. Nur, z ist vorher schon nicht kleiner 10!
joe
BlackJack

Diese ganze Vererberei ist so wie sie dasteht ziemlich sinnlos weil nirgends das Verhalten der Oberklasse(n) verändert wird. Es werden immer nur andere Daten gesetzt. Das hätte man auch in einer Klasse für alle erledigen können und die entsprechenden Daten der `__init__()` mitgeben können. Aber ich nehme mal an das die Aufgabenstellung das so vorsieht.

Neben den Problemen die joe schon genannt hat, dürftest Du noch über Ganzzahldivision stolpern: 15*45/100 ergibt 6 und nicht 6.75 weil bei der Division von zwei ganzen Zahlen auch wieder eine ganze Zahl herauskommt. Um dieses Problem zu verhindern kannst Du eine Zahl als Gleitkommazahl schreiben, zum Beispiel 100.0, oder ganz am Anfang als ersten ``import`` folgendes schreiben:

Code: Alles auswählen

from __future__ import division
Dann würde ich noch dringend empfehlen die Initialisierung von Oberklassen als aller erstes in den Unterklassen zu machen und nicht am Ende. Sonst kann es passieren das die Initialisierung der Oberklasse die Änderungen überschreibt, die Du vor dem Aufruf machst.


@joe: <Erbsenzählermodus>Keine der Klassen hat einen ctor, die haben alle (bis auf eine) nur die Initialisierungsmethode. Ein ctor würde in Python `__new__()` heissen.</Erbsenzählermodus>

Davon mal abgesehen dürfte ein Python-Neuling nichts mit `ctor` anzufangen wissen, wenn er nicht schon C++ Erfahrung hat. ;-)
Olliminatore
User
Beiträge: 55
Registriert: Montag 30. Mai 2005, 16:03
Wohnort: schönsten Stadt Deutschlands
Kontaktdaten:

Ok genug mit den Tips, mich würde interessieren welche Klasse er ist. Ich hätte auch gern Python in der Schule gehabt. :evil:
Ihr seit ja ziemlich fix in der Schule (nach 2 Wochen schon selbst classen erstellen, wenn ich richtig gelesen habe)
Wird bei alles kleinschrift also wenigsten der allererste Gross geschrieben?

*man hatte ich heute wieder'n schlechten Tag*
[size=84][url=http://de.wikipedia.org/wiki/Jamba]Love Jamba[/url] <!--Olliminatore-->input<?/> [url=http://www.spreeblick.com/blog/index.php?p=324]Boycott Jamba[/url][code]def olliminiert(optimiert, eliminiert, terminiert):[/code][/size]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Olliminatore hat geschrieben:Ok genug mit den Tips, mich würde interessieren welche Klasse er ist. Ich hätte auch gern Python in der Schule gehabt. :evil:
12. Klasse in Hessen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Olliminatore
User
Beiträge: 55
Registriert: Montag 30. Mai 2005, 16:03
Wohnort: schönsten Stadt Deutschlands
Kontaktdaten:

[OT]
Ich wollte mich noch bei allen Beteiligten Entschuldigen. (hatte an dem Tag wohl ein Bier zuviel getrunke)
Es steht natürlich jedem frei zu Antworten, und sein Wissen der Allgemeinheit zugute kommen zu lassen. (War auch nicht so ernst gemeint und bin zu diesem Thema auch relativ neutral)

@Leonidas
Langsam glaube ich du weißt alles. (ich will jetzt nicht näher aufs Detail gehen) :P

In diesem Sinne, Allen fröhliche Weihnacht! :)

Spam Ende
[/OT]
[size=84][url=http://de.wikipedia.org/wiki/Jamba]Love Jamba[/url] <!--Olliminatore-->input<?/> [url=http://www.spreeblick.com/blog/index.php?p=324]Boycott Jamba[/url][code]def olliminiert(optimiert, eliminiert, terminiert):[/code][/size]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Olliminatore hat geschrieben:@Leonidas
Langsam glaube ich du weißt alles. (ich will jetzt nicht näher aufs Detail gehen) :P
Hehe, wäre schon wenns so wäre. In Wahrheit hat er mich splsah per ICQ angeredet (kommt davon wenn man seine ICQ UIN öffentlich hat) und mir erzählt dass er in der 12. Klasse ist und gefragt, ob ich aus Hessen bin. Damit ist der Zaubertrick enthüllt, hehe :idea: .
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten