Seite 1 von 1

TypeError: 'str' object is not callable

Verfasst: Freitag 27. März 2020, 17:43
von shIxx
Hallo an alle hier im Forum.

Bin ein Programmieranfänger und mache verschiedene kleine Übungen.
Dabei bin ich auf folgenden Fehler gestoßen und ich kann mir nicht erklären was da falsch sein soll!

Code: Alles auswählen

    input = input('Geben Sie das Passwort ein: ')
TypeError: 'str' object is not callable
Der Code:

Code: Alles auswählen

passwort = str(42)
versuche = 0

läuft = True
while läuft:
    versuche += 1
    print('Versuch Nr. ', versuche)
    
    input = input('Geben Sie das Passwort ein: ')

    if input == passwort:
        print('OK')
        läuft = False
    elif versuche > 3:
        print('Gesperrt')
        läuft = False
    else:
        print('Falsches Passwort')
Kann man string's etwa nicht vergleichen?

Re: TypeError: 'str' object is not callable

Verfasst: Freitag 27. März 2020, 17:45
von __deets__
Joa, das kommt halt davon, wenn man die Namen von Dingen die es schon gibt in Python (also zB den Namen der Funktion input) einfach neu belegt. Dann ist das Original eben weg.

Benenn deine Eingabe von "input" in etwas anderes, wie zB "passwort_eingabe", um, und alles ist tutti.

Re: TypeError: 'str' object is not callable

Verfasst: Freitag 27. März 2020, 17:47
von shIxx
Achso lol,... darauf wäre ich nie gekommen!
Danke.

EDIT:
Aber jetzt wo ich drüber nachdenke kommt mir die Frage warum das umbenannt wurde.
Ich meine warum weiß Python nicht das "input" eine Variable ist und "input( )" eine Funktion.?
Oder hab ich da was falsch verstanden.

Re: TypeError: 'str' object is not callable

Verfasst: Freitag 27. März 2020, 18:14
von __deets__
Das ist halt so. Andere Sprachen machen das tatsaechlich anders, aber Python hat an dieser Stelle keine getrennten Namensraeume.

Re: TypeError: 'str' object is not callable

Verfasst: Freitag 27. März 2020, 18:19
von einfachTobi
`input` IST die Funktion. Mit `input()` führst du sie aus. Wenn du nun eine Variable so nennst passiert das, was deets beschrieben hat. Python macht an der Stelle GENAU das, was befohlen wird :)
Andere Sprachen trennen die Namensräume, Python eben nicht.

Re: TypeError: 'str' object is not callable

Verfasst: Freitag 27. März 2020, 18:41
von shIxx
Ok verstehe,.. Danke nochmal.

Re: TypeError: 'str' object is not callable

Verfasst: Freitag 27. März 2020, 21:19
von __blackjack__
Vielleicht noch ergänzend warum das besser ist als in Sprachen die Namensräume für Funktionen und Variablen trennt: Da sind Funktionen und Variablen dann auch etwas anderes, sprich man kann Funktionen nicht an andere Namen binden. In Python sind auch Funktionen Werte die man an Namen binden, an andere Funktionen übergeben, in Datenstrukturen stecken, …, kann. Halt alles was man mit Werten so tun kann. Das ist sehr praktisch weil man so auch Funktionen haben kann die andere Funktionen als Argument(e) übergeben bekommen oder neue Funktionen erstellen und als Ergebnis liefern können.