最近因为有需要生成 《舒尔特方格》,自己手动做了一个,就像这样的,
用来训练注意力很有用。
在思考完成方法的时候,就想到,为什么不用程序来搞定呢?
规则确定:
首先第一个思路,所谓 舒尔特方格就是不重复的 25 个数,这一点用任何程序都能很好的实现,网上有些程序也是这么做的,不过把连续的数字放在一起会出问题,比如 2旁边就是 3 ,肯定会干扰训练质量,
所以,我们还需要一点稍微的定制:
方格周围最好不出现相差一个数的数字序列。
对于计算机来说,就是一个数组或者列表中元素的上一个元素(或下一个),或者前 5 后5 的元素与相同元素比较,绝对值不为1。
规则基本上就确定下来了,然后,我就 Python 一下吧。
有趣的Python 随机数:
Python 中的 random 可以说是一个有趣又强大的库,用它生成随机数,可以说方便极了,针对我们的课题,用:
a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
suertMatrix = random.sample(a,25)
足以生成不重复的,有连续的序列。
那么针对我们定制的要求,需要做一定修正:
这里做了一个 checklist ,如果满足要求就输出结果,如果不满足我们的要求就重新生成,不要太方便:
# 生成之后进行一下校验,如果满足要求就接受,不满足要求重新搞
defchecklist(olist):
ok=True
fori, ainenumerate(olist):
prv=i-1
upr=i-5
#
pass
# >5 的判断, 和前面,上面绝对值不能等于 1
if(abs(a-olist[upr])==1):
#print(str(a) + ' --- ' + str(olist[upr]))
ok=False
break
pass
#循环内通用判断
if(abs(a-olist[prv])==1):
#print(str(a) + ' ,,, ' + str(olist[prv]))
ok=False
break
pass
returnok
接着,我们来瞅瞅结果。 =)
完全符合要求, 当然,修改 checklist 可以增加更多的条件,不过如果参数不正确,也未免会落入死循环,运行之前好好思考一下吧。
领取专属 10元无门槛券
私享最新 技术干货