TypeError: unsupported operand type(s) for +=: 'function' and 'int'?
Ich habe ein Python Programm geschrieben und habe darin mehrere Funktionen definiert. In den Funktionen wollte ich dann Zähler einbauen, den Startwert des Zählers hab ich jedoch außerhalb der Funktion in einer Variabel gespeichert. Beim Ausführen des Programms erschien jedoch die obige Fehlermeldung. Hier ist nochmal der ganze Code:
file:///C:/Users/Michael/Videos/Captures/pythonProject%20%E2%80%93%20camera.py%202021-12-24%2016-33-00.mp4
Ich hoffe jemand kann mir dabei helfen =)
Wäre echt cool, wenn ich auf Deinen Rechner zugreifen könnte😅
Du musst Dein Video schon irgendwo im Netz veröffentlichen (YT oder eine Cloud etc.)
Ah Shit dachte das geht weil ja auf meinem Rechner ging es
Im allgemeinen genügt es jedoch einfach die betreffend Codepassage hier zu posten </>
https://youtu.be/ipMOvVfUi10 ist der link und bei def e ist halt das problem bei fragen kannst du fragen
1 Antwort
TypeError: unsupported operand type(s) for +=: 'function' and 'int'?
Du versuchst die Addition mit einer Funktion und einem integer. Wo dein Fehler genauer liegt, wird niemand ohne Code sagen können
Hier ist nochmal der ganze Code:
file:///C:/Users/Michael/Videos/Captures/pythonProject%20%E2%80%93%20camera.py%202021-12-24%2016-33-00.mp4
nein, ein lokaler Dateipfad zu einer Videodatei bringt uns nichts
https://youtu.be/ipMOvVfUi10 hier ist der link bei fragen kannst du fragen
Ok cool. Ist dennoch ein Video. Lade deinen Code als Text irgendwo hoch, z.b. hier oder pastebin/hastebin oder oder oder ...
Text als Video hochladen ... Sinn macht das nicht
oh na dann sry. das asd ist btw irrelevant in diesem fehler. Ich hoffe mal jz ist alles ok ='(
def e():
global asd, b
print("Dein vorhandenes Guthaben: " + str(asd) + "€")
print("--------------")
einsatz = float(input("Wie viel willst du einsetzten? "))
asd -= einsatz
while True:
if b == 1:
c = random.randint(1, 4)
b += 1
if einsatz >= 1000:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
if c == 1:
einsatz *= 200000
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
else:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
else:
b += 1
c = random.randint(1, 500000)
if einsatz >= 1000:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
if c == 1:
einsatz *= 200000
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
else:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
oder hier wenn du willst der GANZE code:
# Glücksspiel
import random
import time
b = 1
# Geldmenge hinzufügen mit der du spielen willst
asd = float(input("Mit wie viel Euros willst du spielen? "))
# Risikolevel auswählen
print("Mit welchem Risikolevel willst du spielen? ")
time.sleep(0.1)
gamemode = float(input("1 = niedrig, 2 = mittel, 3 = hoch "))
# Funktion a wird zugewiesen, damit ich nicht immer den ganzen Code schreiben muss
def a():
global asd
print("Dein vorhandenes Geld: " + str(asd) + "€")
print("--------------")
einsatz = float(input("Wie viel willst du einsetzten? "))
asd -= einsatz
while True:
c = random.randint(1, 5)
if einsatz >= 1000:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
if c == 1:
einsatz *= 10
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
else:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
# Wenn der gamemode 1 war, dann wird jetzt die obige Funktion ausgeführt
while True:
if gamemode == 1:
a()
else:
break
# Funktion b wird zugewiesen, damit ich nicht immer den ganzen Code schreiben muss
def b():
global asd
print("Dein vorhandenes Geld: " + str(asd) + "€")
print("--------------")
einsatz = float(input("Wie viel willst du einsetzten? "))
asd -= einsatz
while True:
c = random.randint(1, 10)
if einsatz >= 1000:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
if c == 1:
einsatz *= 100
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
else:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
# Wenn der gamemode 2 war, dann wird jetzt die obige Funktion ausgeführt
while True:
if gamemode == 2:
b()
else:
break
# Funktion c wird zugewiesen, damit ich nicht immer den ganzen Code schreiben muss
# noinspection PyGlobalUndefined
def e():
global asd, b
print("Dein vorhandenes Guthaben: " + str(asd) + "€")
print("--------------")
einsatz = float(input("Wie viel willst du einsetzten? "))
asd -= einsatz
while True:
if b == 1:
c = random.randint(1, 4)
b += 1
if einsatz >= 1000:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
if c == 1:
einsatz *= 200000
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
else:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
else:
b += 1
c = random.randint(1, 500000)
if einsatz >= 1000:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
if c == 1:
einsatz *= 200000
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
else:
einsatz *= 0
print("Gewinn: ")
print(float(einsatz))
asd += einsatz
break
# Wenn der gamemode 3 war, dann wird jetzt die obige Funktion ausgeführt
while True:
if gamemode == 3:
e()
else:
break
Dein Fehler wird in Funktion "e" sein. Du hast b als Funktion gegeben und versuchst, auf b 1 zu addieren ... Das geht offensichtlich nicht, weil b eine Funktion ist und kein Wert ...
Ohne die Logik des Codes anzuschauen: Du hast sehr viel wiederholenden Code. Mach doch daraus eine einzige Funktion, die die entsprechenden (sich ändernden) Werte als Parameter nimmt
also gibt es keinen anderen weg mit dem ich es mit dieser methode schaffe?
Ich hab mir die Logik nicht angeschaut und auch nicht, was du bezwecken willst.
b ist aber keine Zahl, sondern die Funktion. Auf die Funktion selbst kannst du nichts addieren, also nein, so geht es nicht.
Du könntest die Funktion jedoch einen Wert zurückgeben lassen, wenn dir das hilft
ich guck dann mal aber trotzdem danke
Nicht Dein Ernst?
Mir ist schon bei dem Video Übel geworden. Dein Quellcode macht es nicht besser.
@xxxcyberxxx hat sich ja bereits dazu geäußert, das b eine Funktion ist.
Die ganze Problematik tritt überhaupt erst auf, weil du Du weder für Funktionen noch Variablen aussagekräftige Name vergibst.
Ich war als jemand der es gewohnt ist mit C-Sprachen zu programmieren überrascht, das es überhaupt möglich ist etwas so dummes zu veranstalten:
import random
import time
#hier ist b eine IntegerVariable
b = 1
#...50 Zeilen später... deklaration einer Funktion mit gleichem Namen
def b():
global asd
...
(Ich war ja noch nie Fan von Python. Dies Beispiel bestärkt meine Abneigung ein weiteres mal)
Du definierst Funktionen um den Code nicht mehrfach zu schreiben und wiederholst den Nahezu gleichen Code in den Definitionen mehrfach...🤣 80% des Codes ist redundant...
Die ganze Problematik tritt überhaupt erst auf, weil du Du weder für Funktionen noch Variablen aussagekräftige Name vergibst.
Jup.
Ich war als jemand der es gewohnt ist mit C-Sprachen zu programmieren überrascht, das es überhaupt möglich ist etwas so dummes zu veranstalten:
Das ist theoretisch bei jeder Sprache ohne feste Typenbindung möglich
(Ich war ja noch nie Fan von Python. Dies Beispiel bestärkt meine Abneigung ein weiteres mal)
Python an sich ist nicht das Problem, es lässt viele Freiheiten. Gerade bei Anfängern sind diese Freiheiten jedoch manchmal echt nicht hilfreich, wie hier, macht aber später manche Probleme leichter / kürzer lösbar
Du definierst Funktionen um den Code nicht mehrfach zu schreiben und wiederholst den Nahezu gleichen Code in den Definitionen mehrfach...🤣 80% des Codes ist redundant...
jup, ist echt nicht schön gelöst, hab ich aber auch schon angemerkt gehabt
es tut mir leid dass ich so dumm bin ich programmiere noch nicht so lange und das ist mein erster großer Codetext mit Funktionen und ich bin nur 12 deshalb, danke für deinen unnützlichen Kommentar ich hab den Fehler selbst gefunden. Wenn du anderen Leuten nicht helfen kannst und sie nur nieder machst kannst du auch gleich von der Plattform runtergehen. Ich hab nur gedacht dass mir irgendjemand helfen kann aber naja, bleib dann bei deinem C.
...und ich bin nur 12...
Nicht so empfindlich junger Padawan... Gewöhn dich dran... Welpenbonus gibt's nicht🤭. Zudem ist Dein Alter nicht ersichtlich. Ich äußere mich auch gestandenen Programmierern gegenüber "geradlinig". Kritik ist nunmal etwas, womit man zurechtkommen muss.
Beim Programmieren ist Eindeutigkeit und Struktur das A&O. Sosehr man auch dazu neigt den eigenen Code als OK anzusehen, wenn man beim Lesen selbst nicht mehr die Funktionsweise nachvollziehen kann, ist der Code Mist. Das Video macht die Sache nicht angenehmer.
Ich programmiere seit nunmehr 37 Jahren und habe auch mal angefangen. (...damals konnte man niemanden fragen) ...und in 37 Jahren wirst auch Du Anfängern keinen Honig ums Maul schmieren.
Wenn du anderen Leuten nicht helfen kannst ...
In dieser Beziehung habe ich eine recht gute Statistik.
Wenn Du den Rat, einer guten Namensgebung nicht als nützlich erachtest, ist das eher Dein Problem.
...Ich kann neben C auch noch ein gutes Dutzend anderer Sprachen. Ich klammere mich jedoch an keine.
Python nicht zu mögen bedeutet nicht, das ich nicht damit umgehen kann.
Vielen Dank ich Versuch das vid auf YT hochzuladen oder die Code Dings hier zu machen wait, aber vielen Dankkkk