Pythoner 的花式浪漫,你會嗎?

文 |?閑歡
來源:Python 技術(shù)「ID: pythonall」

一年一度的圣誕節(jié)又要到了,對于這個重大的節(jié)日,今年的外國人可能比較難,還處在水深火熱之中,希望他們一切都趕快好起來。在我們國內(nèi),我們還可以像往年一樣正常地過節(jié),雖然是一個外國人的節(jié)日,但是每年在這個日子里,還是成就了不少鴛鴦的,也不失是一件好事。作為 Python 程序員,你還在送花、送蘋果、送口紅嗎?有沒有想過程序猿式的浪漫?本文就拋磚引玉,為大家提供一種思路,希望大家喜歡。
思路和實現(xiàn)
本文想通過 turtle 動態(tài)畫圖,向觀看對象呈現(xiàn)一個動態(tài)繪制禮物的過程。一提到圣誕節(jié),大家映入腦海中的肯定就是郁郁蔥蔥的綠色圣誕樹,如果只是一棵圣誕樹,未免也太平平無奇了,所以我準(zhǔn)備在圣誕樹的頂部加一顆愛心,來起到畫龍點睛的作用。
我們從上往下畫這個動圖,所以第一步要畫的是愛心。我將愛心分為兩個半圓與一個正方形的組合,并且用粉紅色來著色,我們來看看具體實現(xiàn):
def?loving_heart(r):
????l?=?2?*?r
????tur.left(45)
????tur.forward(l)
????tur.circle(r,?180)
????tur.right(90)
????tur.circle(r,?180)
????tur.forward(l)
愛心畫完了,就要開始畫圣誕樹了,我們知道,圣誕樹從樹頂往下是一個對稱的錐形,這么規(guī)則的形狀,正是我們想要的,它簡化了我們程序的邏輯。我們先畫樹的主干,然后再畫小樹枝,小樹枝采用從上到下一層一層畫的模式,每一層左右對稱,并且畫法相同,采用遞歸的方式來實現(xiàn):
#?樹函數(shù)(遞歸)
def?tree(d,?s):
????if?d?<=?0:
????????return
????tur.forward(s)
????tree(d?-?1,?s?*?.8)
????tur.right(120)
????tree(d?-?3,?s?*?.5)
????tur.right(120)
????tree(d?-?3,?s?*?.5)
????tur.right(120)
????#?回退函數(shù)
????tur.backward(s)
畫完這兩部分之后,我們的愛心圣誕樹就畫好了,但是我們不能就這樣結(jié)束,我們還需要加一句表白的語句或者祝福語(這個大家自由發(fā)揮啦),我這里就寫了一句“Merry Christmas”作為示例。
整個作畫的主程序是這樣的:
#?畫愛心部分
tur.penup()
#?設(shè)置起點位置
tur.goto(0,?200)
tur.pendown()
#?設(shè)置畫筆顏色
tur.pencolor('pink')
tur.color('pink')
#?對圖形進(jìn)行填充
tur.begin_fill()
#?執(zhí)行畫愛心函數(shù)
loving_heart(20)
tur.end_fill()
#?畫樹部分
n?=?100
tur.speed('fastest')
tur.right(225)
tur.color("dark?green")
tur.backward(n?*?4.8)
tree(15,?n)
tur.backward(n?/?5)
tur.penup()
tur.Turtle().screen.delay(2)
tur.goto(80,?0)
tur.pendown()
tur.color("gold")
tur.write("Merry?Christmas!",?font=("Times",?32,?"bold"))
tur.hideturtle()
作畫的過程我錄制了一下,以便大家看看效果:

作畫完成后,最終的效果是這樣子的:

總結(jié)
本文以動態(tài)畫一棵愛心圣誕樹為例,為大家展現(xiàn)了程序猿式的浪漫,這個禮物的重點是要動態(tài)畫,展現(xiàn)出畫的過程,讓非程序員女生能夠感受到程序的神奇,而不是把最后的成品給她。當(dāng)然啦,大家可以根據(jù)這個思路自由發(fā)揮,給自己心愛的她進(jìn)行定制。反正我寫程序的過程被女朋友看到了,然后她在一旁發(fā)出“哇哇,原來程序員還可以這樣浪漫”的叫聲。為了大家我也是拼了,提前泄露了天機,以至于我還需要再準(zhǔn)備一份禮物了,大家覺得這種無私奉獻(xiàn)的精神是不是值得點個“在看”呢?
PS:公號內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計劃!
老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點一下,如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!


【代碼獲取方式】
