python九宫格矩阵排数

九宫格的填数我用的是比较常规的方法:根据九宫算术填数规律,通过程序方式完成。填数规律:1)最大数填在中间一行、最后一列;2)行+1,列+1,如果新位置没有填数则填下一个数;3)否则,
退回原位置,执行列-1操作,然后填下一个数。

这里我使用python中numpy库的np.zeros((n,n))方法,创建了一个n*n阶的矩阵以便于填数和输出。

​
#九宫算术
import numpy as np
n = int(input())
a=np.zeros((n,n))
r,c = n//2,n-1        #行,列
for i in range(n*n,0,-1):
    a[r][c] = i       #先填最大的数
    r = (r+1)%n       #取模(防止超出范围)
    c = (c+1)%n
    if a[r][c] != 0:  #填数重复
        r = (r-1)%n   #退回原位
        c = (c-2)%n   #执行列-1
print(a)

输出:

3
[[6. 7. 2.]
 [1. 5. 9.]
 [8. 3. 4.]]

5
[[15. 16. 22.  3.  9.]
 [ 8. 14. 20. 21.  2.]
 [ 1.  7. 13. 19. 25.]
 [24.  5.  6. 12. 18.]
 [17. 23.  4. 10. 11.]]

......

代码中的巧妙之处就是取模的操作了,我刚开始写九宫格这题时看了许多别人的代码方法,大都需要判断填数是上(下)还是左(右)超出范围,并且需要多次更新位置,使代码看起来很复杂。但在矩阵中取模就可以巧妙的减少这些判断。

本人初学python有不足之处希望能评论留言予以指出,望一起进步!!!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

垂葛酒肝汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值