Frage zur Verzweigung

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
zelin24
User
Beiträge: 1
Registriert: Sonntag 14. Mai 2023, 16:41

Ich habe mittels einer Verzweigung versucht eine Passwortabfrage zu erstellen laut dem Compiler ist die Syntax richtig allerdings zeigt es nicht die Variante aus ,wenn das Passwort falsch ist und ich weiß nicht wo mein Fehler liegt.

Hier mein aktueller Code:

x=[1,3,7,9,8,0]






zahlenint=int(input("Bitte geben Sie eine Zahl ein: "))
zahlenint=int(input("Bitte geben Sie eine Zahl ein: "))
zahlenint=int(input("Bitte geben Sie eine Zahl ein: "))
zahlenint=int(input("Bitte geben Sie eine Zahl ein: "))
zahlenint=int(input("Bitte geben Sie eine Zahl ein: "))
zahlenint=int(input("Bitte geben Sie eine Zahl ein: "))

if x==x:

print("Passwort ist korrekt")

else:
print("Passwort ist falsch")
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Du bindest eine Liste mit Ganzzahlen an den Namen "x".
Dann fragst du 6 Mal nach der Zahl und bindest die Einabge jedesmal an den Namen "zahlenint" (ganz schlechter Namen).

Anschließend fragst du, ob x gleich x ist. Also die List der Ganzzahlen gleich sich selbst ist.
Ja, ist sie.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@zelin24: Auch wenn das syntaktisch korrekt ist, sollte man nicht so viele Leerzeilen nacheinander haben, immer gleich tief einrücken, und zwar vier Leerzeichen pro Ebene. Leerzeilen üblicherweise *eine* um Funktionen, Methoden, und logisch abgesetzte Code-Blöcke und zwei Leerzeilen zwischen Definitionen von Funktionen und Klassen auf Modulebene sind üblich. Siehe auch den Style Guide for Python Code.

Ein Leerzeichen vor und nach binären Operatoren und um Gleichheitszeichen bei Zuweisungen (ausser bei Schlüsselwortargumenten) und nach Kommas erhöhen die Lesbarkeit.

`x` ist kein guter Name für eine Liste mit Zahlen. Einbuchstabige Namen sind selten gute Namen für irgend etwas. Ausnahmen sind `i`, `j`, und `k` für ganze Zahlen die für Indexzugriffe benutzt werden und als Laufvariable in Schleifen, falls man da keinen besseren Namen für findet. Und `x`, `y`, und `z` für Zahlen die als Koordinaten verwendet werden. Weil man beides aus der Mathematik kennt. Ansonsten sollte man immer versuchen einen Namen zu finden der die Bedeutung des Wertes im Programm erklärt. Denn dafür sind Namen da — dem Leser Informationen zu vermitteln.

Namen sollten dabei keine kryptischen Abkürzungen enthalten, oder gar nur daraus bestehen.

Man definiert Namen in aller Regel erst wenn sie benötigt werden. `x` wird erst nach den ganzen Eingaben benötigt, also sollte man das auch nicht so weit von der Stelle entfernt einführen in der es dann letztlich erst benutzt wird. Das macht Programme unübersichtlicher, man übersieht leichter Namen die am Ende gar nicht mehr verwendet werden, und es macht es aufwändiger und damit fehleranfälliger Teile vom Code in eigene Funktionen heraus zu ziehen.

Grunddatentypen haben nichts in Namen verloren. Den Typen ändert man gar nicht so selten mal während der Programmentwicklung und dann muss man überall im Programm die betroffenen Namen ändern, oder man hat falsche, irreführende Namen im Quelltext. `zahlenint` steht auch gar nicht für mehrere Zahlen, sondern immer nur für *eine* Zahl.

Die ersten 5 Zuweisungen an den Namen `zahlenint` kann man sich auch sparen, denn da passiert ja nichts weiter als das gleich in der nächsten Zeile an anderer Wert an diesen Namen gebunden wird. Aber auch mit dem Wert aus der letzten Zuweisung wird nichts gemacht. Also kann man sich das ganz sparen die Werte an einen Namen zu binden.

Als Programmierer wiederholt man keinen Code und keine Daten. Das macht unnötig Arbeit und ist fehleranfällig und unflexibel. Dafür gibt es Schleifen und/oder Funktionen.

Da eine Liste mit ganzen Zahlen immer gleich sich selbst ist, macht das ``if``/``else`` keinen Sinn, denn da wird *immer* der erste Zweig genommen. Ohne das ``if`` braucht man die Liste mit den Werten nicht. Bleibt also folgendes übrig um den gleichen, etwas sinnfreien Effekt zu haben, dass das Programm 6 Zahlen erfragt mit denen nichts gemacht wird und dann ausgibt, dass das Passwort korrekt ist:

Code: Alles auswählen

for _ in range(6):
    int(input("Bitte geben Sie eine Zahl ein: "))

print("Passwort ist korrekt")
Wass Du vielleicht tatsächlich machen wolltest, war in einer Schleife Werte abzufragen und in einer Liste zu sammeln bis die genau so lang ist wie das `x`, und dann *diese* Liste mit `x` zu vergleichen. Dann würde `x` beispielsweise sinnvollerweise `geheimcode` heissen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten