我的代码有这个
if (choice != 'A1' || 'A2' || 'A3' || 'B1' || 'B2' || 'B3' || 'C1' || 'C2' || 'C3'){//dosomethingrecursive}
每当我选择说“' A1'”时,就好像选择不是=。据我所知是错的,还是我错过了什么?
答案 0 :(得分:1)
在JavaScript和我知道的所有编程语言中,布尔logic operators没有以这种方式组合,它们遵循固定的bool OPERATOR bool
模式。
这意味着您的一系列带括号的||
首先会逐步转换为一个值,然后将该值与您的choice
进行比较。
实现所需逻辑的最简单方法是利用Array#every对每个值重复逻辑运算,直到操作失败:
['A1', 'A2', 'A3', 'A4'].every(function(x) { x != choice })
转换为:'choice' must be different from every value in 'array'
。
一般情况下,每当你需要重复某些事情时,想想你如何使用数组及其iterator methods来做这件事,它通常是最优雅的方式。
答案 1 :(得分:1)
你不能这样写。 如果你不想(正确)链测试
for line in Selection():
print(line)
并希望更短的内容,您可以将您的值放在数组中,并测试if (choice != 'A1' && choice != 'A2' && ...
不是数组的元素:
choice
答案 2 :(得分:0)
你不能将英文句子翻译成这样的代码 - 代码的含义更精确,在这种情况下不同。
您的代码计算
'A1' || 'A2' || 'A3' || 'B1' || 'B2' || 'B3' || 'C1' || 'C2' || 'C3'
然后将结果与choice
进行比较。这不是你想要的。
你必须单独进行比较,例如
if (choice != 'A1') && (choice != 'A2') && ...