Python 3.1 Rechner nimmt Rechenoperator nicht an

Pulz

Lieutenant
Registriert
Jan. 2009
Beiträge
597
Tach,

ich schreibe morgen eine Arbeit über Python in Informatik und habe mir einen kleinen Rechner zur Übung gebastelt.
Zuerst soll der nach 2 Zahlen und einem Rechenoperator fragen und dann mit den eingebenen Daten rechnen.

Bei der ersten Funktion hatte ich die Idee, dass das Programm mit if überprüft, welcher Operator eingeben wurde und handelt dann, bei der zweiten Funktion rechnet er nicht, sondern printet nacheinander self.a, self.c und self.b

Beide Funktionen funktionieren nicht.

Könnt ihr mir helfen?

Code:
class Rechner:
    def __init__(self):
        self.a=int(input("zahl 1 eingeben: "))
        self.b=int(input("zahl 2 eingeben: "))
        self.c=input("operator eingeben: ")
    def rechnen(self):
        if self.c==4:
            self.y=self.a + self.b
            print(self.y)


    def rechnen2(self):
        self.x=self.a,self.c,self.b
        print(self.x)




test=Rechner()
test.rechnen()
 
Was genau funktioniert nicht? Die wenigsten werden hier Python 3.1 installiert haben, also wäre eine Problembeschreibung hilfreich.
 
Hier die Ausgabe:
>>>
zahl 1 eingeben: 4
zahl 2 eingeben: 2
operator eingeben: +
>>> ================================ RESTART ================================
>>>
zahl 1 eingeben: 4
zahl 2 eingeben: 2
operator eingeben: +
(4, '+', 2)

Das über dem Restart ist die erste Funktion, nach der Eingabe geschieht also nichts. Bei der zweiten Funktion unter dem Restart werden die drei eingegebenen Zeichen (4, 2 und +) einfach normal ausgegeben.

EDIT: Bei der ersten Funktion soll statt 4 ein + sein. Wenn ich das Programm dann starten möchte, markiert er den Doppelpunkt nach dem + rot und gibt den Fehler "Invalid Syntax" und das Programm startet garnicht, habe vorhin vergessen das wieder zu ändern.
 
Zuletzt bearbeitet:
"self.x=self.a,self.c,self.b" <--- warum soll das überhaupt so funktionieren, wie du es gerne hättest? oO

Ist auch klar, weil du meinst ja das Zeichen plus, das bestimmt irgendwie in Anführungszeichen muss, sonst könnte eine Formel kommen.
Oder wie willst du prüfen, ob eine "a" eingeben wurde?
if self.c == a
soll a jetzt eine Variable sein oder was?


wird irgendwas in die Richtung hier sein
if self.c=='+'
 
Zuletzt bearbeitet:
Ich dachte, dass er dann ordentlich 4 + und 2 nacheinander schreibt und rechnet :p Ich halte mich auch gerade eher an das erste mit dem if, nur möchte er das nichtmal starten :|
 
Und warum sollte eine Rechenoperation mit Kommatas getrennt werden?
ist bei dir auch
x = 1, +, 4 = 5 oder wie?

Nur weil der Compiler (Interpeter) eine Syntax nicht als falsch markiert, heißt das noch lange nicht, dass sie das tut, was man will...
Was ist, wenn man in self.c aber nun was anderes als einen Rechenoperand hat? Was soll dann passieren bei deinem Ausdruck?
 
Wenn ich die Kommatas lösche, wird das wiederum nicht funktionieren, da er das ganze dann als eine einzige Variable nimmt.
Das ganze mit falschen Zeichen und durch 0 teilen kommt später, erstmal soll das Ding ordentlich rechnen.
 
Sag mal spreche ich mit ner Wand?

"Nur weil der Compiler (Interpeter) eine Syntax nicht als falsch markiert, heißt das noch lange nicht, dass sie das tut, was man will..."

Aber mehr werd ich zu dem Thema nicht mehr sagen. Solltest dir vielleicht mal ne Dokumentation zu Python suchen...
 
Jap, ich musste das + einfach in Anführungszeichen setzen, danke!

Beim zweiten funktioniert das wahrscheinlich nicht, weil er das ganze nicht als Rechenfunktion nimmt, sondern als eine Zeichenkette, deswegen ist da auch kein Syntaxfehler. Funktionieren tut es auch nicht, recht hast du.
 
Zuletzt bearbeitet:
noch etwas zur input funktion.
Wenn du strings einlesen möchtest dann kannst du auch raw_input benutzen.
 
Das gibt es seit 3.1 angeblich nicht mehr.
 
aus dem kopf heraus und ohne zu testen.
Versuch mal für funktion 2 folgendes:

def rechner2(self):
self.x=str(self.a) + self.c + str(self.b)
print (eval(self.x))
 
So, leider hat mir die Frage heute nicht geholfen, da etwas komplett anderes dran kam, als ich dachte. Wie soll man es bitte so machen, dass ein eingegebenes Wort auf die Buchstabenanzahl überprüft wird, wobei es nicht mehr als 10 Buchstaben sein dürfen. Alle Buchstaben werden nacheinander in neuen Zeilen geschrieben und daneben, welche Position sie im Wort haben, also 1,2,3 usw.

Das mit den Buchstaben untereinander habe ich mit for gelöst, aber wie geht das mit der Anzahl der Buchstaben und der maximalen Anzahl von 10 Buchstaben? Man kann ja kein String mit einem Int größer/kleiner als nehmen. :S
 
Man kann aber selbst mal eine Python-Dokumentation durchlesen... ich weiß, scheint realitätsfern und undenkbar, aber es ist tatsächlich möglich...
 
Schließlich finde ich es/verstehe es mit meinem jetzigen Wissen.
 
Zurück
Oben