美文网首页大数据 爬虫Python AI SqlPython小哥哥
明天就是七夕了,用Python做了个可能会被女朋友打死的礼物!

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

作者: 轻松学Python111 | 来源:发表于2019-08-06 20:44 被阅读15次

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

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

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

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

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

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

    「数织游戏」

    来,我们一步一步来,我们先说说数织这个游戏,然后你就知道大概用意了。数织(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 ends
     d = np.diff(matrix)
     row, start_pos = np.where(d > 0)
     _, end_pos = np.where(d < 0)
     # find run lengths
     run_lengths = end_pos - start_pos
     # split runs from different rows into separate arrays
     split_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) - 2
     return shape, row_rle, col_rle
    def draw_nonogram(shape, row_rle, col_rle):
     r, c = shape
     f = 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 grid
     for 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 limits
     lim_left = max([len(x) for x in row_rle + col_rle]) + 1
     lim_right = max(r, c) + 1
     ax.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,嗯,这个也很有意思,我们接着说。

    「数织解密软件」

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

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

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

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

    「小结」

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

    相关文章

      网友评论

        本文标题:明天就是七夕了,用Python做了个可能会被女朋友打死的礼物!

        本文链接:https://www.haomeiwen.com/subject/jqhgdctx.html