Fehler in Berechnung

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
Logaff
User
Beiträge: 3
Registriert: Donnerstag 9. September 2010, 18:59

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^^
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.
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

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)]
Logaff
User
Beiträge: 3
Registriert: Donnerstag 9. September 2010, 18:59

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?
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]
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
Antworten