Python: 有没有办法在 != 之前执行 or 语句

Python: Is there a way to execute an or statement before !=

我正在尝试 运行 以下代码:

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

但是,只有 'add' 被视为有效输入。有没有一种方法可以在不使用嵌套 if 语句的情况下执行此代码,以便所有 4 个选项都有效?

您必须单独进行每个比较,因此 op != 'add' and op != 'subtract'...

您可以使用 not in 运算符:

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

in 检查 容器中的项目 not in 恰恰相反。


或者另外,正如@Chris_Rands建议的那样,为了效率用一个集合替换列表:

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

or 运算符 != 之前执行的。你做错的是你使用了错误的操作数:

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

这意味着最后会是:

if 'op' != 'add':

这正是您所得到的。您需要做的是将 op 与您允许的每个操作进行比较:

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

或 python-fu

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

您可以使用 in 和列表。

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

如果您希望得到与您的代码类似的答案,那么这个方法很有效:

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