Variables 不等于Lua中的这个或那个
我试图验证一个变量不等于这个或那个。我尝试使用以下代码,但两者都不起作用:Variables 不等于Lua中的这个或那个,variables,if-statement,lua,operators,Variables,If Statement,Lua,Operators,我试图验证一个变量不等于这个或那个。我尝试使用以下代码,但两者都不起作用: if x ~=(0 or 1) then print( "X must be equal to 1 or 0" ) return end if x ~= 0 or 1 then print( "X must be equal to 1 or 0" ) return end 有办法做到这一点吗?对于只测试两个值,我个人会这样做: if x ~= 0 and x ~= 1 then
if x ~=(0 or 1) then
print( "X must be equal to 1 or 0" )
return
end
if x ~= 0 or 1 then
print( "X must be equal to 1 or 0" )
return
end
有办法做到这一点吗?对于只测试两个值,我个人会这样做:
if x ~= 0 and x ~= 1 then
print( "X must be equal to 1 or 0" )
return
end
如果您需要针对两个以上的值进行测试,我会将您的选择填充到一个表中,就像这样:
choices = {[0]=true, [1]=true, [3]=true, [5]=true, [7]=true, [11]=true}
if not choices[x] then
print("x must be in the first six prime numbers")
return
end
x~=0或1
与((x~=0)或1)
x~=(0或1)
与(x~=0)
相同
试试这样吧
function isNot0Or1(x)
return (x ~= 0 and x ~= 1)
end
print( isNot0Or1(-1) == true )
print( isNot0Or1(0) == false )
print( isNot0Or1(1) == false )
您的问题源于对
或
运算符的误解,这是学习此类编程语言的人常见的。是的,你眼前的问题可以通过写作来解决,但我会更详细地解释为什么你尝试的解决方案不起作用
当你阅读x~=(0或1)
或x~=0或1
时,很自然地会像解析句子“x不等于0或1”一样解析它。在对该陈述的一般理解中,“x”是主语,“不等于”是谓语或动词短语,“零或一”是宾语,一组由连词连接的可能性。将主语和动词应用于集合中的每个项目
然而,Lua并没有根据英语语法规则来解析它,而是根据它的操作顺序对两个元素进行二进制比较来解析它。每个运算符都有一个确定其求值顺序的值或
的优先级低于~=
,就像数学中加法的优先级低于乘法一样。所有内容的优先级都低于括号
因此,当计算x~=(0或1)
时,解释器将首先计算0或1
(由于括号),然后计算第一次计算的结果,在第二个示例中,它将计算x~=0
,然后将该计算的结果应用于或1
“如果此值不同于nil和false,则返回其第一个参数;否则,或返回其第二个参数”。是相等运算符的倒数==
;如果其参数是不同类型的(x是一个数字,对吗?),则返回true,否则会正常比较其参数
使用这些规则,x~=(0或1)
将分解为x~=0
(在应用或
运算符后),如果x不是0,包括1,则返回“true”,这是不需要的。另一种形式,x~=0或1
将首先计算x~=0
(它可能返回true或false,具体取决于x的值)。然后,它将分解为false或1
或true或1
之一。在第一种情况下,语句将返回1
,在第二种情况下,语句将返回true
。因为Lua的控制结构只考虑了代码> NIL和<代码> false <代码>是错误的,其他任何事情都是真的,如果< < /C> >语句,这将始终进入<代码>,这也不是您想要的。
无法使用编程语言中提供的二进制运算符将单个变量与值列表进行比较。相反,您需要逐个比较变量和每个值。有几种方法可以做到这一点。最简单的方法是将语句“not one or zero”(不能用二进制运算符计算)表示为“not one and not zero”(可以用二进制运算符轻松编写):
if x ~= 1 and x ~= 0 then
print( "X must be equal to 1 or 0" )
return
end
或者,可以使用循环检查这些值:
local x_is_ok = false
for i = 0,1 do
if x == i then
x_is_ok = true
end
end
if not x_is_ok then
print( "X must be equal to 1 or 0" )
return
end
最后,您可以使用关系运算符检查一个范围,然后测试x是否是该范围内的整数(您不需要0.5,对吗?)
如果没有(x>=0和x=0和x,谢谢,这很好地解释了它!如果你还没有,你应该教编程课。:)我对Lua不太了解,但也许你应该提到,如果没有(x==1或x==0),那么你也可以使用,与你提到的德摩根定律相关。
if not (x >= 0 and x <= 1 and math.floor(x) == x) then
print( "X must be equal to 1 or 0" )
return
end