我如何使用或在Python 3.6中使用

时间:2018-01-25 23:47:28

标签: python if-statement

所以我在python 3.6中制作了一个计算器,但是有一条错误信息,我的代码无效。

if(op == "+"):
    print(add(num1, num2))
if(op == "-"):
    print(sub(num1, num2))
if(op == "*"):
    print(mul(num1, num2))
if(op == "/"):
    print(dev(num1, num2))
if(op == "stop"):
    rng = "f"
elif(op != "+", or "-", or "*", or "/", or "stop"):
    print("Please enter a valid operation!")

当我运行代码时,它会给我一个错误,说明语法无效并突出显示"或"部分在字符串中。 Error Picture。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:2)

要回答您的问题,这是一个语法错误,因为or不期望使用逗号。删除它们,它不会产生错误:

...
elif(op != "+" or "-" or "*" or "/" or "stop"):
    print("Please enter a valid operation!")

问题是or是分开并分别应用逻辑或每个条件,如:op != "+""-""*"等。字符串值本身不为空将始终为真,因此您的条件将始终为真。因此,您需要添加:op != "-"op != "*",依此类推。即使添加了那些,仍然存在逻辑错误,因为op一次只能是一个值。因此,它仍将始终评估为true,因此您可能需要使用and

但是整个条件真的没有必要。只需在以前的条件下使用elif

if(op == "+"):
    print(add(num1, num2))
elif(op == "-"):
    print(sub(num1, num2))
elif(op == "*"):
    print(mul(num1, num2))
elif(op == "/"):
    print(dev(num1, num2))
elif(op == "stop"):
    rng = "f"
else:
    print("Please enter a valid operation!")

答案 1 :(得分:1)

你可以像这样使用'或':

if 5 == 5 or 4 == 4:
    print("Correct!")
else:
    print("Incorrect!")

所以,没有逗号。同时取出'if'语句中的括号。

但在你的情况下,使用或喜欢这样:

if userInput != 5 or userInput != 6 or userInput != 7:
    print("Do Something ...")
else:
    print("Do Something ...")

我知道,你必须一遍又一遍地写下这些东西。

顺便说一下,将or更改为and,因为那样您的代码将无法按预期运行。

答案 2 :(得分:0)

您的代码应包含"和!=" (代表不等于)代替"或" 这段代码将完成这项工作:

if(op == "+"):
    print(add(num1, num2))
if(op == "-"):
    print(sub(num1, num2))
if(op == "*"):
    print(mul(num1, num2))
if(op == "/"):
    print(dev(num1, num2))
if(op == "stop"):
    rng = "f"
elif(op != "+" and op != "-" and op != "*" and op != "/" and op !="stop"):
    print("Please enter a valid operation!")

答案 3 :(得分:0)

const kPartitions = (seq, k) => {
  const n = seq.length
  var groups = []
  function* generatePartitions(i) {
    if (i >= n) {
      yield groups.map(group => [...group])
    }
    else {
      if (n - 1 > k - groups.length) {
        for (let group of groups) {
          group.push(seq[i])
          yield* generatePartitions(i + 1)
          group.pop()
        }
      }
      if (groups.length < k) {
        groups.push([seq[i]])
        yield* generatePartitions(i + 1)
        groups.pop()
      }
    }
  }
  return generatePartitions(0)
}

for (var partitions of kPartitions(['A', 'B', 'C', 'D'], 3)) {
  console.log(partitions)
}

这是正确的语法。事实证明,你无法使用&#39;操作!=&#39;一次后跟几个或(s)以检查所有条件。

答案 4 :(得分:0)

在我看来,这是一个更加pythonic的解决方案。

op_map = {'+': add, '-': sub, '*': mul, '/': dev}

if op in op_map:
    print(op_map[op](num1, num2))

elif op == 'stop':
    rng = 'f'

else:
    print('Please enter a valid operation!')