Probleme mit class

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
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

Hallo ,
ich sitze seit 3 Stunden an einen bescheuerten Fehler den ich nicht lösen kann .

Alle 2 Programme die ich bis jetzt gemacht habe laufen wunderbar , nur hier komm eich nicht weiter .

Der Fehler den mir Python sagt ist :


Traceback (most recent call last):
File "/home/torsten/PycharmProjects/Trans_Banking/main.py", line 320, in <module>
kunde5.trans(bekommen,betrag5,verwendung_text,pin_nummer)
File "/home/torsten/PycharmProjects/Trans_Banking/main.py", line 41, in trans
self.kontostand -= betrag
TypeError: unsupported operand type(s) for -=: 'int' and 'str'




Der macht probleme mir den kunde3 zu erstellen.


Euch Frohe Ostern

Code: Alles auswählen



#Klasse

    def trans(self, ziel, betrag, vtext,geheim):
            self.kontostand -= betrag
            self.username = username
            self.verwendung = vtext
            ziel.kontostand += betrag
            self.konto = konto
            ziel.konto = konto
            ziel.verwendung = vtext


            if geheim != self.pin:
                print("Fehler")

            else:




             trans_verbindung = conn()
             trans_cursor = trans_verbindung.cursor()
             trans_cursor.execute(
                "UPDATE bank SET kontostand = %s,verwendung = %s,datum = %s,time = %s WHERE konto = %s",
                (self.kontostand, self.verwendung, welchen_tag(), welche_zeit(), self.konto))
             trans_cursor.execute(
                "UPDATE bank SET kontostand = %s,verwendung = %s,datum = %s,time = %s WHERE konto = %s",
                (ziel.kontostand, ziel.verwendung, welchen_tag(), welche_zeit(), ziel.konto))
             trans_verbindung.commit()
             trans_verbindung.close()

            print(sys())
            sleep(1)
            print(Fore.GREEN + f"Sie haben {ziel.username} {betrag} Euro Überwiesen ")














 print(Fore.YELLOW + "Überweisungen")
        

        geben = input("Bitte geben Sie Ihre Kontonummer ein")
        nehmen = input("Kontonummer des Empfängers")
        betrag = input("Geben Sie den Betrag ein")
        verwendung_text = input("Verwendungszweck")
        pin_nummer = input("Bitte geben Sie Ihre Geheimzahl ein")
        

        verbindung = conn()
        cursor = kto_1.cursor()
        cursor.execute("SELECT username,kontostand,dispo,konto,datum,time,an,von,verwendung,summe,stime,pin FROM bank WHERE konto = %s",(geben,))
        username, kontostand, dispo, konto, datum, time, an,von, verwendung, summe, stime, pin = kto_c.fetchone()
        kunde2 = kunde(username, kontostand, dispo, konto, datum, time, an, von, verwendung, summe, stime, pin)
        verbindung.close()





        abfrage2 = conn()
        cursor2 = kto_abfrage2.cursor()
        cursor2.execute("SELECT username,kontostand,dispo,konto,datum,time,an,von,verwendung,summe,stime,pin FROM bank WHERE konto = %s",(nehmen,))
        username, kontostand, dispo, konto, datum, time, an,von, verwendung, summe, stime, pin = kto_cursor2.fetchone()
       kunde3  = kunde(username, kontostand, dispo, konto, datum, time, an, von, verwendung, summe, stime, pin)
        abfrage2.close()

        kunde3.trans(kunde2,betrag,verwendung_text,pin_nummer)

Benutzeravatar
Dennis89
User
Beiträge: 1503
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

`input` liefert einen String. Und einen String kannst du nicht von einem Integer abziehen.


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

Stimmt , das habe ich übersehen , man bin ich blond .

Dankeschön
Sirius3
User
Beiträge: 18215
Registriert: Sonntag 21. Oktober 2012, 17:20

Das idt nicht der einzige Fehler. Die Einrückungen sind falsch. Das Programm kommt so nicht am Compiler vorbei.
eingerückt wird auch immer mit vier Leerzeichen pro Ebene.
username und konto sind in trans nicht definiert. Es ist ziemlicher Unsinn self.konto und ziel.konto beide mit dem Wert von konto zu überschreiben.
Es ist falsch, erst alle Werte zu ändern und dann erst die Pin zu prüfen.
Es wird dann Fehler und dannach die erfolgte Überweisung ausgegeben.
Was ist das für ein Bankkonto, wo der Verwendungszweck nur für die letzte Transaktion gespeichert ist?
sys ist hoffentlich keine Funktion.
Und alle anderen Fehler wurden schon in deinem anderen Thread zur Genüge diskutiert.
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

Hi ,Ja habe es gestern neu gemacht mit einrückung und den Int gesetzt , passt alles jetzt .



ich habe heute mal versucht es über die Gui zu machen.

Aber irgendwie klappt es nicht.

Weiß da einer Rat ?

Habe mir das so ausgedacht es zu machen .

Code: Alles auswählen


class kunde:
 def __init__(self,username=str,kto=int,kontostand=int):
     self.username = username
     self.kto = kto
     self.kontostand = kontostand







def show(nummer):

 verbindung = conn()
 verbindung_c = verbindung.cursor()
 verbindung_c.execute("SELECT username,konto,kontostand FROM bank WHERE konto = ", nummer)
 username, konto, kontostand = verbindung_c.fetchone()
 konto1 = kunde(username, konto, kontostand)
 verbindung.close()

 print(f"Hallo {konto1.username} Dein Kontostand: {konto1.kontostand} Euro ")





















def main():

  root = tk.Tk()
  root.geometry("800x500")
  root.title("Home Banking App")
  nummer = IntVar(root)



  label_oben = tk.Label(text="Sparda Bank Terminal Center",font=(font_arial(),18))
  label_oben.place(y=25,x=210)
  label_text = tk.Label(root,text="Deine Kontonummer")
  label_text.place(y=180,x=100)
  label_entry = tk.Entry(root,width=25,textvariable=nummer)
  label_entry.place(y=180,x=280)
  label_btn = tk.Button(root,text="Login",command=lambda : show(nummer.get()))
  label_btn.place(y=220,x=400)



Fehler der Kommt

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.12/tkinter/__init__.py", line 1967, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "/home/torsten/PycharmProjects/trans_banking_gui/main.py", line 65, in <lambda>
label_btn = tk.Button(root,text="Login",command=lambda : show(nummer.get()))
^^^^^^^^^^^^^^^^^^
File "/home/torsten/PycharmProjects/trans_banking_gui/main.py", line 23, in show
verbindung_c.execute("SELECT username,konto,kontostand FROM bank WHERE konto = ", nummer)
File "/home/torsten/PycharmProjects/trans_banking_gui/.venv/lib/python3.12/site-packages/mysql/connector/cursor_cext.py", line 328, in execute
prepared = self._connection.prepare_for_mysql(params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/torsten/PycharmProjects/trans_banking_gui/.venv/lib/python3.12/site-packages/mysql/connector/connection_cext.py", line 957, in prepare_for_mysql
raise ProgrammingError(
mysql.connector.errors.ProgrammingError: Could not process parameters: int(1301798649), it must be of type list, tuple or dict
Sirius3
User
Beiträge: 18215
Registriert: Sonntag 21. Oktober 2012, 17:20

Jeder, der hier mitliest, weiß ja, das noch lange nicht alles passt. Und jetzt willst du auch noch mit GUIs anfangen?
Der Fehler hat nichts mit der GUI zu tun, das ist ja ein alter Bekannter.
Die default-Argumente Deiner Klasse sind falsch, bitte nochmal das Kapitel zu Funktionen lesen.
Zur GUI könnte ich jetzt auch noch einiges schreiben. Spar ich mir aber, wird ja eh ignoriert.
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

Mit Guis habe ich schon gearbeitet und wollte nur mal was testen und habe mal schnell was gebaut . Das es nicht grade Stil echt ist , ist mir klar .

Wenn man nur oberlehrer sein will dann schreib lieber garnichts .

Ich habe mir die Klassen und alles selbst beigebracht und versuche viele Sachen aus , klar das Stolpersteine dazwischen passieren .

Ich wollte einfach was probieren und testen .
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TorstenVoelker: Das hat nichts mit ”stilecht” zu tun. Da sind Fehler drin, die klar machen, dass Du da Sachen die wichtig sind, nicht verstanden hast. Und es wird klar, dass es nichts bringt etwas dazu zu sagen, weil Du die angesprochenen Probleme nicht angehst. Du machst die gleichen Fehler immer wieder, hast also nicht verstanden was das Problem war/ist. Und Fehler und Fehlermeldungen verstehst Du auch nicht wirklich, weil Du den Fehler im Beitragstext dann an falscher Stelle vermutest. Hier zum Beispiel ursprünglich, dass das irgendein Problem mit der Klasse wäre, wobei die Klasse da nichts mit zu tun. Und dann das es durch das zufügen der GUI zu einem Fehler gekommen wäre, der aber mit der GUI überhaupt nichts zu tun hat.

Was den Stil angeht: Sowohl die Texte in den Beiträgen als der Quelltext zeigen das Du Probleme mit Struktur und sauberem arbeiten hast. Das ist wichtig beim programmieren. Wenn so etwas einfaches wie eine saubere Einrückung, einheitliche Anzahl von Leerzeilen zwischen Definitionen, und Namenskonventionen nicht klappt, wird das bei schwierigeren Sachen üblicherweise nicht besser.

Du hast weder mit GUIs gearbeitet noch Dir Klassen beigebracht. Für beides hast Du zu wenig von den Grundlagen verstanden.

Wenn Du an dem Punkt bist wo Du anderen vorwirfst ”Oberlehrer” sein zu wollen, dann schreib lieber gar nichts. 🙄
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

die Zeile ` verbindung_c.execute("SELECT username,konto,kontostand FROM bank WHERE konto = ", nummer)` ist halt falsch. Und das ist in dem anderen Thread mindestens 10x durchgekaut worden, inkl. mehreren funktionierenden Beispiele.

IMHO gibt es nur noch zwei Möglichkeiten: du trollst hier das Forum und hast diebischen Spaß dabei (was ich inzwischen glaube) und Programmieren ist schlichtweg nichts für dich und die solltest dir ein anderes Hobby suchen. Wobei: genau genommen schließt ersteres letzteres noch nicht mal aus.
Ich habe mir die Klassen und alles selbst beigebracht...
Haben wir auch alle, da bist keinerlei Alleinstellungsmerkmal deinerseits.

Gruß, noisefloor
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

Beleidigungen haben hier im Forum nichts zu suchen! Bitte haltet euch daran!
Benutzer verwarnt, beim nächsten Verstoß erfolgt ein Bann.

Edit by Damaskus
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

So , habe es selber hinbekommen und noch was ,
@noisefloor behalte mal deine unter bemittelten Äußerungen für dich .

Ich weiß das ich sorgfältiger coden muss und noch einiges lernen muss . Das mit der variable Nummer habe ich unter anderen [ ] vergessen. . Man muss aber nicht Menschen die halt lange brauchen oder was nicht gleich checken als doof hinstellen .

Wenn man was zu sagen hat , sollte man es schon einen ins Gesicht sagen .
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

@TorstenVoelker: Ergänzend zu den Anmerkungen, die in dem Thread bereits gemacht wurden:

Ich glaube, dein Sprung mit Datenbanken, Klassen und grafischer Oberfläche anzufangen, ist ein bisschen weit.
Meine Empfehlung und Erfahrung: Erst einmal die Basics beherrschen.
Das Python-Tutorial durcharbeiten. Verstehen wir Funktionen (in Python) funktionieren, welche Datenstrukturen es gibt und wie man sie verwendet. Und wenn das alles verstanden ist, dann der nächste Schritt in Richtung Klassen/OOP.
Das sitzt alles noch nicht und wenn das Fundament nicht da ist, dann kann man auch kein Haus darauf bauen.

Es gibt noch das Problem, das du 'glaubst', dass Programme so funktionieren, wie du denkst - tun sie aber nicht. Du weißt das nicht und du kannst das auch nicht feststellen. Und da du Hinweise hier ignorierst (oder nicht verstehst), kann dort in meinen Augen auch kein Fortschritt stattfinden. Keine Ahnung ob es so etwas wie Tutoren gibt, die man dafür bezahl Code zu begutachten und da zu unterstützen. Also so etwas wie Nachhilfe in der Schule. Denn im Moment köchelst du in deiner eigenen Suppe, rätst nach meiner Meinung viel und denkst, der Code funktioniert, wenn er durch läuft. Das ist alles eher Murks. Und da du hier Code nur auszugsweise präsentierst und die Hinweise verhallen, kann es so mMn nicht besser werden.

Möglicherweise wäre auch eine Programmiersprache, die dich zwingt, Dinge richtig zu machen und das für die prüft, die bessere Wahl.
Bei Python treten Dinge erst zu Laufzeit auf, die andere Programmiersprachen bereits dem Compiler auffallen.

Unabhängig vom technischen Teil: Ich finde, es gibt nie einen Grund persönlich beleidigend zu werden. Das hast du hier gemacht. Jeder kennt Situationen, in denen man frustriert ist. Ich denke nicht, dass Beleidigungen das besser machen.

Das waren meine 5 cent.
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

@sparrow Ich habe mit den contumelia nicht angefangen . Habe mich nur dazu geäußert .
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TorstenVoelker: Doch Du hast damit angefangen. Sogar so weitgehend, dass ein Beitrag von Dir von einem Moderator/Admin bearbeitet wurde. Siehe weiter oben.

Korrekte Mehrzahl müsste übrigens „contumeliae“ sein. 🙃

Edit: Und Du plenkst.
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

Oh Mann !

Lehrerzimmer
Antworten