TypeError: 'str' object is not callable

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
shIxx
User
Beiträge: 22
Registriert: Sonntag 13. Oktober 2019, 16:11

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?
Zuletzt geändert von shIxx am Freitag 27. März 2020, 17:46, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
shIxx
User
Beiträge: 22
Registriert: Sonntag 13. Oktober 2019, 16:11

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist halt so. Andere Sprachen machen das tatsaechlich anders, aber Python hat an dieser Stelle keine getrennten Namensraeume.
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

`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.
shIxx
User
Beiträge: 22
Registriert: Sonntag 13. Oktober 2019, 16:11

Ok verstehe,.. Danke nochmal.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten