2016-08-13 4 views
-1

Ich versuche, den folgenden Code auszuführen:Python: Gibt es eine Möglichkeit, bevor eine oder Anweisung auszuführen =

while check == False: 
    op = input('Do you want to add, subtract, multiply or divide?') 
    if op != ((('add' or 'subtract') or 'multiply') or 'divide'): 
     print('Please enter a valid operation') 
    else: 
     check = True 

jedoch nur ‚Hinzufügen‘ wird als gültige Eingabe gesehen. Gibt es eine Möglichkeit, diesen Code auszuführen, ohne verschachtelte if-Anweisungen zu verwenden, so dass alle 4 Optionen gültig sind?

+1

Warum nicht einen Satz verwenden und einfach testen, ob der Wert von * op * in diesem Satz vorhanden ist. Es vermeidet verschachtelte * if * -Anweisungen und all diese verrückte boolesche Logik. – 0x23212f

+0

Sie müssen die Syntax einer Sprache überprüfen. Der binäre Operator funktioniert nicht so, wie Sie es für richtig halten. –

Antwort

4

Sie können den not in Operator tun:

if op not in ['add', 'substract', 'multiply', 'divide']: 
    print('Please enter a valid operation') 

in prüft, ob ein Element in einem Behälter, not in tut genau das Gegenteil.


oder zusätzlich als @Chris_Rands schlägt vor, die Liste ersetzen durch einen Satz für die Effizienz:

if op not in {'add', 'substract', 'multiply', 'divide'}: 
    print('Please enter a valid operation') 
+0

besser zu verwenden 'in {}' als 'in []'. Sets sind schneller als Listen dafür. –

+0

@Chris_Rands thx! bearbeitet, um den Vorschlag zu reflektieren! –

1

Sie müssen jeden Vergleich einzeln vornehmen, also op != 'add' and op != 'subtract'....

0

or Operator vor != ausgeführt wird. Was Sie falsch zu machen ist, dass Sie mit falschen Operanden arbeiten:

'add' or 'substract' 
>>> 'add' 

Dies bedeutet, dass am Ende wird es sein:

if 'op' != 'add': 

das ist genau das, was man bekommt. Was Sie tun müssen, ist op zu vergleichen, um zu jeder Operation Sie erlauben:

if (op != 'add') and (op != 'substract'): 

oder mit Python-fu

validOperations = ['add, 'substract'] 
if op not in validOperations: 
+0

'if (op! = 'Add') oder (op! = 'Subtract'):' -> falsch; es sollte der * und * Operator nicht * oder * sein. – 0x23212f

+0

@ 0x23212f richtig, fest – teivaz

0

Sie in und eine Liste verwenden können.

while check == False: 
    op = input('Do you want to add, subtract, multiply or divide?') 
    if op not in ['add', 'subtract', 'multiply', 'divide']: 
     print('Please enter a valid operation') 
    else: 
     check = True 
0

Wenn Sie auf eine Antwort ähnlich wie der Code scharf sind, das funktioniert:

check = False 
while check == False: 
    op = raw_input('add/subtract/multiply/divide ? : ') 
    if op != 'add' and op != 'subtract' and op != 'multiply' and op != 'divide': 
    print 'What? Choose wisely.' 
    else: 
    print 'Well chosen.' 
    check = True 
Verwandte Themen