圣誕節別人都在用手畫,程式員必須得內卷!!
寫了2個圣誕樹,寫的不好,總結了一個別人的圣誕樹(原作者:一頓吃不飽)有錯的地方歡迎大家指出,我積極改正!
ONE:運用了matplotlib可視化找點寫了一個最簡單版的圣誕樹(沒時間了畫的太丑了,嗚嗚嗚)

源代碼:
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
class Dyn_Img:
def __init__(self):
self.width = 14 #坐標寬
self.height = 14 #坐標高
self.fig = plt.figure()
self.ax = plt.axes()
self.frame_number = 80
self.per_time = 50
self.do_menu()
def do_menu(self):
self.input_choi = input("1.圣誕樹\n2.退出\n請輸入您的選擇")
while self.input_choi != "1" and self.input_choi != "2" and self.input_choi != "3":
self.input_choi = input("1.圣誕樹\n2.退出\n請輸入您的選擇")
def setup_axes(self):
# self.ax.clear()
self.ax.set_xlim(0, self.width)
self.ax.set_ylim(0, self.height)
self.ax.get_xaxis().set_visible(True)
self.ax.get_yaxis().set_visible(True)
self.ax.set_facecolor("pink")
def do_animation(self):
anim = FuncAnimation(self.fig, self.draw_point_name)
self.draw_point_name()
def draw_point_name(self, i):
# self.ax.clear()
print(i)
self.setup_axes()
# 五角星
x = [5.5,7.5,7.5,5.8,5.8,6.5,6.5,7.2,7.2,5.5]
y = [11,11,11,9.5,9.5,12,12,9.5,9.5,11]
#圣誕樹
x1 = [6.5-i*1.5/80,5,6.5+i*1.5/80,8,5+i*3/80,8]
y1 = [10-i*1.5/80,8.5,10-i*1.5/80,8.5,8.5,8.5]
x2 = [5.5-i*1.5/80,4,7.5+i*1.5/80,9,4+i*5/80,9]
y2 = [8.5-i*1.5/80,7,8.5-i*1.5/80,7,7,7]
x3 = [4.5-i*1.5/80,3,8.5+i*1.5/80,10,3+i*7/80,10]
y3 = [7-i*1.5/80,5.5,7-i*1.5/80,5.5,5.5,5.5]
x4 = [3.5-i*1.5/80,2,9.5+i*1.5/80,11,2+i*9/80,11]
y4 = [5.5-i*1.5/80,4,5.5-i*1.5/80,4,4,4]
#樹干
x5=[5.5,5.5,7.5,7.5,5.5+i*2/80,7.5]
y5=[4-i*2/80,2,4-i*2/80,2,2,2]
#畫雪花
# x6=[3+i*2/80,5,5-i*2/80,3,4,4]
# y6=[6-i*2/80,4,6-i*2/80,4,7-i*4/80,3]
self.ax.plot(x, y, "y-")
plt.fill_between(x,y, facecolor='yellow', alpha=0.5)
plt.pause(0.00000001)
self.ax.plot(x1, y1, ".")
# plt.fill_between(x1, y1, facecolor='blue', alpha=0.5)
self.ax.plot(x2, y2, ".")
# plt.fill_between(x2, y2, facecolor='purple', alpha=0.5)
self.ax.plot(x3, y3, ".")
self.ax.plot(x4, y4, ".")
self.ax.plot(x5,y5,".")
# self.ax.plot(x6,y6,"w.")
def drwa_Dyn_Img(self):
if self.input_choi == "1":
# frames = np.arange(0, len(self.id)) frames=self.frame_numbers, interval=self.per_time
anmi = FuncAnimation(self.fig, self.draw_point_name,frames=self.frame_number,interval=self.per_time)
anmi.save("圣誕樹.gif", dpi=80, writer="pillow")
plt.show()
elif self.input_choi == "2":
exit()
if __name__ == "__main__":
dyn_Img = Dyn_Img()
dyn_Img.drwa_Dyn_Img()
TWO:運用turtle海龜畫圖法,個人認為海龜畫圖真的很簡單,全是命令,新手小白完全可以,就是速度有點慢,


源代碼:
import turtle as t
import random
import threading
import time
import tkinter as tk
t.screensize(bg='pink') # 定義背景顏色
def loving_pentacle(r):
l = 2 * r
t.left(45)
t.forward(l)
t.circle(r, 180)
t.right(90)
t.circle(r, 180)
t.forward(l)
# 樹函式(遞回)
def tree(d, s):
if d <= 0:
return
t.forward(s)
tree(d - 1, s * .8)
t.right(120)
tree(d - 3, s * .5)
t.right(120)
tree(d - 3, s * .5)
t.right(120)
t.backward(s) # 回退函式
#這里順序不要改哦,依次進行的
# 畫愛心部分
t.penup()
t.goto(0, 200) # 設定起點位置
t.pendown()
t.pencolor('red') # 設定畫筆顏色
t.color('yellow')
t.begin_fill() # 對圖形進行填充
loving_pentacle(20) # 執行畫愛心函式
t.end_fill()
# 畫樹部分
n = 100
t.speed(0)#速度
# t.Turtle().screen.delay(0)
t.right(225) #向右
t.color("dark green")#顏色
t.backward(n * 4.8) #回退函式
tree(15, n)
t.backward(n / 5)
# 繪制雪花
def drawsnow(): # 定義畫雪花方法
t.speed(0) #速度
t.ht() # 隱藏畫筆筆頭,ht也等于hideturtle
t.pensize(2) # 定義畫筆大小
for i in range(601): # 畫多少雪花,601是她6月1日的生日
t.pencolor("white") # 定義畫筆顏色為白色,其實就是雪花為白色
t.pu() # 提筆,pu=penup
t.setx(random.randint(-350, 350)) # 定義x坐標,隨機從-350到350之間選擇
t.sety(random.randint(-100, 350)) # 定義y坐標,注意雪花一般在地上不會落下,所以不會從太小的縱座軸開始
t.pd() # 落筆,pd=pendown
dens = 6 # 雪花瓣數設為6
snowsize = random.randint(1, 10) # 定義雪花大小
for j in range(dens): # 就是6,那就是畫5次,也就是一個雪花五角星
# t.forward(int(snowsize)) #int()取整數
t.fd(int(snowsize))
t.backward(int(snowsize))
# t.bd(int(snowsize)) #注意沒有bd=backward,但有fd=forward,小bug
t.right(int(360 / dens)) # 轉動角度
drawsnow()
# 寫下自己的名
t.color("red") # 填充顏色
t.up()
t.goto(170,-200)
t.down()
t.write("作者:是曉洋呀", font=("微軟雅黑", 18, "normal"))
t.ht()
# t.done()
t.hideturtle()
time.sleep(2)
# 彈窗制作
def dow():
window = tk.Tk()
width = window.winfo_screenwidth()
height = window.winfo_screenheight()
a = random.randrange(0, width)
b = random.randrange(0, height)
window.title('圣誕節快樂')
window.geometry("240x50" + "+" + str(a) + "+" + str(b))
tk.Label(window,
text='張張圣誕節快樂!', # 彈窗里面的文字
bg='pink', # 背景顏色
font=('..', 17), # 字體和字體大小
width=18, height=2 # 標簽長寬
).pack() # 固定視窗位置
window.mainloop()
threads = []
for i in range(99): # 需要的彈框數量,99是祝福我和我的t永遠在一起
t = threading.Thread(target=dow)
threads.append(t)
time.sleep(0.01)
threads[i].start()
第3個:最后一個是總結了原作者的代碼,加了代碼解釋新手可以看過來理解一下(原作者:一頓吃不飽)原作者寫的特別好樣式很全!!

源代碼:
from distutils.core import setup
from turtle import *
import time
setup(500, 500, startx=None, starty=None) #設定表單大小及位置 格式:turtle.setup(width,height,startx,starty)
speed(10) #畫筆移動速度,畫筆繪制的速度范圍[0~10]整數,數字越大越快 格式:turtle.speed(speed)
pencolor("pink") #畫筆顏色 格式:turtle.pencolor()
pensize(10) #畫筆寬度
penup() #提筆移動時不會繪制圖形,從另一個地方繪制 格式:turtle.penup()
hideturtle() #隱藏畫筆的turtle形狀 格式:turtle.hideturtle()
goto(0, 150) #讓在任何位置的海龜到達指定位置 格式:turtle.goto()
showturtle() #顯示畫筆的turtle形狀 格式:turtle.showturtle()
pendown() #移動時繪制圖形,預設時也為繪制 格式:turtle.pendown()
shape(name="arrow") #走動箭頭型別 classic三角,arrow扁三角,arrow海龜,circle圓,square正方形,triangle正三角
# 1
seth(-120) #表示小烏龜啟動時運動的方向
for i in range(10): #range是一個函式,這個陳述句是賦值給i
fd(12) #fd()是turtle模塊中的一個方法,fd方法的實參是像素距離
right(2)
penup() #提筆移動時不繪制圖形,從另一個地方繪制 格式:turtle.penup()
goto(0, 150) #讓任何位置的海龜到達我指定的位置 格式:turtle.goto()
seth(-60) #海龜啟動時運動的方向
pendown()
#接下來的陳述句都是重復的,自由發揮叭
for i in range(10):
fd(12)
left(2)
seth(-150)
penup()
fd(10)
pendown()
for i in range(5):
fd(10)
right(15)
seth(-150)
penup()
fd(8)
pendown()
for i in range(5):
fd(10)
right(15)
seth(-155)
penup()
fd(5)
pendown()
for i in range(5):
fd(7)
right(15)
# 2
penup()
goto(-55, 34)
pendown()
seth(-120)
for i in range(10):
fd(8)
right(5)
penup()
goto(50, 35)
seth(-60)
pendown()
for i in range(10):
fd(8)
left(5)
seth(-120)
penup()
fd(10)
seth(-145)
pendown()
for i in range(5):
fd(10)
right(15)
penup()
fd(10)
seth(-145)
pendown()
for i in range(5):
fd(12)
right(15)
penup()
fd(8)
seth(-145)
pendown()
for i in range(5):
fd(10)
right(15)
penup()
seth(-155)
fd(8)
pendown()
for i in range(5):
fd(11)
right(15)
# 3
penup()
goto(-100, -40)
seth(-120)
pendown()
for i in range(10):
fd(6)
right(3)
penup()
goto(80, -39)
seth(-50)
pendown()
for i in range(10):
fd(6)
left(3)
seth(-155)
penup()
fd(10)
pendown()
for i in range(5):
fd(8)
right(10)
penup()
fd(8)
seth(-145)
pendown()
for i in range(7):
fd(8)
right(10)
penup()
fd(8)
seth(-145)
pendown()
for i in range(7):
fd(7)
right(10)
penup()
fd(8)
seth(-145)
pendown()
for i in range(7):
fd(7)
right(10)
penup()
fd(8)
seth(-140)
pendown()
for i in range(7):
fd(6)
right(10)
# 4
penup()
goto(-120, -95)
seth(-130)
pendown()
for i in range(7):
fd(10)
right(5)
penup()
goto(100, -95)
seth(-50)
pendown()
for i in range(7):
fd(10)
left(5)
penup()
seth(-120)
fd(10)
seth(-155)
pendown()
for i in range(6):
fd(8)
right(10)
penup()
seth(-160)
fd(10)
seth(-155)
pendown()
for i in range(6):
fd(8)
right(10)
penup()
seth(-160)
fd(10)
seth(-155)
pendown()
for i in range(6):
fd(8)
right(10)
penup()
seth(-160)
fd(10)
seth(-160)
pendown()
for i in range(6):
fd(8)
right(10)
penup()
seth(-160)
fd(10)
seth(-160)
pendown()
for i in range(6):
fd(8)
right(10)
penup()
seth(-160)
fd(10)
seth(-165)
pendown()
for i in range(5):
fd(10)
right(11)
# 5
penup()
goto(-70, -165)
seth(-85)
pendown()
for i in range(3):
fd(5)
left(3)
penup()
goto(70, -165)
seth(-95)
pendown()
for i in range(3):
fd(5)
right(3)
seth(-170)
penup()
fd(10)
pendown()
pendown()
for i in range(10):
fd(12)
right(2)
# 6
penup()
goto(70, -165)
pendown()
seth(-90)
pensize(8) #設定畫筆寬度
pencolor("#de8891") #沒有引數傳入,回傳當前畫筆顏色,傳入引數設定畫筆顏色
circle(-20, 90) #circle圓
penup()
goto(30, -185)
pendown()
seth(-180)
pensize(8)
pencolor("#de8891")
fd(40)
penup()
goto(-5, -170)
pendown()
seth(-180)
pensize(8)
pencolor("#de8891")
fd(35)
def guest(x, y, z):
penup()
goto(x, y)
seth(-z)
pendown()
for angel in range(5):
fd(10)
right(10)
def guet(x, y, z):
penup()
goto(x, y)
seth(-z)
pendown()
for angel in range(5):
fd(10)
left(10)
def qu(x, y, z):
penup()
goto(x, y)
seth(-z)
pendown()
for angel in range(5):
fd(6)
right(10)
seth(-150)
fd(20)
# 樹枝
guest(-70, -150, 160)
guest(100, -150, 160)
guet(110, -110, 50)
guest(160, -140, 150)
qu(80, -120, 180)
guest(70, -85, 165)
guest(-40, -85, 165)
guet(90, -50, 50)
guest(130, -80, 150)
pencolor("pink")
qu(-40, -60, 180)
pencolor('#de8891')
qu(80, -30, 180)
pencolor("pink")
qu(40, 10, 180)
pencolor("#de8891")
guest(-60, 30, 120)
guest(-20, -20, 150)
guet(45, 40, 60)
guest(-30, 40, 170)
guest(-30, 110, 115)
guet(40, 90, 60)
guest(80, 50, 160)
pencolor("#de8891")
def hdj(x, y):
penup()
goto(x, y)
seth(80)
pendown()
pensize(2)
circle(5)
seth(10)
fd(15)
seth(120)
fd(20)
seth(240)
fd(20)
seth(180)
fd(20)
seth(-60)
fd(20)
seth(50)
fd(20)
seth(-40)
fd(30)
seth(-130)
fd(5)
seth(135)
fd(30)
seth(-60)
fd(30)
seth(-150)
fd(6)
seth(110)
fd(30)
def uit(x, y):
penup()
goto(x, y)
pendown()
pensize(2)
circle(5)
seth(-10)
fd(15)
seth(90)
fd(15)
seth(200)
fd(15)
seth(160)
fd(15)
seth(-90)
fd(15)
seth(10)
fd(15)
seth(-60)
fd(20)
seth(-180)
fd(5)
seth(110)
fd(20)
seth(-90)
fd(20)
seth(-180)
fd(6)
seth(70)
fd(15)
hideturtle()
def xxy(x, y, z):
penup()
goto(x, y)
pendown()
seth(z)
for po in range(5):
fd(4)
left(36)
def zjq(x, y, z):
penup()
goto(x, y)
pendown()
seth(z)
for kk in range(5):
fd(4)
left(36)
# 小蝴蝶結
seth(0)
uit(40, -160)
hdj(-80, -120)
xxy(-67, -115, 120)
xxy(-86, -123, 150)
hdj(40, -50)
xxy(52, -45, 130)
xxy(34, -55, 160)
seth(0)
uit(-20, -60)
zjq(-4, -60, 100)
zjq(-20, -60, 120)
hdj(-30, 20)
xxy(-15, 25, 130)
xxy(-40, 20, 180)
uit(30, 70)
zjq(45, 70, 100)
zjq(30, 70, 120)
# 大蝴蝶結
pencolor("#f799e6")
pensize(5)
penup()
seth(0)
goto(0, 150)
pendown()
circle(10)
seth(-15)
fd(40)
seth(90)
fd(40)
seth(200)
fd(40)
seth(160)
fd(40)
seth(-90)
fd(40)
seth(15)
fd(40)
seth(-70)
pencolor("#f799e6")
pensize(4)
fd(40)
seth(-180)
fd(10)
seth(100)
fd(40)
seth(-100)
fd(40)
seth(-180)
fd(10)
seth(70)
fd(40)
penup()
seth(0)
goto(0, 130)
pencolor("pink")
pendown()
def zz(x, y, z):
penup()
goto(x, y)
pencolor("#f799e6")
pendown()
seth(z)
for po in range(10):
fd(4)
left(18)
seth(0)
zz(35, 145, 100)
zz(-7, 145, 110)
pencolor("red")
pensize(7)
penup()
goto(-35, 135)
pendown()
# 圣誕帽
seth(-20)
pensize(2)
penup()
goto(-30, -120)
pencolor("black")
pendown()
fillcolor("red")
fd(30)
circle(4, 180)
fd(30)
circle(4, 180)
penup()
goto(-25, -115)
seth(75)
pendown()
begin_fill()
for i in range(5):
fd(6)
right(20)
seth(-10)
for i in range(5):
fd(8)
right(15)
seth(145)
for i in range(5):
fd(5)
left(2)
seth(90)
for i in range(5):
fd(1)
left(2)
seth(-90)
for i in range(4):
fd(4)
right(6)
seth(161)
fd(30)
end_fill()
pensize(1)
pencolor("black")
def abc(x, y, size):
pensize(2)
pencolor("black")
penup()
goto(x, y)
pendown()
begin_fill()
fillcolor("yellow")
for i in range(5):
left(72)
fd(size)
right(144)
fd(size)
end_fill()
# 星星
seth(-15)
abc(-120, -70, 10)
seth(10)
abc(100, -20, 10)
seth(-10)
abc(10, 40, 10)
seth(30)
abc(-80, 60, 10)
abc(100, -150, 10)
abc(-140, -150, 10)
abc(20, 120, 10)
# 襪子
seth(-20)
pensize(2)
penup()
goto(-20, 80)
pencolor("black")
pendown()
fillcolor("red")
fd(25)
circle(4, 180)
fd(25)
circle(4, 180)
penup()
goto(-15, 80)
pendown()
begin_fill()
fillcolor("red")
seth(-120)
fd(20)
seth(150)
fd(5)
circle(7, 180)
fd(15)
circle(5, 90)
fd(30)
seth(160)
fd(18)
end_fill()
penup()
seth(0)
goto(100, -230)
pendown()
write("張張圣誕節快樂 ", align="center", font=("Comic Sans MS", 24, "bold"))
done()
好啦,快去給你的他/她做圣誕樹吧,祝大家圣誕節快樂哦(大家有木有推薦生發的東東,女程式員頭發要掉光了,嗚嗚嗚)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387806.html
標籤:其他
上一篇:前端開發作業總結
