Warum kommt da immer 0 raus?

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
YourMTTV
User
Beiträge: 7
Registriert: Donnerstag 10. September 2015, 19:30

Code: Alles auswählen

def gettung():
    ges = int(gewinn.get())
    gabe1 = int(s1.get())
    gabe2 = int(s2.get())
    gabe3 = int(s3.get())
    gabe4 = int(s4.get())
    gabe5 = int(s5.get())
    summe = sum([gabe1, gabe2, gabe3, gabe4, gabe5])
    anteil_s1 = gabe1 / summe * 100
    anteil_s2 = gabe2 / summe * 100
    anteil_s3 = gabe3 / summe * 100
    anteil_s4 = gabe4 / summe * 100
    anteil_s5 = gabe5 / summe * 100
    gewinn_s1 = anteil_s1 * ges / 100
    gewinn_s2 = anteil_s2 * ges / 100
    gewinn_s3 = anteil_s3 * ges / 100
    gewinn_s4 = anteil_s4 * ges / 100
    gewinn_s5 = anteil_s5 * ges / 100
    print anteil_s1
Hallo,

ich blick nicht ganz durch. Ich glaub das ist ein mathematischer Fehler oder?

Falls mehr gebraucht wird kann ich auch mehr Code geben.

Danke für Hilfe.

MFG Tom
Zuletzt geändert von cofi am Montag 28. September 2015, 13:51, insgesamt 2-mal geändert.
Grund: Titel wiederhergestellt
YourMTTV
User
Beiträge: 7
Registriert: Donnerstag 10. September 2015, 19:30

Hat sich erledigt
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Du arbeitest mit ganzen Zahlen und bei Operationen auf ganzen Zahlen kommen auch wieder nur ganze Zahlen bei rum. Nutz float wenn du rationale Zahlen (annährend) haben willst.

Du solltest dir darüberhinaus Listen und Schleifen anschauen und diese Nutzen statt deine Variablen durch zu nummerieren.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Bitte unterlasse es in Zukunft deinen Titel oder den Inhalt zu loeschen. Andere haben deine Probleme eventuell auch und koennen so eine Loesung finden.

Zu den Listen und Schleifen:

Code: Alles auswählen

def gettung():
    gesamt = float(gewinn.get())
    gaben = [float(s.get()) for s in [s1, s2, s3, s4, s5]]
    summe = sum(gaben)
    anteile = [(gabe / summe * 100) for gabe in gaben]
    gewinne = [(anteil * gesamt / 100) for anteil in anteile]
Das macht das das doch gleich viel einfacher. Das Konstrukt hier ist uebrigens eine List Comprehension laesst sich aber auch als gewoehnliche Schleife ausschreiben.
BlackJack

@YourMTTV: Wo kommen denn `s1` bis `s5` und `gewinn` her? Werte ausser Konstanten sollten Funktionen und Methoden als Argumente betreten und nicht einfach so ”magisch” aus der ”Umgebung” kommen. Sonst bekommt man sehr undurchsichtigen Code der sich nur sehr schwer testen lässt.

Das `get()` lässt eine GUI vermuten: Da kommt man im Grunde nicht um objektorientierte Programmierung (OOP) herum wenn man das sauber lösen möchte.
Antworten