Python弹奏起风了钢琴曲,带你回到2018年的夏天

技术
写在前面

引子

那年夏天,有《纸短情长》,有《稻香》,有《可不可以》,有《体面》,还有《起风了》……本期小编给大家分享 Python 弹奏的《 起风了 》钢琴曲,一起来看看吧!

picture.image

逛逛主页

《起风了》

《起风了》是一首深情流行的中文歌曲,最初发行于2017年2月22日,由买辣椒也用券和米果填词,基于日本音乐人高桥优的作品《ヤキモチ》改编而来。这首歌以其深刻的歌词和悠扬旋律迅速走红,讲述了一位少年从青涩到成熟的心路历程,以及对爱情和人生的深刻感悟。它描绘了对世界的无限好奇与留恋,表达了即使面对重重困难也勇于追寻梦想与爱情的勇气。

picture.image

起风了歌词

          
我曾将青春翻涌成她  
也曾指尖弹出盛夏  
心之所动 且就随缘去吧  

      

          
这一路上走走停停  
顺着少年漂流的痕迹  
迈出车站的前一刻  
竟有些犹豫  

      

          
不禁笑这近乡情怯  
仍无可避免  
而长野的天  
依旧那么暖  
风吹起了从前  

      

          
从前初识这世间  
万般流连  
看着天边似在眼前  
也甘愿赴汤蹈火去走它一遍  

      

          
如今走过这世间  
万般流连  
翻过岁月不同侧脸  
措不及防闯入你的笑颜  

      

          
我曾难自拔于世界之大  
也沉溺于其中梦话  
不得真假 不做挣扎 不惧笑话  

      

          
我曾将青春翻涌成她  
也曾指尖弹出盛夏  
心之所动 且就随缘去吧  
逆着光行走 任风吹雨打
      
Python起风了

完整代码


        
          
import ctypes  
import threading  
import time  
winmm = ctypes.windll.winmm  
class Scale:  
Rest = 0  
C8 = 108  
B7 = 107  
A7s = 106  
A7 = 105  
G7s = 104  
G7 = 103  
F7s = 102  
F7 = 101  
E7 = 100  
D7s = 99  
D7 = 98  
C7s = 97  
C7 = 96  
B6 = 95  
A6s = 94  
A6 = 93  
G6s = 92  
G6 = 91  
F6s = 90  
F6 = 89  
E6 = 88  
D6s = 87  
D6 = 86  
C6s = 85  
C6 = 84  
B5 = 83  
A5s = 82  
A5 = 81  
G5s = 80  
G5 = 79  
F5s = 78  
F5 = 77  
E5 = 76  
D5s = 75  
D5 = 74  
C5s = 73  
C5 = 72  
B4 = 71  
A4s = 70  
A4 = 69  
G4s = 68  
G4 = 67  
F4s = 66  
F4 = 65  
E4 = 64  
D4s = 63  
D4 = 62  
C4s = 61  
C4 = 60  
B3 = 59  
A3s = 58  
A3 = 57  
G3s = 56  
G3 = 55  
F3s = 54  
F3 = 53  
E3 = 52  
D3s = 51  
D3 = 50  
C3s = 49  
C3 = 48  
B2 = 47  
A2s = 46  
A2 = 45  
G2s = 44  
G2 = 43  
F2s = 42  
F2 = 41  
E2 = 40  
D2s = 39  
D2 = 38  
C2s = 37  
C2 = 36  
B1 = 35  
A1s = 34  
A1 = 33  
G1s = 32  
G1 = 31  
F1s = 30  
F1 = 29  
E1 = 28  
D1s = 27  
D1 = 26  
C1s = 25  
C1 = 24  
B0 = 23  
A0s = 22  
A0 = 21  
class Voice:  
X1 = Scale.C2  
X2 = Scale.D2  
X3 = Scale.E2  
X4 = Scale.F2  
X5 = Scale.G2  
X6 = Scale.A2  
X7 = Scale.B2  
L1 = Scale.C3  
L2 = Scale.D3  
L3 = Scale.E3  
L4 = Scale.F3  
L5 = Scale.G3  
L6 = Scale.A3  
L7 = Scale.B3  
M1 = Scale.C4  
M2 = Scale.D4  
M3 = Scale.E4  
M4 = Scale.F4  
M5 = Scale.G4  
M6 = Scale.A4  
M7 = Scale.B4  
H1 = Scale.C5  
H2 = Scale.D5  
H3 = Scale.E5  
H4 = Scale.F5  
H5 = Scale.G5  
H6 = Scale.A5  
H7 = Scale.B5  
LOW_SPEED = 500  
MIDDLE_SPEED = 400  
HIGH_SPEED = 300  
_ = 0xFF  
def playNote(hmo, channel, instrument, note, velocity, duration=0):  
    # 设置乐器  
msg = 0xC0 | channel | (instrument << 8)  
winmm.midiOutShortMsg(hmo, msg)  
    # 发送 Note On 消息  
msg = 0x90 | channel | (note << 8) | (velocity << 16)  
winmm.midiOutShortMsg(hmo, msg)  
if duration:  
        # 暂停 duration 秒钟  
time.sleep(duration)  
        # 发送 Note Off 消息  
msg = 0x80 | channel | (note << 8) | (velocity << 16)  
winmm.midiOutShortMsg(hmo, msg)  
return channel | (instrument << 8) | (note << 8) | (velocity << 16) + 0x90  
def go(handle, instrument, velocity):  
wind = [400, 0, Voice.L7, Voice.M1, Voice.M2, Voice.M3, 300, Voice.L3, 0, Voice.M5, Voice.M3, 300, Voice.L2,  
Voice.L5, 2, Voice._, 0, Voice.L7, Voice.M1, Voice.M2, Voice.M3, 300, Voice.L2, 0, Voice.M5, Voice.M3,  
Voice.M2, Voice.M3, Voice.M1, Voice.M2, Voice.L7, Voice.M1, 300, Voice.L5, 0, Voice.L7, Voice.M1, Voice.M2,  
Voice.M3, 300, Voice.L3, 0, Voice.M5, Voice.M3, 300, Voice.L2, Voice.L5, 2, Voice._, 0, Voice.L7, Voice.M1,  
Voice.M2, Voice.M3, 300, Voice.L2, 0, Voice.M5, Voice.M3, Voice.M2, Voice.M3, Voice.M1, Voice.M2, Voice.L7,  
Voice.M1, 300, Voice.L5,  
0, Voice.L7, Voice.M1, Voice.M2, Voice.M3, 300, Voice.L3, 0, Voice.M5, Voice.M3, 300, Voice.L2, Voice.L5, 2,  
Voice._, 0, Voice.L7, Voice.M1, Voice.M2, Voice.M3, 300, Voice.L2, 0, Voice.M5, Voice.M3, Voice.M2,  
Voice.M3, Voice.M1, Voice.M2, Voice.L7, Voice.M1, 300, Voice.L5, 0, Voice.L7, Voice.M1, Voice.M2, Voice.M3,  
300, Voice.L3, 0, Voice.M5, Voice.M3, 300, Voice.L2, Voice.L5, 2, Voice._,  
0, Voice.M6, Voice.M3, Voice.M2, Voice.L6, Voice.M3, Voice.L6, Voice.M2, Voice.M3, Voice.L6, Voice._,  
Voice._, Voice._,  
Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, Voice.M3, Voice.M5, 0, Voice.M3,  
700, 300, Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, 700, 0, Voice.M1, Voice.M2, Voice.M3, Voice.M2,  
Voice.M1, 300, Voice.L5, Voice._,  
Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, Voice.M3, Voice.M5, 0, Voice.M3,  
700, 300, Voice.M2, 700, 0, Voice.M3, 300, Voice.M2, 0, Voice.M1, 700, 300, Voice.M2, Voice._, Voice._,  
Voice._,  
Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, Voice.M3, Voice.M5, 0, Voice.M3,  
700, 300, Voice.M2, 700, 0, Voice.M3, 300, Voice.M2, 0, Voice.M1, 700, 300, Voice.L6, Voice._,  
0, Voice.M3, Voice.M2, Voice.M1, Voice.M2, 300, Voice.M1, Voice._, 0, Voice.M3, Voice.M2, Voice.M1,  
Voice.M2, 300, Voice.M1, 700, 0, Voice.L5, Voice.M3, Voice.M2, Voice.M1, Voice.M2, 300, Voice.M1, Voice._,  
Voice._, Voice._,  
Voice.M1, Voice.M2, Voice.M3, Voice.M1, Voice.M6, 0, Voice.M5, Voice.M6, 300, Voice._, 700, 0, Voice.M1,  
300, Voice.M7, 0, Voice.M6, Voice.M7, 300, Voice._, Voice._, Voice.M7, 0, Voice.M6, Voice.M7, 300, Voice._,  
Voice.M3, 0, Voice.H1, Voice.H2, Voice.H1, Voice.M7, 300, Voice.M6, Voice.M5, Voice.M6, 0, Voice.M5,  
Voice.M6, Voice._, Voice.M5, Voice.M6, Voice.M5, 300, Voice.M6, 0, Voice.M5, Voice.M2, 300, Voice._, 0,  
Voice.M5, 700, 300, Voice.M3, Voice._, Voice._, Voice._,  
Voice.M1, Voice.M2, Voice.M3, Voice.M1, Voice.M6, 0, Voice.M5, Voice.M6, 300, Voice._, 700, 0, Voice.M1,  
300, Voice.M7, 0, Voice.M6, Voice.M7, 300, Voice._, Voice._, Voice.M7, 0, Voice.M6, Voice.M7, 300, Voice._,  
Voice.M3, 0, Voice.H1, Voice.H2, Voice.H1, Voice.M7, 300, Voice.M6, Voice.M5, Voice.M6, 0, Voice.H3,  
Voice.H3, 300, Voice._, Voice.M5, Voice.M6, 0, Voice.H3, Voice.H3, 300, Voice._, 0, Voice.M5, 700, 300,  
Voice.M6, Voice._, Voice._, Voice._, Voice._, Voice._,  
Voice.H1, Voice.H2, Voice.H3, 0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H6, Voice.H5, 300, Voice._, 0,  
Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H2, Voice.H3, 300, Voice.H3, 0, Voice.H6, Voice.H5, 300, Voice._,  
0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H2, Voice.H3, 300,  
Voice.H2, 0, Voice.H1, Voice.M6, 300, Voice._, 0, Voice.H1, Voice.H1, 300, Voice.H2, 0, Voice.H1, 300,  
Voice.M6, 700, 0, Voice._, 300, Voice.H1, 700, Voice.H3, Voice._, 0, Voice.H3, Voice.H4, Voice.H3, Voice.H2,  
Voice.H3, 300, Voice.H2, 700,  
Voice.H1, Voice.H2, Voice.H3, 0, Voice.H6, Voice.H5, Voice._, Voice.H6, Voice.H5, Voice._, Voice.H6,  
Voice.H5, 300, Voice._, Voice.H3, Voice.H3, 0, Voice.H6, Voice.H5, Voice._, Voice.H6, Voice.H5, Voice._,  
Voice.H6, Voice.H5, 700, 300, Voice.H3, 700, Voice.H2, 0, Voice.H1, Voice.M6, 700, 300,  
Voice.H3, 700, Voice.H2, 0, Voice.H1, 300, Voice.M6, 700, Voice.H1, Voice.H1, Voice._, Voice._, Voice._,  
Voice._, Voice._,  
0, Voice.M6, 300, Voice.H3, 700, Voice.H2, 0, Voice.H1, Voice.M6, 700, 300, Voice.H3, Voice.H2, 700, 300, 0,  
Voice.H1, Voice.M6, 300, 700, Voice.H1, Voice.H1, Voice._, Voice._,  
0, Voice.L7, Voice.M1, Voice.M2, Voice.M3, 300, Voice.L3, 0, Voice.M5, Voice.M3, 300, Voice.L2, Voice.L5, 2,  
Voice._, 0, Voice.L7, Voice.M1, Voice.M2, Voice.M3, 300, Voice.L2, 0, Voice.M5, Voice.M3, Voice.M2,  
Voice.M3, Voice.M1, Voice.M2, Voice.L7, Voice.M1, 300, Voice.L5, 0, Voice.L7, Voice.M1, Voice.M2, Voice.M3,  
300, Voice.L3, 0, Voice.M5, Voice.M3, 300, Voice.L2, Voice.L5, 2, Voice._,  
0, Voice.M6, Voice.M3, Voice.M2, Voice.L6, Voice.M3, Voice.L6, Voice.M2, Voice.M3, Voice.L6, Voice._,  
Voice._, Voice._,  
Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, Voice.M3, Voice.M5, 0, Voice.M3,  
700, 300, Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, 700, 0, Voice.M1, Voice.M2, Voice.M3, Voice.M2,  
Voice.M1, 300, Voice.L5, Voice._,  
Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, Voice.M3, Voice.M5, 0, Voice.M3,  
700, 300, Voice.M2, 700, 0, Voice.M3, 300, Voice.M2, 0, Voice.M1, 700, 300, Voice.M2, Voice._, Voice._,  
Voice._,  
Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, 700, 0, Voice.M1, 300, Voice.M2, Voice.M3, Voice.M5, 0, Voice.M3,  
700, 300, Voice.M2, 700, 0, Voice.M3, 300, Voice.M2, 0, Voice.M1, 700, 300, Voice.L6, Voice._,  
0, Voice.M3, Voice.M2, Voice.M1, Voice.M2, 300, Voice.M1, Voice._, 0, Voice.M3, Voice.M2, Voice.M1,  
Voice.M2, 300, Voice.M1, 700, 0, Voice.L5, Voice.M3, Voice.M2, Voice.M1, Voice.M2, 300, Voice.M1, Voice._,  
Voice._, Voice._,  
Voice.M1, Voice.M2, Voice.M3, Voice.M1, Voice.M6, 0, Voice.M5, Voice.M6, 300, Voice._, 700, 0, Voice.M1,  
300, Voice.M7, 0, Voice.M6, Voice.M7, 300, Voice._, Voice._, Voice.M7, 0, Voice.M6, Voice.M7, 300, Voice._,  
Voice.M3, 0, Voice.H1, Voice.H2, Voice.H1, Voice.M7, 300, Voice.M6, Voice.M5, Voice.M6, 0, Voice.M5,  
Voice.M6, Voice._, Voice.M5, Voice.M6, Voice.M5, 300, Voice.M6, 0, Voice.M5, Voice.M2, 300, Voice._, 0,  
Voice.M5, 700, 300, Voice.M3, Voice._, Voice._, Voice._,  
Voice.M1, Voice.M2, Voice.M3, Voice.M1, Voice.M6, 0, Voice.M5, Voice.M6, 300, Voice._, 700, 0, Voice.M1,  
300, Voice.M7, 0, Voice.M6, Voice.M7, 300, Voice._, Voice._, Voice.M7, 0, Voice.M6, Voice.M7, 300, Voice._,  
Voice.M3, 0, Voice.H1, Voice.H2, Voice.H1, Voice.M7, 300, Voice.M6, Voice.M5, Voice.M6, 0, Voice.H3,  
Voice.H3, 300, Voice._, Voice.M5, Voice.M6, 0, Voice.H3, Voice.H3, 300, Voice._, 0, Voice.M5, 700, 300,  
Voice.M6, Voice._, Voice._, Voice._, Voice._, Voice._,  
Voice.H1, Voice.H2, Voice.H3, 0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H6, Voice.H5, 300, Voice._, 0,  
Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H2, Voice.H3, 300, Voice.H3, 0, Voice.H6, Voice.H5, 300, Voice._,  
0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H2, Voice.H3, 300,  
Voice.H2, 0, Voice.H1, Voice.M6, 300, Voice._, 0, Voice.H1, Voice.H1, 300, Voice.H2, 0, Voice.H1, 300,  
Voice.M6, 700, 0, Voice._, 300, Voice.H1, 700, Voice.H3, Voice._, 0, Voice.H3, Voice.H4, Voice.H3, Voice.H2,  
Voice.H3, 300, Voice.H2, 700,  
Voice.H1, Voice.H2, Voice.H3, 0, Voice.H6, Voice.H5, Voice._, Voice.H6, Voice.H5, Voice._, Voice.H6,  
Voice.H5, 300, Voice._, Voice.H3, Voice.H3, 0, Voice.H6, Voice.H5, Voice._, Voice.H6, Voice.H5, Voice._,  
Voice.H6, Voice.H5, 700, 300, Voice.H3, 700, Voice.H2, 0, Voice.H1, Voice.M6, 700, 300,  
Voice.H3, 700, Voice.H2, 0, Voice.H1, 300, Voice.M6, 700, Voice.H1, Voice.H1, Voice._, Voice._, Voice._,  
Voice._, Voice._,  
Voice.H1, Voice.H2, Voice.H3, 0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H6, Voice.H5, 300, Voice._, 0,  
Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H2, Voice.H3, 300, Voice.H3, 0, Voice.H6, Voice.H5, 300, Voice._,  
0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H2, Voice.H3, 300,  
Voice.H2, 0, Voice.H1, Voice.M6, 300, Voice._, 0, Voice.H1, Voice.H1, 300, Voice.H2, 0, Voice.H1, 300,  
Voice.M6, 700, 0, Voice._, 300, Voice.H1, 700, Voice.H3, Voice._, 0, Voice.H3, Voice.H4, Voice.H3, Voice.H2,  
Voice.H3, 300, Voice.H2, 700,  
Voice.H2, Voice.H3, 0, Voice.H6, Voice.H5, Voice._, Voice.H6, Voice.H5, Voice._, Voice.H6, Voice.H5, 300,  
Voice._, Voice.H3, Voice.H3, 0, Voice.H6, Voice.H5, Voice._, Voice.H6, Voice.H5, Voice._, Voice.H6,  
Voice.H5, 700, 300, Voice.H3, 700, Voice.H2, 0, Voice.H1, Voice.M6, 700, 300,  
Voice.H3, 700, Voice.H2, 0, Voice.H1, 300, Voice.M6, 700, Voice.H1, Voice.H1, Voice._, Voice._, Voice._,  
Voice._, Voice._,  
Voice.H1, Voice.H2, Voice.H3, 0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H6, Voice.H5, 300, Voice._, 0,  
Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H2, Voice.H3, 300, Voice.H3, 0, Voice.H6, Voice.H5, 300, Voice._,  
0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H6, Voice.H5, 300, Voice._, 0, Voice.H2, Voice.H3, 300,  
Voice.H2, 0, Voice.H1, Voice.M6, 300, Voice._, 0, Voice.H1, Voice.H1, 300, Voice.H2, 0, Voice.H1, 300,  
Voice.M6, 700, 0, Voice._, 300, Voice.H1, 700, Voice.H3, Voice._, 0, Voice.H3, Voice.H4, Voice.H3, Voice.H2,  
Voice.H3, 300, Voice.H2, 700,  
Voice.H1, Voice.H2, Voice.H3, 0, Voice.H6, Voice.H5, Voice._, Voice.H6, Voice.H5, Voice._, Voice.H6,  
Voice.H5, 300, Voice._, Voice.H3, Voice.H3, 0, Voice.H6, Voice.H5, Voice._, Voice.H6, Voice.H5, Voice._,  
Voice.H6, Voice.H5, 700, 300, Voice.H3, 700, Voice.H2, 0, Voice.H1, Voice.M6, 700, 300,  
Voice.H3, 700, Voice.H2, 0, Voice.H1, 300, Voice.M6, 700, Voice.H1, Voice.H1, Voice._, Voice._, Voice._,  
Voice._, Voice._,  
0, Voice.M6, 300, Voice.H3, 700, Voice.H2, 0, Voice.H1, Voice.M6, 700, 300, Voice.H3, Voice.H2, 700, 300, 0,  
Voice.H1, Voice.M6, 300, 700, Voice.H1, Voice.H1, Voice._, Voice._, Voice._, Voice._, Voice._, Voice._,  
Voice._, -1  
]  
sleep = 0.35  
for i in wind:  
if i == -1:  
break  
if i == 0:  
sleep = 0.172  
continue  
if i == 700:  
time.sleep(0.172)  
continue  
if i == 300:  
sleep = 0.35  
continue  
if i == Voice._:  
time.sleep(0.25)  
continue  
back = playNote(handle, 0, instrument, i, velocity, sleep)  
print(back, end="\n")  
        # time.sleep(sleep)  
# MIDI\_MAPPER 常量  
MIDI_MAPPER = 0xFFFFFFFF  
# 创建一个变量来接收 MIDI 输出句柄  
hMidiOut = ctypes.c_void_p()  
# 调用 midiOutOpen 函数  
result = winmm.midiOutOpen(ctypes.byref(hMidiOut), MIDI_MAPPER, 0, 0, 0)  
if result == 0:  
print("midiOutOpen succeeded")  
    # go(hMidiOut,107)  
thread1 = threading.Thread(target=go, args=(hMidiOut, 78, 90))  
thread2 = threading.Thread(target=go, args=(hMidiOut, 0, 127))  
thread1.start()  
thread2.start()  
else:  
print("midiOutOpen failed")  
thread1.join()  
thread2.join()  
# 关闭 MIDI 输出  
winmm.midiOutClose(hMidiOut)  

      

代码分析

这段代码是一个使用 MIDI 协议生成音乐的 Python 脚本,具体分析如下。

  1. Scale 和 Voice 类: 这些类定义了音乐音阶和音符,使用 MIDI 音符编号。每个常量对应一个特定的 MIDI 音符。
  2. playNote 函数: 这个函数播放一个 MIDI 音符。它接受参数,如 MIDI 输出句柄 (hmo)、通道、乐器、音符、速度和可选的持续时间。它发送音符开启和(如果指定了持续时间)音符关闭的 MIDI 消息。
  3. go 函数: 这个函数定义了要播放的音符序列。它遍历了一个 MIDI 音符号的列表,并为每个音符调用 playNote。它还包含处理特殊情况的逻辑,如暂停和速度变化。
  4. MIDI_MAPPER和hMidiOut: 这些变量用于使用winmm库的midiOutOpen函数打开 MIDI 输出设备。
  5. 线程创建和执行: 创建了两个线程来同时播放不同的旋律。每个线程使用不同的乐器和速度参数调用go函数。
  6. 线程加入和 MIDI 输出关闭: 线程执行结束后,它们被加入,然后使用midiOutClose关闭 MIDI 输出。

总的来说,这个脚本通过向输出设备发送 MIDI 消息来生成音乐,创建多个线程同时播放不同的旋律。

picture.image

下载代码

公众号回 python037 即可下载代码

系列推荐
序号文章目录直达链接
表白系列
1无限弹窗代码无限弹窗!满屏表白代码来啦,快来看看吧
2满屏飘字代码
满屏飘字表白代码(Python版)
3李峋同款跳动的爱心Python李峋同款跳动的爱心代码(可写字版)
4漂浮爱心Python满屏漂浮爱心代码
5爱心光波
Python动感爱心光波代码

| | 6 | 流星雨 | 一起来看python流星雨吧!(含表白界面) | | 7 | 玫瑰花 | 叮咚,您的玫瑰花已送达~ | | 节日系列 | | 1 | 生日蛋糕 | Python与众不同的生日蛋糕(可定制版) | | 2 | 圣诞节 | Python画一棵浪漫的圣诞树(2022)

Python粉红色圣诞树(慢慢画版)

从天而降的Python圣诞礼物(可写字版)

| | 3 | 中秋节 | 中秋佳节将至,一起来赏月吧 | | 4 | 国庆节 | 目光所至皆华夏,五星闪耀为信仰 | | 5 | 儿童节 | 让代码创造童话,共建快乐世界 | | 6 | 万圣节 | 终于要到我这只可爱鬼的节日啦! | | 7 | 新春/跨年 | 动漫风Python跨年烟花秀(可换照片

今年跨年一起去看python烟花秀吧!

| | 动漫系列 | | 1 | 柯南 | 真相只有一个!名侦探柯南来袭~ | | 2 | 皮卡丘 | 我用python实现了三只可爱的皮卡丘! | | 3 | hellokitty | 粉红色限定丨你好我是HelloKitty! | | 4 | 猪猪侠 | Python绘制猪猪侠代码 | | 5 | 沸羊羊 | 叮咚,您订购的沸羊羊已送达 | | 6 | 喜羊羊 | 我用python实现了一只呆萌的喜羊羊!

| | 7 | 懒羊羊 | 教你用python实现一只可爱的懒羊羊!

| | 8 | 小灰灰 | 谁会拒绝一只呆萌的小灰灰呢~ | | 其他 | | 1 | 满天星 | 一闪一闪亮晶晶,跨年就看林北星(Python) | | 2 | 雪花 | 陪你看一场冬雪(大雪纷飞Python版

这个冬天让我们用python送她一场飘雪吧!

张万森,下雪了(Python)

| | 3 | 樱花树 | 樱花树下的约定,是承诺也是青春 | | 4 | 七彩花朵 | Python七彩花朵代码 | | 5 | 代码雨 | 三十行代码教你实现《黑客帝国》炫酷代码雨 | | 6 | 蝙蝠代码 | 万圣节特辑(一)丨 一只蝙蝠的诞生! | | 7 | 南瓜头 | 万圣节特辑(二)丨 你好恶魔南瓜头! |

最后想说

感谢你的喜欢!!

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎AB测试总体经济影响
为充分了解火山引擎A/B测试平台为企业带来的潜在投资回报,火山引擎委托Forrester Consulting使用总 体经济影响(TEI)模型进行对其A/B测试产品潜在的投资回报率(ROI)进行评估分析。该研究的目的是为了给读者提供火山引擎A/B测试产品带来潜在财务影响评估的参考。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论