所以我在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。我该如何解决这个问题?
答案 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!')