Seite 1 von 3
Problem bei der Berechnung von Kommazahlen
Verfasst: Donnerstag 19. Mai 2011, 17:29
von Micky2010
Ich habe ein Problem unzwar,
Ich will das bei einer Rechnung eine Kommazahl herauskommt ( nicht wie bei x=25 y=13 Z=x/y rauskommen tut 1) kommt immer diese Meldung: (Ich hab' die Werte über easygui herausgekriegt (AS und AD6 und P = ad6 * 6))
Traceback (most recent call last):
File "...", line 6, in <module>
P2 = P/AS
TypeError: unsupported operand type(s) for /: 'str' and 'str'
ich habs schon so probiert (variablen nehmen wir jetzt mal an haben den Wert AS=25 und AD6 = 13)
P = AD6 * 6
P2 = str(P) / str(AS)
auch schon so
P2 = str(P) / AS
so :
P2 = P / str(AS)
und so:
P2 = P / AS
könnt ihr mir helfen, dass am ende eine Kommazahl eherauskommt? :K
Viele Grüße Micky2010
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Donnerstag 19. Mai 2011, 17:39
von Hyperion
TypeError: unsupported operand type(s) for /: 'str' and 'str'
Die Meldung sagt doch alles. Du hast Strings und musst diese in ein passendes Zahlenformat wandeln. Dazu schau Dir in der Doku die Built-in Functions an.
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Freitag 20. Mai 2011, 13:25
von Micky2010
Wie mache ich das?
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Freitag 20. Mai 2011, 13:34
von /me
Micky2010 hat geschrieben:Wie mache ich das?
Wie du dir die Built-in Functions in der Dokumentation anschauen kannst?
Öffne einen Webbrowser. Gehe auf die Webseite
http://www.python.org. Klicke auf "Documentation". Such die passende Python-Version und klick dort auf "Library Reference". Klicke dort auf "Built-in Functions".
Im
Tutorial ist im 3. Kapitel übrigens ebenfalls die Funktion erwähnt, mit der du z.B. einen String in eine Fließkommazahl verwandeln kannst. Vielleicht solltest du dich wirklich erst einmal im Tutorial etwas weiter durcharbeiten bevor du an jeder Ecke mit einem Problem hängen bleibst.
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Freitag 20. Mai 2011, 13:34
von pillmuncher
Micky2010 hat geschrieben:Hyperion hat geschrieben:[...] schau Dir in der Doku die Built-in Functions an.
Wie mache ich das?
Indem du hier draufklickst:
http://docs.python.org/library/functions.html.
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Samstag 21. Mai 2011, 08:29
von Micky2010
Hab' das Problem gelöst (selber) unzwar mit:
P2 = float(P) / float(AS)
print(P2)
Trotzdem, ihr habt mir sehr geholfen, danke
Frage geschlossen
_______________________________________________________________________________________________________________________
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Samstag 21. Mai 2011, 10:06
von cofi
Vielleicht ist das hier noch hilfreich:
Code: Alles auswählen
In [14]: import locale
In [15]: locale.setlocale(locale.LC_NUMERIC, "de_DE")
Out[15]: 'de_DE'
In [16]: locale.atof('2,3')
Out[16]: 2.2999999999999998
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Sonntag 5. Juni 2011, 18:26
von Micky2010
Die Lösung ist, ich wandle die Strings in int's um.
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Sonntag 5. Juni 2011, 18:51
von /me
Micky2010 hat geschrieben:Die Lösung ist, ich wandle die Strings in int's um.
Wenn du mit Nachkommastellen arbeiten möchtest, dann sollten es vielleicht besser floats sein.
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Montag 6. Juni 2011, 15:21
von Micky2010
Ich meine so, hier der Quelltext:
Code: Alles auswählen
# -*- coding: cp1252 -*-
import easygui # importiert easygui ( Ein Modul)
def Notenberechnung():
pass
easygui.msgbox(msg="Wenn z.b. niemand eine 1 oder eine 5 geschrieben hat, bitte 0 eingeben, sonst funktioniert's nicht!", title="Wichtiger Hinweis")
AS = easygui.enterbox(msg='Bitte Anzahl der Schüler, welche die Arbeit geschrieben haben eingeben', title='Bitte Schüleranzahl eingeben')
AD1 = easygui.enterbox(msg='Bitte Anzahl der Schüler, welche eine 1 in der Arbeit geschrieben haben eingeben', title='Notenanzahl der 1 eingeben')
AD2 = easygui.enterbox(msg='Bitte Anzahl der Schüler, welche eine 2 in der Arbeit geschrieben haben eingeben', title='Notenanzahl der 2 eingeben')
AD3 = easygui.enterbox(msg='Bitte Anzahl der Schüler, welche eine 3 in der Arbeit geschrieben haben eingeben', title='Notenanzahl der 3 eingeben')
AD4 = easygui.enterbox(msg='Bitte Anzahl der Schüler, welche eine 4 in der Arbeit geschrieben haben eingeben', title='Notenanzahl der 4 eingeben')
AD5 = easygui.enterbox(msg='Bitte Anzahl der Schüler, welche eine 5 in der Arbeit geschrieben haben eingeben', title='Notenanzahl der 5 eingeben')
AD6 = easygui.enterbox(msg='Bitte Anzahl der Schüler, welche eine 6 in der Arbeit geschrieben haben eingeben', title='Notenanzahl der 6 eingeben')
# holt die Werte durch easygui
AD1=int(AD1)#wandelt sie in ints um
AD2=int(AD2)
AD3=int(AD3)
AD4=int(AD4)
AD5=int(AD5)
AD6=int(AD6)
P6 = AD6 * 6 # rechnet anzahl der Schüler welche eine 6 geschrieben haben mal 6 wie bei 5,4,3,2,1
P5 = AD5 * 5
P4 = AD4 * 4
P3 = AD3 * 3
P2 = AD2 * 2
P1 = AD1 * 1
Y = int(P1) + int(P2) + int(P3) + int(P4) + int(P5) + int(P6) # rechnet die zuvor errechneten Werte zusammen
DS = float(Y) / float(AS) # rechnet Y durch die Anzahl der Schüler welche die Arbeit geschrieben haben
print(DS) # schreibt DS
if __name__ == '__main__':
Notenberechnung()
Das ist der Code.
Viele Grüße Micky2010
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Montag 6. Juni 2011, 17:47
von CM
Mal abgesehen, daß das eine umständliche Art ist ein gewichtetes Mittel zu berechnen ...
Was ist denn der Typ von P1-P6? Und wieso mußt Du diesen Typ dann in Integer wandeln? Und was wäre wenn AD1-AD6 schon floats wären, würde sich das Ergebnis verändern, würden alle weiteren Umwandlungen weggelassen? Und wenn man schon die Zahl der geschriebenen Arbeiten gesondert eingeben läßt, statt sie zu berechnen: Wäre es dann nicht sinnvoll eine Kontrolle einzubauen, ob die übrigen Nutzerangaben stimmig sind?
Und wozu eine Funktion, die nichts macht, hinter der __name__-Abfrage?
Nur mal so als Anregungen,
Gruß,
Christian
PS Vielleicht wären Funktionen wie 'map' auch mal interessant angeschaut zu werden?

Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Montag 6. Juni 2011, 18:41
von Micky2010
Das mit den Int's mach ich lieber zur Sicherheit, ich könnte es aber auch weglassen und dieser Weg ist der einfachste der mir eingefallen ist.
Viele Grüße Micky2010
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Montag 6. Juni 2011, 19:21
von pillmuncher
"Zur Sicherheit" ein int in ein int wandeln ist wie wenn man mit der Taschenlampe nachschaut, ob die Deckenlampe leuchtet. Außerdem bezog sich CMs Nachfrage nicht auf die Zeile
Code: Alles auswählen
Y = int(P1) + int(P2) + int(P3) + int(P4) + int(P5) + int(P6)
sondern explizit auf die Zeilen
wo du einen String in einen numerischen Typ umwandelst, und da kannst du gleich nach
float umwandeln, statt nach
int. Außerdem solltest du lernen, was es mit
Schleifen und
Listen auf sich hat.
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Montag 6. Juni 2011, 19:41
von /me
pillmuncher hat geschrieben:Außerdem solltest du lernen, was es mit
Schleifen und
Listen auf sich hat.
Etwas konkreter: Wenn man anfängt, Bezeichner durchzunummerieren ist das ein typischer Hinweis darauf, dass man besser eine Liste verwenden sollte.
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Mittwoch 8. Juni 2011, 07:07
von Darii
pillmuncher hat geschrieben:"Zur Sicherheit" ein int in ein int wandeln ist wie wenn man mit der Taschenlampe nachschaut, ob die Deckenlampe leuchtet. Außerdem bezog sich CMs Nachfrage nicht auf die Zeile
Code: Alles auswählen
Y = int(P1) + int(P2) + int(P3) + int(P4) + int(P5) + int(P6)
sondern explizit auf die Zeilen
wo du einen String in einen numerischen Typ umwandelst, und da kannst du gleich nach
float umwandeln, statt nach
int.
Warum sollte man einen Wert, der eine ganze Zahl sein muss besser gleich in eine Fließkommazahl umwandeln?
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Mittwoch 8. Juni 2011, 10:06
von CM
Weil am Ende ein float bei der Division herauskommen soll.
OK, jetzt ist natürlich wichtig zwischen Python 2.x und 3.x zu unterscheiden, aber ich habe mal 2.x unterstellt.
Gruß,
Christian
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Mittwoch 8. Juni 2011, 16:40
von Darii
CM hat geschrieben:Weil am Ende ein float bei der Division herauskommen soll.
OK, jetzt ist natürlich wichtig zwischen Python 2.x und 3.x zu unterscheiden, aber ich habe mal 2.x unterstellt.
Naja, bei 2.x sollte man sowieso immer "from __future__ import division" in einer der ersten Zeilen haben wenn man etwas ausrechnen will. Anders darf man sich sowieso zu Tode debuggen.
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Mittwoch 8. Juni 2011, 21:55
von Hyperion
pillmuncher hat geschrieben:"Zur Sicherheit" ein int in ein int wandeln ist wie wenn man mit der Taschenlampe nachschaut, ob die Deckenlampe leuchtet.
LOL - Deine Erfindung oder ist das ein bekanntes "Gleichnis"?
Notenberechnung die zweite
Verfasst: Montag 8. August 2011, 14:02
von Micky2010
Ich habe das Programm umgeschrieben mit arrays und erstmal ohne easygui, mit inputs.
Code: Alles auswählen
# -*- coding: cp1252 -*-
noten = []
for z in range(1,7):
note = input("Bitte anzahl der "+str(z)+"-er eingeben.(Wenn null dann 0 eingeben):\n")
noten.append(note)
for y in range(0,6):
var = noten[y]
schueler = schueler + var
y_2 = var * (y + 1)
ges_noten = ges_noten + y_2
durchs = ges_noten / float(schueler)
print"Der Durchschnitt ist : %.3f" % durchs
Bitte schreibt eure kritik dazu,
gut ich könnte die fors umbenennen.
LG Micky2010
P.S. kennt jemand ein gutes SQlite tutorial und kann man auch SQL importieren /benutze?
Re: Problem bei der Berechnung von Kommazahlen
Verfasst: Montag 8. August 2011, 14:23
von Hyperion
- wieso codierst Du in diesem kruden Windows-Encoding und nicht in etwas sinnvollem wie utf-8? Es fehlt der Shebang.
- benutzt Du Python3 oder 2? Wenn 2, dann bitte ``raw_input`` nutzen!
- String-Konkatenation mit "+" ist ganz schlecht, per "%"-Operator schon besser, am besten per ``"".format()`` Methode!
- wieso muss die erste Schleife bei "1" anfangen?
- wieso fängt die zweite bei "0" an, wo Du dort wohl die "1" benötigst? Du willst Dort aber auch einfach ``enumerate`` nutzen - dann sparst Du Dir diese Überlegungen

(ok, da solltest Du auch den Start auf "1" setzen)
- ``y`` und ``y_2`` sind sehr schlechte Namen - was soll man mit ``y`` anfangen? Da denkt man eher an eine Koordinate... (``ges_noten`` und vor allem ``durchs`` sind das natürlich auch)
- die Anzahl der Schüler kannst Du einfacher so berechnen:
- die letzte for-Schleife kann man auch durch einen Generator-Ausdruck ersetzen:
Code: Alles auswählen
>>> sum((count*note for count, note in enumerate(noten, 1)))
66
Aber ok, dass muss man als Anfänger nicht

Immerin habe ich Dir schon mal die Verwendung von ``enumerate`` verraten...
- Du verwendest also doch Py2 (hab das ``print`` erst jetzt gesehen). Also beachte die obigen Hinweise!
- Code auf Modulebene - das solltest Du in Funktionen auslagern.
@SQL-Fragen: Für neues Thema bitte einen neuen Thread erstellen. Klar sind mir diese Fragen so auch noch nicht. Also formuliere das am besten in einem separaten Thread noch mal neu
