首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python 生成舒尔特方格

最近因为有需要生成 《舒尔特方格》,自己手动做了一个,就像这样的,

用来训练注意力很有用。

在思考完成方法的时候,就想到,为什么不用程序来搞定呢?

规则确定:

首先第一个思路,所谓 舒尔特方格就是不重复的 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 可以增加更多的条件,不过如果参数不正确,也未免会落入死循环,运行之前好好思考一下吧。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181125G1J2YQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券