TypeError: unsupported operand type(s) for +=: 'function' and 'int'?

Erzesel  24.12.2021, 17:52

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.)

plshelppppppp 
Beitragsersteller
 24.12.2021, 18:36

Ah Shit dachte das geht weil ja auf meinem Rechner ging es

Erzesel  24.12.2021, 17:53

Im allgemeinen genügt es jedoch einfach die betreffend Codepassage hier zu posten </>

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


plshelppppppp 
Beitragsersteller
 24.12.2021, 18:37

Vielen Dank ich Versuch das vid auf YT hochzuladen oder die Code Dings hier zu machen wait, aber vielen Dankkkk

0
xxxcyberxxx  24.12.2021, 19:36
@plshelppppppp

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

0
plshelppppppp 
Beitragsersteller
 24.12.2021, 19:43
@xxxcyberxxx

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

0
plshelppppppp 
Beitragsersteller
 24.12.2021, 19:46
@plshelppppppp

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
0
xxxcyberxxx  24.12.2021, 20:12
@plshelppppppp

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

1
plshelppppppp 
Beitragsersteller
 24.12.2021, 20:49
@xxxcyberxxx

also gibt es keinen anderen weg mit dem ich es mit dieser methode schaffe?

0
xxxcyberxxx  24.12.2021, 20:53
@plshelppppppp

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

1
Erzesel  25.12.2021, 14:50
@plshelppppppp

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...

1
xxxcyberxxx  25.12.2021, 15:07
@Erzesel
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

1
plshelppppppp 
Beitragsersteller
 31.12.2021, 19:34
@Erzesel

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.

0
Erzesel  01.01.2022, 15:26
@plshelppppppp
...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.

0