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

你说怎么做出上图呢?

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

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

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

咋办呢?

下面就是 Python 出场的时候了,用 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®+’ '+str©)

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 程序即可。

下面说说这个打包程序。

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

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

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值