2017-02-12 4 views
-2
def main(): 
x = input("print data? (Y/N) ") 

while (x != 'Y' or x != 'N'): 
    x = input("error: wrong input. Please put Y or N only ") 

if x == 'Y': 
    read_serial() 

Der Versuch, zu überprüfen, ob die Tastatureingabe (x) gleich einer 'Y' oder 'N' Zeichenfolge ist. Und wenn nicht, dann wird die Schleife fortgesetzt, bis es ist. Allerdings scheint der obige Code zu kompilieren und gut zu laufen, außer dass die Schleife immer weiterläuft. Habe noch nicht viel Erfahrung mit Python 3, also könnte mir irgendjemand sagen, was ich falsch mache?Python: Wie Input() String zu einem anderen String zu vergleichen?

+0

@ tigerhawkT3 ich nicht, dass dies das richtige Duplikat ist. – Maroun

+0

@MarounMaroun - Es ist sicherlich. Das Hinzufügen eines "nicht" (z. B. "x nicht in YN") ist trivial. – TigerhawkT3

Antwort

1

Diese Aussage

x != 'Y' or x != 'N' 

ist immer True, weil alles in der Welt nicht "Y" ist oder nicht "N".

Ändern Sie es an:

x != 'Y' and x != 'N' 
0

Ändern der or-and, wie Sie es überprüfen wollen, ist entweder diese Felder nicht gleich. Wenn Sie verwenden möchten or werden Sie den Code

def main(): 
    user_input = input("print data? (Y/N) ") 

    while (true): 
     if (user_input.lower() == 'y' or user_input.lower() == 'n'): 
      break 
     user_input = input("error: wrong input. Please put Y or N only ") 

    if user_input.lower() == 'y': 
     read_serial() 

Randnotiz ändern müssen: x eine schlechte Variablenname, nennen es etwas besser geeignet.

Sie sollten die Groß- und Kleinschreibung immer ändern, wenn Sie Strings vergleichen, wenn der Fall keine Rolle spielt. In diesem Fall braucht Fall keine Rolle, so verwendet lower()

def main(): 
    user_input = input("print data? (Y/N) ") 

    while (user_input.lower() != 'y' and user_input.lower() != 'n'): 
     user_input = input("error: wrong input. Please put Y or N only ") 

    if user_input.lower() == 'y': 
     read_serial() 
Verwandte Themen