Seite 1 von 1

Fehler in Berechnung

Verfasst: Donnerstag 9. September 2010, 19:10
von Logaff
Hio,
ich habe folgenes Problem:
Bei meinem Programm werden aus irgendeinen Grund die Wahrscheinlichkeiten nicht berechnet obwohl durch Tests die variable: ende noch direkt vor den berechnungen blegt ist und vom typ int ist-.- hat jmd ne idee warum das so ist?

tipps zum styl wären auch nett^^ ist nemlich mehr oder weniger mein ersten programm^^

Re: Fehler in Berechnung

Verfasst: Donnerstag 9. September 2010, 19:28
von BlackJack
@Logaff: Es gibt einen Unterschied bei der Division zwischen Fliesskommazahlen und ganzen Zahlen. Bei der ganzzahligen Division kommt auch wieder nur ein ganzzahliger Wert heraus:

Code: Alles auswählen

In [564]: 10 / 20
Out[564]: 0

In [565]: 10.0 / 20
Out[565]: 0.5
Wenn man anfängt Variablennamen durchzunummerieren, will man in der Regel nur einen Namen verwenden, den man an eine Liste bindet.

`gesamt` wird nicht verwendet.

Wenn man vor Eintritt in eine Schleife bereits weiss, wie oft sie wiederholt wird, ist eine ``for``-Schleife das Mittel der Wahl.

Re: Fehler in Berechnung

Verfasst: Donnerstag 9. September 2010, 19:29
von DaMutz

Code: Alles auswählen

(z1/ende)*100
schreibe stattdessen

Code: Alles auswählen

100.0 * z1 / ende
denn sonst machst du eine Integerdivision (mit Python <3.0).

Weiter willst du alle Variablen mit Zahlen, ersetzen durch Listen oder ähnliches. Dadurch verkleinert sich dein Programm auf ca 1/3.
Die Berechnung der Wahrscheinlichkeiten ist dann in einer Zeile erledigt (sicher noch Verbesserungswürdig):

Code: Alles auswählen

#Wahrscheinlichkeiten berechnung WK= zx/ende*100
wkz = [100.0 * z[i] / ende for i in range(13)]

Re: Fehler in Berechnung

Verfasst: Donnerstag 9. September 2010, 19:31
von Logaff
ja gesamt war nur nen überbleibsel meines experiments^^
stimmt ist ja logisch als division muss ja nichts ganzen rauskommen, is klar ^^ wieso wird das eig nich automatisch gemacht?

edit: wo ist das Problem mit der Integerdivision?

Re: Fehler in Berechnung

Verfasst: Donnerstag 9. September 2010, 19:33
von BlackJack
@DaMutz: Ist in der Tat noch verbesserungswürdig. Das `i` ist doch überflüssig:

Code: Alles auswählen

wkz = [100.0 * n / ende for n in z]

Re: Fehler in Berechnung

Verfasst: Donnerstag 9. September 2010, 22:16
von Darii
Logaff hat geschrieben:stimmt ist ja logisch als division muss ja nichts ganzen rauskommen, is klar ^^ wieso wird das eig nich automatisch gemacht?
Logisch ist an dem Verhalten aber so oder so nicht. Gleitkommazahlen decken nicht alle Rationalen Zahlen ab. Und 1/2 ist auch nicht 0. Am korrektesten wäre es vermutlich, wenn bei 1 / 2 ein Bruch rauskommen würde.