(Lua)条件语句的行为不符合预期

时间:2014-10-29 22:17:29

标签: lua

我的数学老师有一个额外的信用万圣节问题,如下所示:

每个字母代表一个数字2-9,您需要以下问题才能工作:

技巧+或=治疗

我决定要找到问题的所有可能解决方案(给他留下深刻印象)所以我决定写一个能告诉我所有答案的计算机程序。这是我的以下代码:

  

本地功能checkAdd()

     

局部技巧= k +(10 * c)+(100 * i)+(1000 * r)+(10000 * t)local _or = r +(10 * o)     本地处理= t +(10 * a)+(100 * e)+(1000 * r)+(10000 * t)如果技巧+ _或==   然后处理打印(技巧)打印("" .._或)打印(处理)                 print(t)print(r)print(i)print(c)print(k)print(o)print(e)print(a)end --print(" end")     timer.performWithDelay(1,newNumbers)结束本地函数   checkNumbers8()如果t或r或i或c或k或o或e或a ==" 9"然后         checkAdd()else newNumbers()end end

     

本地函数checkNumbers7()如果t或r或i或c或k或o或e或   a ==" 8"然后checkNumbers8()否则newNumbers()结束

     

本地函数checkNumbers6()如果t或r或i或c或k或o或e或   a ==" 7"然后checkNumbers7()否则newNumbers()结束

     

本地函数checkNumbers5()如果t或r或i或c或k或o或e或   a ==" 6"然后checkNumbers6()否则newNumbers()结束

     

本地函数checkNumbers4()如果t或r或i或c或k或o或e或   a ==" 5"然后checkNumbers5()否则newNumbers()结束

     

本地函数checkNumbers3()如果t或r或i或c或k或o或e或   a ==" 4"然后checkNumbers4()else newNumbers()end end

     

本地函数checkNumbers2()如果t或r或i或c或k或o或e或   a ==" 3"然后checkNumbers3()否则newNumbers()结束

     

本地函数checkNumbers()如果t或r或i或c或k或o或e或a   ==" 2"然后checkNumbers2()否则newNumbers()             结束

     

function newNumbers()t = mRandom(2,9)r = mRandom(2,9)i =   mRandom(2,9)c = mRandom(2,9)k = mRandom(2,9)o = mRandom(2,9)e   = mRandom(2,9)a = mRandom(2,9)checkNumbers()end

     

newNumbers()

*请注意,在函数checkAdd中,我调用函数timer.performwithdelay(在调用函数之前等待1毫秒)。这是因为如果我在没有函数调用的情况下定期运行此代码,则会出现堆栈溢出错误。所以我把我的代码放到了一个用于app开发的框架中,该框架有timer.performwithdelay调用,我将它实现到我的代码中,这样计算机就不会那么不堪重负并导致溢出错误。

我收到以下打印声明:

97552
27
97579
9
7
5
5
2
2
5
7

49325
59
49384
4
9
3
2
5
5
3
8

我收到一些与其他字母相同的字母!而不是所有数字2-9都被使用!我的代码出了什么问题?我测试看是否使用了每个数字2-9

1 个答案:

答案 0 :(得分:1)

我认为有两个主要问题。我没有看到函数mRandom,但我认为它返回数字并且您将它与字符串进行比较。数字2与字符串'2'不同,因此2 == '2'会返回false

第二个问题是(似乎)您正试图比较其中任何一个变量是否具有特定值,但您不能执行if a or b == 2 then含义:执行a或{{ 1}}等于2.为此你需要写b。您拥有的内容评估为:if a == 2 or b == 2评估为a(不是truenil)或false等于2。