python制作礼物_刚刚,我用Python做了个七夕礼物,差点被女朋友打死

文章转载:万能君

今天可是七夕!有女票的或者正在追妹子的,肯定又在担心准备的礼物女朋友不喜欢,不如再额外准备一个非常“有内涵”“花心思”的礼物!

下面就教大家快速制作一个非常有心的礼物,如果女生感觉你的礼物花心思了,那肯定是好感度倍增啊。

不过需要提醒的是:这个礼物需要妹子花点心思才能领会,没有耐心的那种的妹子,千万不要给她,因为这可能会是分手神器。

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

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

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

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

「数织游戏」

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

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

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

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

你说怎么做出上图呢?

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

聪明方法呢?

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

完整代码如下:

importnumpyasnp

importmatplotlib.pyplotasplt

frommatplotlib.pyplotimportsavefig

importqrcode

defqr_matrix(data):

qr = qrcode.QRCode(version=1, box_size=1, border=1)

qr.add_data(data)

returnnp.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]

returnnp.split(run_lengths, split_on)

defrun_length_encode(matrix):

rle_row = _rle(matrix)

rle_col = _rle(matrix.T)

returnrle_row, rle_col

defnonogram_qr(data):

qr = qr_matrix(data)

row_rle, col_rle = run_length_encode(qr)

shape = np.array(qr.shape) -2

returnshape, row_rle, col_rle

defdraw_nonogram(shape, row_rle, col_rle):

r, c = shape

f = open('qr.griddler',"w")

f.write('MK Version 3.0')

f.write('\n')

f.write('\n')

f.write(str(r)+' '+str(c))

f.write('\n')

f.write('\n')

q=np.zeros((r,c),dtype=int)

forqqinq:

f.write(str(qq)[1:-1].replace("0","?"))

f.write('\n')

f.write('\n')

forcolincol_rle:

f.writelines(str(col[::-1])[1:-1])

f.write('\n')

f.write('\n')

forrowinrow_rle:

f.writelines(str(row[::-1])[1:-1])

f.write('\n')

fig, ax = plt.subplots(figsize=(10,10))

plt.axis('off')

plt.axis('equal')

# draw the grid for the nonogram:

foriinrange(r +1):

ax.plot([0, c], [-i, -i],'k-')

forjinrange(c +1):

ax.plot([j, j], [0, -r],'k-')

# draw the numbers onto the grid

fori, rowinenumerate(row_rle):

foridx, valinenumerate(row[::-1]):

ax.annotate(xy=(-idx -0.5, -i -0.5), s=val, ha='center', va='center')

forj, colinenumerate(col_rle):

foridx, valinenumerate(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)forxinrow_rle + col_rle]) +1

lim_right = max(r, c) +1

ax.set_xlim(-lim_left, lim_right)

ax.set_ylim(-lim_right, lim_left)

returnax

name=input('请输入二维码内容(比如我爱你?):')

ax = draw_nonogram(*nonogram_qr(name))

print('制作完成,图片名字叫做:打印吧.jpg')

savefig("打印吧.jpg")

# plt.show()

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

下面说说这个打包程序。

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

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

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

,如下所示:

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

「数织解密软件」

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

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

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

「小结」

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

最后想要源码和 exe 文件的话,可以扫码回复:七夕

另外女朋友要是耐心不好的,千万!千万!别送这个会被打死的……或者要买口红/包包谢罪……

其实可以考虑考虑为做一个女朋友专属的智能电影推荐系统:

这个网站是学员在老师的协作下制作的,大家如果感兴趣可以私信联系我

秋招在即,为助力七粉们拿高薪,娶白富美,七月在线特邀请某大厂技术leader做一次面试辅导的专题讲座。

讲座纲要

工程师的基本素养

算法工程师的基本素养

简历

面试前的准备

面试中的技巧

如:

硬实力如何展示

数据结构与基础算法

操作系统 – 编程语言

编程工具

大数据与分布式

软实力MAX

怎么说话更加分

怎么做介绍技术更给力

项目细节面试官没听懂怎么办

面试官刁难怎么办?

你可能感兴趣的:(python制作礼物)