明天就是七夕了,晓得你们有女票的或者正在追妹子的,肯定又在绞尽脑汁想买什么别出新裁的礼物,如果女生感觉你的礼物花心思了,那肯定是好感度倍增啊。

今天给各位分享一个用 Python 制作的成本一毛钱却诚意满满的小礼物。不过需要提醒的是:这个礼物需要妹子花点心思才能领会,没有耐心的那种的妹子,千万不要给她,因为这可能会是分手神器

下面就来说说,怎么制作这个礼物。

简单来说就用一张A4纸,打印个表格,嗯,表格是干啥用?其实就是手绘二维码,当然二维码内容你懂得,利用的下面这个手绘二维码app,会分成格子,提示你哪个涂黑。

▼Python资源共享群:484031800

不过,这种套路貌似被用滥了

所以今天说的这个明显是手绘二维码的升级版,成本依然是一毛钱,不仅你要费心思,女孩也要去费心思,这样才好玩嘛

「数织游戏」

来,我们一步一步来,我们先说说数织这个游戏,然后你就知道大概用意了。数织(nonogram)是日本人的数独游戏。

如下是数织的规则,简单易懂。分行和列,行和列都标记了一些数字,比如下图的第一行7 1 2 7,代表第一行有四条独立的线,分别占了7、1、2和7格,而每条线最少要由一个空格分开。

传统上,玩家是以黑色填满格子,以“×”号标记一定不需要填充的格子。所以聪明的你肯定就会知道第一列7 1 1 1 7代表什么意思。

所以数织就是如下这样玩,给你的图片只有行列数字,格子需要自己根据规则涂黑,所以你也知道了,我们做的就是下面的图,将二维码隐藏其中。让女孩涂黑,扫码即可。

「制作隐藏二维码的数织图」

你说怎么做出上图呢?

对于笨办法,就是开头说的手绘二维码app,如下它会分21*21或者更多的格子,告诉你哪个该涂黑,相应的你就知道该填写哪些数织数字。

可上面做法确实繁琐了,数字自己写,还得整理打印。

咋办呢?

下面就是 Python 出场的时候了,用 Python 编写一个输入二维码文字,一键生成数织图片的程序然后直接打印即可

完整代码如下:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import savefig
import qrcode
def qr_matrix(data):qr = qrcode.QRCode(version=1, box_size=1, border=1)qr.add_data(data)return np.asarray(qr.get_matrix(), dtype = int)
def _rle(matrix):# find run start and endsd = np.diff(matrix)row, start_pos = np.where(d > 0)_, end_pos = np.where(d < 0)# find run lengthsrun_lengths = end_pos - start_pos# split runs from different rows into separate arrayssplit_on = np.cumsum(np.bincount(row - 1))[:-1]return np.split(run_lengths, split_on)
def run_length_encode(matrix):rle_row = _rle(matrix)rle_col = _rle(matrix.T)return rle_row, rle_col
def nonogram_qr(data):qr = qr_matrix(data)row_rle, col_rle = run_length_encode(qr)shape = np.array(qr.shape) - 2return shape, row_rle, col_rle
def draw_nonogram(shape, row_rle, col_rle):r, c = shapef = open('qr.griddler', "w")f.write('MK Version 3.0')f.write('
')f.write('
')f.write(str(r)+' '+str(c))f.write('
')f.write('
')q=np.zeros((r,c),dtype=int)for qq in q:f.write(str(qq)[1:-1].replace("0", "?"))f.write('
')f.write('
')for col in col_rle:f.writelines(str(col[::-1])[1:-1])f.write('
')f.write('
')for row in row_rle:f.writelines(str(row[::-1])[1:-1])f.write('
')fig, ax = plt.subplots(figsize=(10, 10))plt.axis('off')plt.axis('equal')# draw the grid for the nonogram:for i in range(r + 1):ax.plot([0, c], [-i, -i], 'k-')for j in range(c + 1):ax.plot([j, j], [0, -r], 'k-')# draw the numbers onto the gridfor i, row in enumerate(row_rle):for idx, val in enumerate(row[::-1]):ax.annotate(xy=(-idx - 0.5, -i - 0.5), s=val, ha='center', va='center')for j, col in enumerate(col_rle):for idx, val in enumerate(col[::-1]):ax.annotate(xy=(j + 0.5, idx + 0.5), s=val, ha='center', va='center')# adjust x and y limitslim_left = max([len(x) for x in row_rle + col_rle]) + 1lim_right = max(r, c) + 1ax.set_xlim(-lim_left, lim_right)ax.set_ylim(-lim_right, lim_left)return ax
name=input('请输入二维码内容(比如我爱你?):')
ax = draw_nonogram(*nonogram_qr(name))
print('制作完成,图片名字叫做:打印吧.jpg')
savefig("打印吧.jpg")
# plt.show()

当然不想这么麻烦的话,我这里把程序也打包好了,各位直接运行exe 程序即可。

下面说说这个打包程序。

如下,下载解压,运行(注意可能打开速度挺慢,耐心等待黑框出现),输入二维码文字。

然后回车,等待,就能在软件目录看到打印吧.jpg。

这个图片你要准备的一毛钱礼物

,如下所示:

而细心的你肯定还看到另一个箭头的文件:qr.griddler,嗯,这个也很有意思,我们接着说。

「数织解密软件」

其实吧,这个生成的21*21或者以上大小的数织难度还是挺高的,不能让女友做不出来啊,你得在身边提示一下啊,那么这款解密软件派上用场。

我们下载解压打开,如下打开我们前文生成的qr.griddler。

然后点击如下箭头指示按钮即可解密,如下动图(小概率会发生多个解的现象,不过二维码有容错率,所以扫到的文字是一样的):

这同时也是验证的过程,万一出的题无解,不过这个的程序应该没啥问题,应该不会出现这种现象

「小结」

这个礼物认认真真整出来,估计得花个个把小时,七夕好时光,好好利用哈。

用 Python 给女友做了个可能会被打死的七夕礼物 !相关推荐

  1. 用 Python 给女友做了个可能会被打死的七夕礼物

    明天就是七夕了,晓得你们有女票的或者正在追妹子的,肯定又在绞尽脑汁想买什么别出新裁的礼物,如果女生感觉你的礼物花心思了,那肯定是好感度倍增啊. 今天给各位分享一个用 Python 制作的成本一毛钱却诚 ...

  2. 明天就是七夕了,用Python做了个可能会被女朋友打死的礼物!

    明天就是七夕了,晓得你们有女票的或者正在追妹子的,肯定又在绞尽脑汁想买什么别出新裁的礼物,如果女生感觉你的礼物花心思了,那肯定是好感度倍增啊. 今天给各位分享一个用 Python 制作的成本一毛钱却诚 ...

  3. 学会python之后-python学会后做什么

    很多朋友可能会问,为什么要学Python, 就算学会了Python 可以用来干什么呢? 一般都会首先想到爬虫. 爬虫不是说的那种虫子哦, 爬虫其实就是 类似于百度蜘蛛,谷歌蜘蛛一样的. 会自动的爬取网 ...

  4. Python识别表格图_使用Python究竟可以做什么?下面是Python的3个主要应用

    原文传送门: https://medium.com/free-code-camp/what-can-you-do-with-python-the-3-main-applications-518db9a ...

  5. 五位专家跟你讲讲为啥Python更适合做AI/机器学习

    摘要: 为什么Python会在这股深度学习浪潮中成为编程语言的头牌?听听大牛如何解释吧! 原文地址:http://click.aliyun.com/m/43988/ 1.Python网络编程框架Twi ...

  6. 你知道吗?Python原来可以做这些

    如果你准备开始学习Python或者你已经开始了学习Python,那么,你肯能会问自己: "我用Python究竟能做些什么?" 嗯,这是一个棘手的问题,因为Python有很多应用方向 ...

  7. python和lisp学哪个好_五位专家跟你讲讲为啥Python更适合做AI/机器学习

    摘要: 为什么Python会在这股深度学习浪潮中成为编程语言的头牌?听听大牛如何解释吧! 1.Python网络编程框架Twisted的创始人Glyph Lefkowitz(glyph): 编程是一项社 ...

  8. python能做什么-Python到底能做什么?

    image 愿码Slogan | 连接每个程序员的故事 愿码愿景 | 打造全学科IT系统免费课程,助力小白用户.初级工程师0成本免费系统学习.低成本进阶,帮助BAT一线资深工程师成长并利用自身优势创造 ...

  9. python是干什么用的-使用Python究竟可以做什么?下面是Python的3个主要应用

    原文传送门: https://medium.com/free-code-camp/what-can-you-do-with-python-the-3-main-applications-518db9a ...

最新文章

  1. pandas使用pad函数向dataframe特定数据列的每个字符串添加后置(后缀)补齐字符或者字符串、向所有字符串的右侧填充、直到宽度达到指定要求(right padding)
  2. POJ 1976 A Mini Locomotive【DP】
  3. 【分布式共识二】拜占庭将军问题----口头协议
  4. 文本分析:吉利不裁员不降薪背后的真相是什么
  5. 1715: 序列变换(LIS变形)
  6. ASP.NET Core Authentication and Authorization
  7. 那一年,我考入了西北师范大学GIS专业,然而我很迷茫,GISer的职业规划到底是怎样的?
  8. php导入sql文件到数据库中,PHP执行SQL文件并将SQL文件导入到数据库
  9. linux下安装不同版本的jdk
  10. mysql年龄数据类型_MySql 数据类型
  11. GRUB4DOS 0.4.5c 2014-01-17.问题解决
  12. wpf/sl下的复合程序-CAG入门
  13. BUUCTF RSA(二)
  14. Linux系统文件加密与解密应用
  15. NKOJ 2770 难度系数(最小生成树)
  16. URP/LWRP Shader实现描边效果
  17. mac电脑安装maple2017
  18. react项目中解决IE浏览器下报Promise未定义的错误
  19. Delphi 2010正式版下载(RAD Studio 2010下载)
  20. Smith Chart - for myself

热门文章

  1. 解决SimpleDateFormat线程不安全问题
  2. STA setup/hold time可以是负数么?
  3. 数字IC设计工程师成长四阶段
  4. Sentinel vs Hystrix 对比,你怎么选?
  5. 第三方微信登录 | 静默授权与网页授权的实现
  6. Java实现 蓝桥杯VIP 算法提高 促销购物
  7. 【笔记整理】通信原理第五章复习——模拟信号的数字化
  8. 高中数学关于计算机的知识,高中数学必修4知识点总结归纳_数学_高中教育_教育专区.doc...
  9. Windows11来了,第一个适用于Windows 11的Insider Preview
  10. e-a乘a的转置的秩_通用矩阵乘(GEMM)优化与卷积计算