我的数学老师有一个额外的信用万圣节问题,如下所示:
每个字母代表一个数字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
答案 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
(不是true
或nil
)或false
等于2。