Warum bekomme ich eine doppelte Ausgabe in Python?

3 Antworten

Weil du OR anstatt AND verwendest.

Die Bedingung beim While muss lauten:

while (user_input != "help") and (user_input != "start"):

Das soll ja nur ausgeführt werden, wenn man WEDER help NOCH start eingibt. Also wenn die Eingabe nicht help ist UND nicht start ist.

Denn

while (user_input != "help") or (user_input != "start"):

würde ja auch ausgelöst werden, wenn man "help" eingibt:

(user_input != "help") ergibt false.

(user_input != "start") ergibt true.

false OR true ergibt true.

Ein OR gibt wahr zurück, wenn mindestens eine der Beiden Bedingungen wahr ist.

Folglich wird die Schleife dann immer ausgeführt, egal was du eingibst. Weil es immer entweder nicht help ist, oder nicht start ist.

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

Weil Du aus irgendeinem Grund Rekursion verwendest. Ich würde dafür lieber eine Schleife verwenden.

Außerdem sind Deine Bedingungen auch nicht das Gegenteil voneinander.

Das Gegenteil von (user_input == "help") or (user_input == "start") ist nämlich (user_input != "help") and (user_input != "start").

Ich würde das ganze so formulieren.

def query():
   user_input = input().lower()

   while (user_input != "help") and (user_input != "start"):
      print("Falsch, bitte nochmal eingeben!")
      user_input = input().lower()

   return user_input # Ergibt vermutlich Sinn.

print("Tippe ...")
query()
print("Dann kann's ja weitergehen.")
A321XLR 
Fragesteller
 09.03.2021, 00:48

dankesehr!

1

Warum hast du da eigentlich eine while Schleife?
Das ist doch ne klassische If abfrage.

Aber das wird wahrscheinlich nicht das Problem mit der doppelten Ausgabe sein.
Ich fands nur seltsam

A321XLR 
Fragesteller
 09.03.2021, 00:37

mir geht es nur darum, warum die Ausgabe doppelt ist, der Rest ist erst mal egal..

1
NoHumanBeing  09.03.2021, 00:39
Warum hast du da eigentlich eine while Schleife?

Ich vermute, er möchte dass der Benutzer so oft aufgefordert wird, etwas einzugeben, bis er entweder "help" oder "start" eingibt.

Eine while-Schleife ist für diesen Zweck schon okay, aber die Rekursion ergibt keinen Sinn.

1