用 Python 給女友做了個可能會被打死的七夕禮物
馬上就是七夕了,曉得你們有女票的或者正在追妹子的,肯定又在絞盡腦汁想買什麼別出新裁的禮物,如果女生感覺你的禮物花心思了,那肯定是好感度倍增啊。
今天給各位分享一個用 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('\n')
f.write('\n')
f.write(str(r)+' '+str(c))
f.write('\n')
f.write('\n')
q=np.zeros((r,c),dtype=int)
for qq in q:
f.write(str(qq)[1:-1].replace("0", "?"))
f.write('\n')
f.write('\n')
for col in col_rle:
f.writelines(str(col[::-1])[1:-1])
f.write('\n')
f.write('\n')
for row in row_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:
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,嗯,這個也很有意思,我們接著說。
「數織解密軟體」
其實吧,這個生成的21*21或者以上大小的數織難度還是挺高的,不能讓女友做不出來啊,你得在身邊提示一下啊,那麼這款解密軟體派上用場。
我們下載解壓開啟,如下開啟我們前文生成的qr.griddler。
然後點選如下箭頭指示按鈕即可解密,如下動圖(小機率會發生多個解的現象,不過二維碼有容錯率,所以掃到的文字是一樣的):
▼
這同時也是驗證的過程,萬一出的題無解,不過這個的程式應該沒啥問題,應該不會出現這種現象。
「小結」
這個禮物認認真真整出來,估計得花個個把小時,七夕好時光,好好利用哈。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900353/viewspace-2652751/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式設計師給女友最好的禮物是....程式設計師
- 開學送給她的禮物(Python實現)Python
- YouGov:2/5的美國人會給伴侶買情人節禮物Go
- 碼上七夕丨參加沸點 #程式碼寫詩# 活動來掘金拿七夕禮物
- 今年的情人節,給心愛的她一個不一樣的禮物吧
- 獻給 Dapper 使用者的一份禮物APP
- 愚人節的禮物(stack棧的運用)
- 迴歸初心,《原始征途》是送給征途玩家的禮物
- 【二分】華華給月月準備禮物
- 你可能不太會用的10個Git命令Git
- 學姐的禮物
- 十年藍圖與產業升級:百度NLP給你的七夕禮贈產業
- iOS 直播間送禮物邏輯(禮物連擊)iOS
- [Tkey] 生日禮物
- ❤️馬上七夕,不懂浪漫?帶你用Python“碼”上七夕【建議收藏】❤️Python
- 關於Spring的這15點總結,打死都要會。Spring
- 如何用Python過一個完美的七夕節?Python
- 在位元組跳動做了6年測試,5月無情被辭,想給划水的兄弟提個醒
- 從0開始寫一個直播間的禮物系統
- 做了個知乎專欄小程式版,分享給大家
- DeepMind給AI模型做了個IQ測試,結果是這樣的AI模型
- 9款AI女友應用推薦AI
- 1024程式設計師的節日,千鋒給你一份不一樣的禮物程式設計師
- 為何Python會被選用為駭客語言呢?Python
- 遊戲史記(一):上帝的禮物遊戲
- JZ-072-禮物的最大價值
- OnePoll:聖誕節拆禮物平均每人用半小時
- 無法新增某個relationship給SAP CRM Product category的一個可能原因Go
- 【福利活動】給你的程式碼疊個 Buff!點選“茶”收好禮
- 全網預約2000萬,這款手遊是十二歲的光子送給世界的新禮物
- 講真,你可能真不會用Github!Github
- 用 Python 給自己的頭像加一個小國旗(小月餅)Python
- 七夕獻禮 | 平安產險1.5倍獎勵眾測活動
- YouGov:有5-7歲孩子的父母中有58%會購買遊戲禮物Go遊戲
- 【USACO題庫】 Greedy Gift Givers貪婪的禮物送禮者c++C++
- 給AI開發者的新年禮物,技術公開課大放送(附演講PPT)AI
- 一看即會:Serverless 應用開發的 7 個實戰小技巧(文末附好禮)Server
- 你可能會用到的一個路由介面卡路由