Seite 1 von 1
Python und Pythagoras
Verfasst: Montag 23. Juni 2003, 14:06
von Glamdring
Ich mein zwar die Frage schonmal gepostet zu haben aber hier ist mein Problem:
Code: Alles auswählen
from math import *
class Dreieck:
def a(self):
if "c" in gegeben and "p" in gegeben and "a" not in gegeben:
self.a_hoch2 = long(self.p) * long(self.c)
self.a = sqrt(self.a_hoch2)
gegeben.append("a")
return "a = %s" %(self.a)
def b(self):
if "c" in gegeben and "q" in gegeben and "b" not in gegeben:
b_hoch2 = long(self.q) * long(self.c)
self.b = sqrt(self.b_hoch2)
gegeben.append("b")
return "b = %s" %(self.b)
def c(self):
if "a" in gegeben and "b" in gegeben and "c" not in gegeben:
self.c_hoch2 = (self.a * self.a) + (self.b * self.b)
self.c = sqrt(self.c_hoch2)
gegeben.append("c")
return "c = %s" %(self.c)
elif "p" in gegeben and "q" in gegeben and "c" not in gegeben:
self.c = (long(self.p) + long(self.q))
gegeben.append("c")
return "c = %s" %(self.c)
def h(self):
if "p" in gegeben and "q" in gegeben and "h" not in gegeben:
self.h_hoch2 = long(self.p) * long(self.q)
self.h = sqrt(self.h_hoch2)
gegeben.append("h")
return "h = %s" %(self.h)
def p(self):
if "c" in gegeben and "q" in gegeben and "p" not in gegeben:
self.p = long(self.c) - long(self.q)
gegeben.append("p")
return "p = %i" %(self.p)
else:
pass
def q(self):
if "c" in gegeben and "p" in gegeben and "q" not in gegeben:
self.q = long(self.c) - long(self.p)
gegeben.append("q")
return "q = %s" %(self.q)
def anfang(self):
self.a()
self.b()
self.c()
self.h()
self.p()
self.q()
def __init__(self, *geg1):
global gegeben
gegeben = []
if "p" in geg1:
self.p = raw_input("Wert fuer p:")
long(self.p)
print self.p
gegeben.append("p")
if "q" in geg1:
self.q = raw_input("Wert fuer q:")
long(self.q)
print self.q
gegeben.append("q")
if "a" in geg1:
self.a = raw_input("Wert fuer a:")
long(self.a)
gegeben.append("a")
if "b" in geg1:
self.b = raw_input("Wert fuer b:")
long(self.b)
gegeben.append("b")
if "c" in geg1:
self.c = raw_input("Wert fuer c:")
long(self.c)
gegeben.append("c")
if "h" in geg1:
self.h = raw_input("Wert fuer h:")
long(self.h)
gegeben.append("h")
print gegeben
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
Wenn ich dann eine Standardklasse erzeuge ums auszuprobieren, z.B. so:
und dann p und q jeweils den Wert 3 gebe
Dann kommt folgende Fehlermeldung:
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pythagoras.py", line 89, in ?
abc = Dreieck("p", "q")
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pythagoras.py", line 81, in __init__
self.anfang()
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pythagoras.py", line 49, in anfang
self.p()
TypeError: 'str' object is not callable
(Is eh wieder son noob Fehler wie sonst auch immer)
Danke für die Hilfe
Glamdring
[/code]
Re: Python und Pythagoras
Verfasst: Montag 23. Juni 2003, 14:35
von Voges
Hallo!
Du darfst Methoden und Datenfeldern nicht identische Namen geben. Vor self.p = raw_input("Wert fuer p:") zeigte self.p auf eine Methode, danach auf einen String. Und der Versuch, den String wie eine Funktion/Methode aufzurufen, hat dann diese Fehlermeldung zur Folge.
Jan
Verfasst: Donnerstag 26. Juni 2003, 20:43
von Glamdring
Danke, war im Urlaub
Verfasst: Mittwoch 2. Juli 2003, 16:00
von Glamdring
Ich hab ma weiter gemacht und wollte die Eingabe komfortabler machen.
Mein Code sieht so aus:
Code: Alles auswählen
from math import *
from Tkinter import *
def send():
global a
global b
global c
global q
global p
global h
global ac
global bc
global cc
global pc
global qc
global hc
ac = ''
bc = ''
cc = ''
pc = ''
qc = ''
hc = ''
a = e01.get()
if a != '':
ac = "a"
b = e02.get()
if b != '':
bc= "b"
c = e03.get()
if c != '':
cc = "c"
p = e04.get()
if p != '':
pc = "p"
q = e05.get()
if q != '':
qc = "q"
h = e06.get()
if h != '':
hc = "h"
abc = Dreieck(ac, bc, cc, pc, qc, hc)
def dialog():
main = Tk()
l01 = Label(main, text="Bitte tragen sie die Werte fuer die gegebenen Seiten ein, die nicht gegebenen lassen sie bitte frei")
l01.pack()
l02 = Label(main, text="Wert fuer a:")
l02.pack()
global e01
e01 = Entry(main)
e01.pack()
l03 = Label(main, text="Wert fuer b:")
l03.pack()
global e02
e02 = Entry(main)
e02.pack()
l04 = Label(main, text="Wert fuer c:")
l04.pack()
global e03
e03 = Entry(main)
e03.pack()
l05 = Label(main, text="Wert fuer p:")
l05.pack()
global e04
e04 = Entry(main)
e04.pack()
l06 = Label(main, text="Wert fuer q:")
l06.pack()
global e05
e05 = Entry(main)
e05.pack()
l07 = Label(main, text="Wert fuer h:")
l07.pack()
global e06
e06 = Entry(main)
e06.pack()
b01 = Button(main, text="Senden", command = send)
b01.pack()
class Dreieck:
def aq(self):
if "c" in gegeben and "p" in gegeben and "a" not in gegeben:
self.a_hoch2 = float(self.pe) * float(self.ce)
self.ae = sqrt(self.a_hoch2)
gegeben.append("a")
print "a = %s" %(self.ae)
elif "c" in gegeben and "b" in gegeben and "a" not in gegeben:
self.a_hoch2 = (float(self.ce) * float(self.ce)) - (float(self.be) * float(self.be))
self.ae = sqrt(self.a_hoch2)
gegeben.append("a")
print "a = %s" %(self.ae)
def bq(self):
if "c" in gegeben and "q" in gegeben and "b" not in gegeben:
self.b_hoch2 = float(self.qe) * float(self.ce)
self.be = sqrt(self.b_hoch2)
gegeben.append("b")
print "b = %s" %(self.be)
elif "c" in gegeben and "a" in gegeben and "b" not in gegeben:
self.b_hoch2 = (float(self.ce) * float(self.ce)) - (float(self.ae) * float(self.ae))
self.be = sqrt(self.b_hoch2)
gegeben.append("b")
print "b = %s" %(self.be)
def cq(self):
if "a" in gegeben and "b" in gegeben and "c" not in gegeben:
self.c_hoch2 = (float(self.ae) * float(self.ae)) + (float(self.be) * float(self.be))
self.ce = sqrt(self.c_hoch2)
gegeben.append("c")
print "c = %s" %(self.ce)
elif "p" in gegeben and "q" in gegeben and "c" not in gegeben:
self.ce = float(self.qe) + float(self.pe)
gegeben.append("c")
print "c = %s" %(self.ce)
elif "b" in gegeben and "q" in gegeben and "c" not in gegeben:
self.ce = (float(self.be) * float(self.be)) / float(self.qe)
gegeben.append("c")
print "c = %s" %(self.ce)
def hq(self):
if "p" in gegeben and "q" in gegeben and "h" not in gegeben:
self.h_hoch2 = float(self.pe) * float(self.qe)
self.he = sqrt(self.h_hoch2)
gegeben.append("h")
print "h = %s" %(self.he)
def pq(self):
if "c" in gegeben and "q" in gegeben and "p" not in gegeben:
self.pe = float(self.ce) - float(self.qe)
gegeben.append("p")
print "p = %i" %(self.pe)
elif "c" in gegeben and "a" in gegeben and "p" not in gegeben:
self.pe = (float(self.ae) * float(self.ae)) / float(self.ce)
gegeben.append("p")
print "p = %s" %(self.pe)
elif "h" in gegeben and "q" in gegeben and "p" not in gegeben:
self.pe = (float(self.he) * float(self.he)) / float(self.qe)
gegeben.append("p")
print "p = %s" %(self.pe)
def qq(self):
if "c" in gegeben and "p" in gegeben and "q" not in gegeben:
self.qe = float(self.ce) - float(self.pe)
gegeben.append("q")
print "q = %s" %(self.qe)
elif "c" in gegeben and "b" in gegeben and "q" not in gegeben:
self.qe = (float(self.be) * float(self.be)) / float(self.ce)
gegeben.append("q")
print "q = %s" %(self.qe)
elif "p" in gegeben and "h" in gegeben and "q" not in gegeben:
self.qe = (float(self.he) * float(self.he)) / float(self.pe)
gegeben.append("q")
print "q = %s" %(self.qe)
def anfang(self):
self.aq()
self.bq()
self.cq()
self.hq()
self.pq()
self.qq()
def __init__(self, *geg1):
global gegeben
gegeben = []
if ac:
self.ae = ac
float(self.ae)
gegeben.append("a")
if bc:
self.be = bc
float(self.be)
gegeben.append("b")
if cc:
self.ce = cc
float(self.ce)
gegeben.append("c")
if pc:
self.pe = pc
float(self.pe)
gegeben.append("p")
if qc:
self.qe = qc
float(self.qe)
gegeben.append("q")
if hc:
self.he = hc
float(self.he)
gegeben.append("h")
print geg1
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
nochma = raw_input("Noch eine Aufgabe? j/n")
if nochma == "j":
eingeben()
dialog()
Und das ist der Fehler
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
return apply(self.func, args)
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 40, in send
global h
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 170, in __init__
self.p()
ValueError: invalid literal for float(): p
Kann mir einer helfen und sagen wieso Python ein p floaten will ???
Gruß Glamdring
p.s: Ich blick auch nur schwer durch den Code durch, liegt vielleicht daran, dass die Variablennamen so schlecht sind, hab aber keine anderen Ideen.
Verfasst: Mittwoch 2. Juli 2003, 16:24
von Voges
Hallo!
Glamdring hat geschrieben:Code: Alles auswählen
Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 170, in __init__
self.p()
Dein Code enthält gar kein
self.p() und ich bekomme die Fehlermeldung auch nicht. Bist Du sicher, den richtigen Code ausgeführt zu haben?
Jan
Verfasst: Mittwoch 2. Juli 2003, 16:56
von Glamdring
Ups, ich hatte vergessen zu sagen, dass ich, als Beispiel p und q den Wert 3 gegeben habe, aber es ist der Code und bei mir der Fehler
Und def Fehler ging so:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
return apply(self.func, args)
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 40, in send
abc = Dreieck(ac, bc, cc, pc, qc, hc)
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 170, in __init__
float(self.pe)
ValueError: invalid literal for float(): p
Gruß
Glamdring
Verfasst: Freitag 4. Juli 2003, 14:39
von Testname
Boah ist das kompliziert, wer solln da durchblicken
Verfasst: Freitag 4. Juli 2003, 15:27
von Glamdring
@ Testname: Ich lass das so stehen, stimmt nämlich
@all:
Ich hab den Fehler oben gefunden und weiter gemacht, das Programm soll auf Wunsch eine HTML Datei mit den Ergebnissen erstellen.
Code: Alles auswählen
from math import *
from Tkinter import *
from tkFileDialog import *
def send():
global a
global b
global c
global q
global p
global h
global v
v = v.get()
a = ''
b = ''
c = ''
p = ''
q = ''
h = ''
a = e01.get()
""" if a != '':
ac = "a"""
b = e02.get()
""" if b != '':
bc= "b"""
c = e03.get()
""" if c != '':
cc = "c"""
p = e04.get()
""" if p != '':
pc = "p"""
q = e05.get()
""" if q != '':
qc = "q"""
h = e06.get()
"""if h != '':
hc = "h"""
abc = Dreieck(a, b, c, h, p, q)
def dialog():
main = Tk()
l00 = Label(main, text="In welcher Ausgabeform wollen sie die Ergebnisse haben?")
l00.pack()
global v
v = IntVar(main)
global e1
e1 = ""
r00 = Radiobutton(main, text="HTML", variable = v, value = "1").pack()
r00 = Radiobutton(main, text="Ausgabe", variable = v, value = "0").pack()
l1 = Label(main, text="Ueberschrift (nur falls Ausgabeform HTML sein soll)")
l1.pack()
e1 = Entry(main).pack()
l01 = Label(main, text="Bitte tragen sie die Werte fuer die gegebenen Seiten ein, die nicht gegebenen lassen sie bitte frei")
l01.pack()
l02 = Label(main, text="Wert fuer a:")
l02.pack()
global e01
e01 = Entry(main)
e01.pack()
l03 = Label(main, text="Wert fuer b:")
l03.pack()
global e02
e02 = Entry(main)
e02.pack()
l04 = Label(main, text="Wert fuer c:")
l04.pack()
global e03
e03 = Entry(main)
e03.pack()
l05 = Label(main, text="Wert fuer p:")
l05.pack()
global e04
e04 = Entry(main)
e04.pack()
l06 = Label(main, text="Wert fuer q:")
l06.pack()
global e05
e05 = Entry(main)
e05.pack()
l07 = Label(main, text="Wert fuer h:")
l07.pack()
global e06
e06 = Entry(main)
e06.pack()
b01 = Button(main, text="Senden", command = send)
b01.pack()
class Dreieck:
def aq(self):
if "c" in gegeben and "p" in gegeben and "a" not in gegeben:
self.a_hoch2 = float(self.pe) * float(self.ce)
self.ae = sqrt(self.a_hoch2)
gegeben.append("a")
# print "a = %s" %(self.ae)
elif "c" in gegeben and "b" in gegeben and "a" not in gegeben:
self.a_hoch2 = (float(self.ce) * float(self.ce)) - (float(self.be) * float(self.be))
self.ae = sqrt(self.a_hoch2)
gegeben.append("a")
# print "a = %s" %(self.ae)
def bq(self):
if "c" in gegeben and "q" in gegeben and "b" not in gegeben:
self.b_hoch2 = float(self.qe) * float(self.ce)
self.be = sqrt(self.b_hoch2)
gegeben.append("b")
# print "b = %s" %(self.be)
elif "c" in gegeben and "a" in gegeben and "b" not in gegeben:
self.b_hoch2 = (float(self.ce) * float(self.ce)) - (float(self.ae) * float(self.ae))
self.be = sqrt(self.b_hoch2)
gegeben.append("b")
# print "b = %s" %(self.be)
def cq(self):
if "a" in gegeben and "b" in gegeben and "c" not in gegeben:
self.c_hoch2 = (float(self.ae) * float(self.ae)) + (float(self.be) * float(self.be))
self.ce = sqrt(self.c_hoch2)
gegeben.append("c")
# print "c = %s" %(self.ce)
elif "p" in gegeben and "q" in gegeben and "c" not in gegeben:
self.ce = float(self.qe) + float(self.pe)
gegeben.append("c")
# print "c = %s" %(self.ce)
elif "b" in gegeben and "q" in gegeben and "c" not in gegeben:
self.ce = (float(self.be) * float(self.be)) / float(self.qe)
gegeben.append("c")
# print "c = %s" %(self.ce)
def hq(self):
if "p" in gegeben and "q" in gegeben and "h" not in gegeben:
self.h_hoch2 = float(self.pe) * float(self.qe)
self.he = sqrt(self.h_hoch2)
gegeben.append("h")
#print "h = %s" %(self.he)
def pq(self):
if "c" in gegeben and "q" in gegeben and "p" not in gegeben:
self.pe = float(self.ce) - float(self.qe)
gegeben.append("p")
# print "p = %i" %(self.pe)
elif "c" in gegeben and "a" in gegeben and "p" not in gegeben:
self.pe = (float(self.ae) * float(self.ae)) / float(self.ce)
gegeben.append("p")
# print "p = %s" %(self.pe)
elif "h" in gegeben and "q" in gegeben and "p" not in gegeben:
self.pe = (float(self.he) * float(self.he)) / float(self.qe)
gegeben.append("p")
# print "p = %s" %(self.pe)
def qq(self):
if "c" in gegeben and "p" in gegeben and "q" not in gegeben:
self.qe = float(self.ce) - float(self.pe)
gegeben.append("q")
# print "q = %s" %(self.qe)
elif "c" in gegeben and "b" in gegeben and "q" not in gegeben:
self.qe = (float(self.be) * float(self.be)) / float(self.ce)
gegeben.append("q")
# print "q = %s" %(self.qe)
elif "p" in gegeben and "h" in gegeben and "q" not in gegeben:
self.qe = (float(self.he) * float(self.he)) / float(self.pe)
gegeben.append("q")
#print "q = %s" %(self.qe)
def anfang(self):
self.aq()
self.bq()
self.cq()
self.hq()
self.pq()
self.qq()
def __init__(self, *geg1):
global gegeben
gegeben = []
if a:
self.ae = a
float(self.ae)
gegeben.append("a")
if b:
self.be = b
float(self.be)
gegeben.append("b")
if c:
self.ce = c
float(self.ce)
gegeben.append("c")
if p:
self.pe = p
float(self.pe)
gegeben.append("p")
if q:
self.qe = q
float(self.qe)
gegeben.append("q")
if h:
self.he = h
float(self.he)
gegeben.append("h")
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.ausgabe()
nochma = raw_input("Noch eine Aufgabe? j/n")
if nochma == "j":
eingeben()
def ausgabe(self):
if v == 1:
path = asksaveasfilename()
hallo = open(path, "a")
try:
self.narse = e1.get()
except:
self.narse = ""
y = "<TR><TD>c</TD><TD>=</TD><TD>%s</TD></TR><TR><TD>p</TD><TD>=</TD><TD>%s</TD></TR>"
z = "<BR><BR><P ALIGN=\"right\">%s</P><BR><BR><TABLE><TR><TD>a</TD><TD>=</TD><TD>%s</TD></TR><TR><TD>b</TD><TD>=</TD><TD>%s</TD></TR>"
hallo.write(z + y +"<TR><TD>q</TD><TD>=</TD><TD>%s</TD></TR><TR><TD>h</TD><TD>=</TD><TD>%s</TD></TR>" %(self.narse, self.ae, self.be, self.ce, self.pe, self.qe, self.he))
dialog()
Wenn ich HTML ja auswähle und das Titel Feld leer lasse und p und q 3 gebe und als HTML datei test.html auf meinem Desktop übergebe kommt folgender Fehler:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
return apply(self.func, args)
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 37, in send
abc = Dreieck(a, b, c, h, p, q)
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 194, in __init__
self.ausgabe()
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 208, in ausgabe
hallo.write(z + y +"<TR><TD>q</TD><TD>=</TD><TD>%s</TD></TR><TR><TD>h</TD><TD>=</TD><TD>%s</TD></TR>" %(self.narse, self.ae, self.be, self.ce, self.pe, self.qe, self.he))
TypeError: not all arguments converted
Ich hoffe juemand blickt durch
Glamdring
Verfasst: Freitag 4. Juli 2003, 15:58
von Voges
Glamdring hat geschrieben:Code: Alles auswählen
hallo.write(z + y +"<TR><TD>q</TD><TD>=</TD><TD>%s</TD></TR><TR><TD>h</TD><TD>=</TD><TD>%s</TD></TR>" %(self.narse, self.ae, self.be, self.ce, self.pe, self.qe, self.he))
TypeError: not all arguments converted
Das bedeutet, das einer der Argumente vom Typ her nicht zum Formatierungscode passt. Du scheinst ausschließlich %s zu benutzen, d.h. mindestens eins der Argumente ist nicht vom Typ string und erzeugt somit diese Fehlermeldung.
Jan
Verfasst: Freitag 4. Juli 2003, 16:48
von Glamdring
@ Voges: Danke, habs geändert
!
@ all:
Muss leida noch sohn Code reinsetzen.
Code: Alles auswählen
rom math import *
from Tkinter import *
from tkFileDialog import *
def send():
global a
global b
global c
global q
global p
global h
global v
v = v.get()
a = 0.0
b = 0.0
c = 0.0
p = 0.0
q = 0.0
h = 0.0
a = e01.get()
b = e02.get()
c = e03.get()
p = e04.get()
q = e05.get()
h = e06.get()
abc = Dreieck(a, b, c, h, p, q)
def dialog():
main = Tk()
l00 = Label(main, text="In welcher Ausgabeform wollen sie die Ergebnisse haben?")
l00.pack()
global v
v = IntVar(main)
global e1
e1 = ""
r00 = Radiobutton(main, text="HTML", variable = v, value = "1").pack()
r00 = Radiobutton(main, text="Ausgabe", variable = v, value = "0").pack()
l1 = Label(main, text="Ueberschrift (nur falls Ausgabeform HTML sein soll)")
l1.pack()
e1 = Entry(main).pack()
l01 = Label(main, text="Bitte tragen sie die Werte fuer die gegebenen Seiten ein, die nicht gegebenen lassen sie bitte frei")
l01.pack()
l02 = Label(main, text="Wert fuer a:")
l02.pack()
global e01
e01 = Entry(main)
e01.pack()
l03 = Label(main, text="Wert fuer b:")
l03.pack()
global e02
e02 = Entry(main)
e02.pack()
l04 = Label(main, text="Wert fuer c:")
l04.pack()
global e03
e03 = Entry(main)
e03.pack()
l05 = Label(main, text="Wert fuer p:")
l05.pack()
global e04
e04 = Entry(main)
e04.pack()
l06 = Label(main, text="Wert fuer q:")
l06.pack()
global e05
e05 = Entry(main)
e05.pack()
l07 = Label(main, text="Wert fuer h:")
l07.pack()
global e06
e06 = Entry(main)
e06.pack()
b01 = Button(main, text="Senden", command = send)
b01.pack()
class Dreieck:
def aq(self):
if "c" in gegeben and "p" in gegeben:
self.a_hoch2 = float(self.pe) * float(self.ce)
self.ae = sqrt(self.a_hoch2)
gegeben.append("a")
elif "c" in gegeben and "b" in gegeben:
self.a_hoch2 = (float(self.ce) * float(self.ce)) - (float(self.be) * float(self.be))
self.ae = sqrt(self.a_hoch2)
def bq(self):
if "c" in gegeben and "q" in gegeben:
self.b_hoch2 = float(self.qe) * float(self.ce)
self.be = sqrt(self.b_hoch2)
gegeben.append("b")
elif "c" in gegeben and "a" in gegeben:
self.b_hoch2 = (float(self.ce) * float(self.ce)) - (float(self.ae) * float(self.ae))
self.be = sqrt(self.b_hoch2)
gegeben.append("b")
def cq(self):
if "a" in gegeben and "b" in gegeben:
self.c_hoch2 = (float(self.ae) * float(self.ae)) + (float(self.be) * float(self.be))
self.ce = sqrt(self.c_hoch2)
gegeben.append("c")
elif "p" in gegeben and "q" in gegeben:
self.ce = float(self.qe) + float(self.pe)
gegeben.append("c")
elif "b" in gegeben and "q" in gegeben:
self.ce = (float(self.be) * float(self.be)) / float(self.qe)
gegeben.append("c")
def hq(self):
if "p" in gegeben and "q" in gegeben:
self.h_hoch2 = float(self.pe) * float(self.qe)
self.he = sqrt(self.h_hoch2)
gegeben.append("h")
def pq(self):
if "c" in gegeben and "q" in gegeben:
self.pe = float(self.ce) - float(self.qe)
gegeben.append("p")
elif "c" in gegeben and "a" in gegeben:
self.pe = (float(self.ae) * float(self.ae)) / float(self.ce)
gegeben.append("p")
elif "h" in gegeben and "q" in gegeben:
self.pe = (float(self.he) * float(self.he)) / float(self.qe)
gegeben.append("p")
def qq(self):
if "c" in gegeben and "p" in gegeben:
self.qe = float(self.ce) - float(self.pe)
gegeben.append("q")
elif "c" in gegeben and "b" in gegeben:
self.qe = (float(self.be) * float(self.be)) / float(self.ce)
gegeben.append("q")
elif "p" in gegeben and "h" in gegeben:
self.qe = (float(self.he) * float(self.he)) / float(self.pe)
gegeben.append("q")
def anfang(self):
self.aq()
self.bq()
self.cq()
self.hq()
self.pq()
self.qq()
def __init__(self, *geg1):
global gegeben
gegeben = []
if a:
self.ae = a
float(self.ae)
gegeben.append("a")
if b:
self.be = b
float(self.be)
gegeben.append("b")
if c:
self.ce = c
float(self.ce)
gegeben.append("c")
if p:
self.pe = p
float(self.pe)
gegeben.append("p")
if q:
self.qe = q
float(self.qe)
gegeben.append("q")
if h:
self.he = h
float(self.he)
gegeben.append("h")
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.ausgabe()
nochma = raw_input("Noch eine Aufgabe? j/n")
if nochma == "j":
dialog()
def ausgabe(self):
if v == 1:
path = asksaveasfilename()
hallo = open(path, "a")
try:
self.narse = e1.get()
except:
self.narse = ""
y = "<TR><TD>c</TD><TD>=</TD><TD>%f</TD></TR><TR><TD>p</TD><TD>=</TD><TD>%f</TD></TR>"
z = "<BR><BR><P ALIGN=\"right\">%f</P><BR><BR><TABLE><TR><TD>a</TD><TD>=</TD><TD>%f</TD></TR><TR><TD>b</TD><TD>=</TD><TD>%f</TD></TR>"
hallo.write(z + y +"<TR><TD>q</TD><TD>=</TD><TD>%f</TD></TR><TR><TD>h</TD><TD>=</TD><TD>%f</TD></TR>" %(self.narse, self.ae, self.be, self.ce, self.pe, self.qe, self.he))
hallo.close()
elif v == 0:
net = Tk()
a1 = Label(net, text="a = %f" %(a))
b1 = Label(net, text="b = %f" %(b))
c1 = Label(net, text="c = %f" %(c))
p1 = Label(net, text="p = %f" %(p))
q1 = Label(net, text="q = %f" %(q))
h1 = Label(net, text="h = %f" %(h))
a1.pack()
b1.pack()
c1.pack()
p1.pack()
q1.pack()
h1.pack()
dialog()
Ich machs wie oben erklärt.
Fehlermeldung diesmal:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
return apply(self.func, args)
File "C:/Dokumente und Einstellungen/DA niel/Desktop/Python Projekte/Python/Pythagoras/Pyth. 1.2/Pyth(on)agoras12.py", line 25, in send
c = e03.get()
File "C:/Dokumente und Einstellungen/DA niel/Desktop/Python Projekte/Python/Pythagoras/Pyth. 1.2/Pyth(on)agoras12.py", line 178, in __init__
float(self.pe)
File "C:/Dokumente und Einstellungen/DA niel/Desktop/Python Projekte/Python/Pythagoras/Pyth. 1.2/Pyth(on)agoras12.py", line 192, in ausgabe
self.anfang()
TypeError: bad argument type for built-in operation
Hoffe nochmal das einer durchblickt
Gruß
Glamdring
Verfasst: Sonntag 6. Juli 2003, 12:40
von Glamdring
Ich hab wieder weiter gemacht, es gibt nur wenig veränderungen, aber einen neuen Fahler
Code: Alles auswählen
from math import *
from Tkinter import *
from tkFileDialog import *
def send():
global a
global b
global c
global q
global p
global h
global v
v = v.get()
a = 0.0
b = 0.0
c = 0.0
p = 0.0
q = 0.0
h = 0.0
a = e01.get()
b = e02.get()
c = e03.get()
p = e04.get()
q = e05.get()
h = e06.get()
abc = Dreieck(a, b, c, h, p, q)
main.destroy() #macht angeblich main weck
def dialog():
global main
main = Tk()
l00 = Label(main, text="In welcher Ausgabeform wollen sie die Ergebnisse haben?")
l00.pack()
global v
v = IntVar(main)
global e1
e1 = ""
r00 = Radiobutton(main, text="HTML (ausdruckbar)", variable = v, value = "1").pack()
r00 = Radiobutton(main, text="nur Bildschirmansicht", variable = v, value = "0").pack()
l1 = Label(main, text="Ueberschrift (fuer HTML Ausgabeform)")
l1.pack()
e1 = Entry(main).pack()
l01 = Label(main, text="Bitte tragen sie die Werte fuer die gegebenen Seiten ein, die nicht gegebenen lassen sie bitte frei")
l01.pack()
l02 = Label(main, text="Seitenlaenge fuer a:")
l02.pack()
global e01
e01 = Entry(main)
e01.pack()
l03 = Label(main, text="Seitenlaenge fuer b:")
l03.pack()
global e02
e02 = Entry(main)
e02.pack()
l04 = Label(main, text="Seitenlaenge fuer c:")
l04.pack()
global e03
e03 = Entry(main)
e03.pack()
l05 = Label(main, text="Seitenlaenge fuer p:")
l05.pack()
global e04
e04 = Entry(main)
e04.pack()
l06 = Label(main, text="Seitenlaenge fuer q:")
l06.pack()
global e05
e05 = Entry(main)
e05.pack()
l07 = Label(main, text="Seitenlaenge fuer h:")
l07.pack()
global e06
e06 = Entry(main)
e06.pack()
b01 = Button(main, text="Senden", command = send)
b01.pack()
class Dreieck:
def aq(self):
if "c" in gegeben and "p" in gegeben:
self.a_hoch2 = float(self.pe) * float(self.ce)
self.ae = sqrt(self.a_hoch2)
gegeben.append("a")
elif "c" in gegeben and "b" in gegeben:
self.a_hoch2 = (float(self.ce) * float(self.ce)) - (float(self.be) * float(self.be))
self.ae = sqrt(self.a_hoch2)
def bq(self):
if "c" in gegeben and "q" in gegeben:
self.b_hoch2 = float(self.qe) * float(self.ce)
self.be = sqrt(self.b_hoch2)
gegeben.append("b")
elif "c" in gegeben and "a" in gegeben:
self.b_hoch2 = (float(self.ce) * float(self.ce)) - (float(self.ae) * float(self.ae))
self.be = sqrt(self.b_hoch2)
gegeben.append("b")
def cq(self):
if "a" in gegeben and "b" in gegeben:
self.c_hoch2 = (float(self.ae) * float(self.ae)) + (float(self.be) * float(self.be))
self.ce = sqrt(self.c_hoch2)
gegeben.append("c")
elif "p" in gegeben and "q" in gegeben:
self.ce = float(self.qe) + float(self.pe)
gegeben.append("c")
elif "b" in gegeben and "q" in gegeben:
self.ce = (float(self.be) * float(self.be)) / float(self.qe)
gegeben.append("c")
def hq(self):
if "p" in gegeben and "q" in gegeben:
self.h_hoch2 = float(self.pe) * float(self.qe)
self.he = sqrt(self.h_hoch2)
gegeben.append("h")
def pq(self):
if "c" in gegeben and "q" in gegeben:
self.pe = float(self.ce) - float(self.qe)
gegeben.append("p")
elif "c" in gegeben and "a" in gegeben:
self.pe = (float(self.ae) * float(self.ae)) / float(self.ce)
gegeben.append("p")
elif "h" in gegeben and "q" in gegeben:
self.pe = (float(self.he) * float(self.he)) / float(self.qe)
gegeben.append("p")
def qq(self):
if "c" in gegeben and "p" in gegeben:
self.qe = float(self.ce) - float(self.pe)
gegeben.append("q")
elif "c" in gegeben and "b" in gegeben:
self.qe = (float(self.be) * float(self.be)) / float(self.ce)
gegeben.append("q")
elif "p" in gegeben and "h" in gegeben:
self.qe = (float(self.he) * float(self.he)) / float(self.pe)
gegeben.append("q")
def anfang(self):
self.aq()
self.bq()
self.cq()
self.hq()
self.pq()
self.qq()
def __init__(self, *geg1):
global gegeben
gegeben = []
if a:
self.ae = a
float(self.ae)
gegeben.append("a")
if b:
self.be = b
float(self.be)
gegeben.append("b")
if c:
self.ce = c
float(self.ce)
gegeben.append("c")
if p:
self.pe = p
float(self.pe)
gegeben.append("p")
if q:
self.qe = q
float(self.qe)
gegeben.append("q")
if h:
self.he = h
float(self.he)
gegeben.append("h")
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.anfang()
self.ausgabe()
self.nochma()
def ausgabe(self):
if v == 1:
path = asksaveasfilename()
hallo = open(path, "a")
try:
self.narse = e1.get()
except:
self.narse = ""
y = "<TR><TD>c</TD><TD>=</TD><TD>%f</TD></TR><TR><TD>p</TD><TD>=</TD><TD>%f</TD></TR>"
z = "<BR><BR><P ALIGN=\"right\">%f</P><BR><BR><TABLE><TR><TD>a</TD><TD>=</TD><TD>%f</TD></TR><TR><TD>b</TD><TD>=</TD><TD>%f</TD></TR>"
hallo.write(z + y +"<TR><TD>q</TD><TD>=</TD><TD>%f</TD></TR><TR><TD>h</TD><TD>=</TD><TD>%f</TD></TR>" %(self.narse, self.ae, self.be, self.ce, self.pe, self.qe, self.he))
hallo.close()
elif v == 0:
net = Tk()
a1 = Label(net, text="a = %f" %(a))
b1 = Label(net, text="b = %f" %(b))
c1 = Label(net, text="c = %f" %(c))
p1 = Label(net, text="p = %f" %(p))
q1 = Label(net, text="q = %f" %(q))
h1 = Label(net, text="h = %f" %(h))
a1.pack()
b1.pack()
c1.pack()
p1.pack()
q1.pack()
h1.pack()
def nochma(self):
nochma = Tk()
bbb = IntVar(nochma)
l = Lable(nochma, text="Noch eine Aufgabe?")
l.pack()
b = Radiobutton(nochma, text="Ja", variable = bbb, value="1").pack()
bb = Radiobutton(nochma, text="Nein", variable = bbb, value="o").pack()
if bbb.get() == 1:
dialog()
dialog()
Hier die Fehlermeldung:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
return apply(self.func, args)
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 25, in send
main.destroy()
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 180, in __init__
self.ausgabe()
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 196, in ausgabe
a1 = Label(net, text="a = %f" %(a))
TypeError: bad argument type for built-in operation
Gruß
Glamdring
Verfasst: Sonntag 6. Juli 2003, 13:47
von Voges
Glamdring hat geschrieben:Code: Alles auswählen
a1 = Label(net, text="a = %f" %(a))
TypeError: bad argument type for built-in operation
Ein TypeError im Zusammenhang mit der Stringformatierung hattest Du doch erst 3 Beiträge vorher. Einfach mal durch Fehler erlangte Kenntnisse anwenden. Wenn ich mir den Code so angucke, können wir sonst noch tagelang so weitermachen
Jan
Verfasst: Sonntag 6. Juli 2003, 14:17
von Glamdring
Is mir durchaus bewusst, das Problem ist, das a in jedem Fall eine flloat Zahl sein muss. Denn da ich p und q den Wert 3 gegeben habe muss die Funktion aq() in jedem Fall durchlaufen werden. Hier ein die definition von aq():
Code: Alles auswählen
if "c" in gegeben and "p" in gegeben:
self.a_hoch2 = float(self.pe) * float(self.ce)
self.ae = float(sqrt(self.a_hoch2))
gegeben.append("a")
elif "c" in gegeben and "b" in gegeben:
self.a_hoch2 = (float(self.ce) * float(self.ce)) - (float(self.be) * float(self.be))
self.ae = float(sqrt(self.a_hoch2))
gegeben.append("a")
Gruß
Glamdring
Verfasst: Sonntag 6. Juli 2003, 14:33
von Voges
Glamdring hat geschrieben:Denn da ich p und q den Wert 3 gegeben habe muss die Funktion aq() in jedem Fall durchlaufen werden.
Was man gut mit einer print-Anweisung überprüfen könnte. Ich sehe aber nicht, das Du in aq() a überhaupt benutzt.
Jan
Verfasst: Sonntag 6. Juli 2003, 16:18
von Glamdring
Ah, ja bei der Ausgabe mit tk hab ich den Fehler gemacht a mit self.ae zu verwechseln, daher der Fehler.
Aber der andere Fehler bleibt trotz der Änderung erhalten, da ich dort self.ae nicht vergessen hatte und Python self.ae trotzdem es self.aq() durchlaufen hat keine als float Zahl anerkennt.
Gruß
Glamdring
Verfasst: Dienstag 8. Juli 2003, 17:23
von Glamdring
Ich hab das Programm mal stückweise ausprobiert und in ausgabe() folgenden Fehler bekommen:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
return apply(self.func, args)
File "C:/dewbug.py", line 25, in send
e02 = Entry(main)
File "C:/dewbug.py", line 200, in __init__
File "C:/dewbug.py", line 212, in ausgabe
TypeError: bad argument type for built-in operation
was noch komisch ist:
Start/Ausführen gehe und dann cmd und dann python und den Pfad zu der Datei kam einfach garnichts, komisch oder nicht?
Hoffentlich kann jemand was damit anfagen
Gruß
Glamdring
Verfasst: Dienstag 8. Juli 2003, 17:55
von Voges
Glamdring hat geschrieben:Start/Ausführen gehe und dann cmd und dann python und den Pfad zu der Datei kam einfach garnichts, komisch oder nicht?
Eigentlich nicht, denn Dein Code enthält gar keinen mainloop()-Aufruf und rauscht einfach durch. Dass IDLE da sein eigenes Süppchen kocht, ist wieder ein Argument gegen diese IDE.
Zur Fehlermeldung: Die scheint immernoch Murks anzuzeigen. Zumindest die Zeilennummern könnten aber richtig sein. Guck Dir also die Zeile 212 an. Du wirst ums Debuggen nicht herum kommen. Wie geht das? Zum Beispiel kannst Du die Variablen, die in der Zeile verwendet werden, in einer Zeile davor mit print testweise mal ausgeben. Dann siehst Du sofort, welche davon nicht dem erwarteten Typ entspricht. Dann musst Du dem Programmlauf "rückschreitend" verfolgen, um die Stelle zu finden, an der ein falscher Typ zugewiesen wurde. Immer mal wieder hier und da print-Anweisungen reinschreiben, um zu sehen ob das Programm an einer Stelle überhaupt vorbeikommt und ob Variablen den erwarteten Wert enthalten.
Du könntest natürlich auch den 'echten' Debugger nehmen, aber das ist etwas anspruchsvoller und verlangt etwas Übung.
Jan
Verfasst: Dienstag 8. Juli 2003, 19:18
von Glamdring
Ich hab den Fehler, aber auch nen neuen.
Der Fehler war, das self.narse non type uns nicht string war.
Dann hab ich wieder weiter gemacht und hab jetzt nen neuen Fehjler, ich nehm aber an, das das an meiner IDLE liegt, da dieser Codeabaschnitt überhaupt nicht aufgerufen wird(falls man HTML als Ausgabeform hat)
Neuer fehler:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
return apply(self.func, args)
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 26, in send
abc = Dreieck(a, b, c, h, p, q)
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 202, in __init__
self.ausgabe()
File "C:\Dokumente und Einstellungen\DA niel\Desktop\Python Projekte\Python\Pythagoras\Pyth. 1.2\Pyth(on)agoras12.py", line 226, in ausgabe
y = "<TR><TD>c</TD><TD>%nbsp;=&</TD><TD>%f</TD></TR><TR><TD>p</TD><TD>=</TD><TD>%f</TD></TR>" %(self.ce, self.pe)
ValueError: unsupported format character 'n' (0x6e) at index 19
Die Ergebnisse werden mir aber richtig zurrückgegeben.
@ Voges: wenn ich beiden Tk aufrufen mainloop gebe stürtzt das Programm ab, darf ich nur ein Fenster als mainloop definieren, das dann schließen und dem anderem mainloop geben?
Gruß Glamdring[/quote]
Verfasst: Dienstag 8. Juli 2003, 19:28
von Dookie
Hi,
Code: Alles auswählen
"<TR><TD>c</TD><TD>%%nbsp;=&</TD><TD>%f</TD></TR><TR><TD>p</TD><TD>=</TD><TD>%f</TD></TR>"
sollte das Problem lösen.
Falls es ned auffällt, das % bei %nbsp; is der Haken.
Gruß
Dookie
Verfasst: Dienstag 8. Juli 2003, 19:45
von Glamdring
Ja, danke für die schnelle Hilfe(scheiss Tippfehler)
Gruß
Glamdring