熱點 | 我用Python告訴老大爺“啥是佩奇”
今天,被《啥是佩奇》這支廣告片刷屏了。佩奇明明是個喜劇角色,卻看哭了所有人。
快過年了,在農村爺爺給城里的小孫子打電話,小孫子說想要“佩奇”,為了滿足小孫子的愿望,爺爺開始滿村子找佩奇。
《啥是佩奇》
開片爺爺在電話這頭的一段話就很抓人心,全世界的爺爺都是這樣疼孫兒的,一下子就讓觀眾有共情的心理。一句“什么是佩奇?”
鋪墊了爺爺接下來的一段尋找佩奇之路,***爺爺找到的佩奇骨格清奇,卻是圈主見過的全世界最可愛的小豬佩奇!
不知道大家看完什么感覺,反正我看完是哭了。我看網友們也紛紛留言,說自己哭笑兩重奏......
看著爺爺滿村子找佩奇,我有點心疼了。為此我想用純粹的 Python 來告訴爺爺,啥是佩奇?
這就是佩奇!先看看效果視頻:
基本思路:選好畫板大小,設置好畫筆顏色,粗細,定位好位置,依次畫鼻子,頭、耳朵,眼睛,腮,嘴,身體,手腳,尾巴,完事。
都知道,turtle 是 Python 內置的一個比較有趣味的模塊,俗稱海龜繪圖,它是基于 tkinter 模塊打造,提供一些簡單的繪圖工具。
在海龜作圖中,我們可以編寫指令讓一個虛擬的(想象中的)海龜在屏幕上來回移動。
這個海龜帶著一只鋼筆,我們可以讓海龜無論移動到哪都使用這只鋼筆來繪制線條。
通過編寫代碼,以各種很酷的模式移動海龜,我們可以繪制出令人驚奇的圖片。
使用海龜作圖,我們不僅能夠只用幾行代碼就創(chuàng)建出令人印象深刻的視覺效果,而且還可以跟隨海龜看看每行代碼如何影響到它的移動。
這能夠幫助我們理解代碼的邏輯。所以海龜作圖也常被用作新手學習 Python 的一種方式。
更豐富詳細的功能及知識可以參考官方文檔:
- https://docs.python.org/3/library/turtle.html
了解了 turtle 的用法之后就可以開始實戰(zhàn)了。代碼示例:
- from turtle import*
- def nose(x,y):#鼻子
- penup()#提起筆
- goto(x,y)#定位
- pendown()#落筆,開始畫
- setheading(-30)#將烏龜的方向設置為to_angle/為數字(0-東、90-北、180-西、270-南)
- begin_fill()#準備開始填充圖形
- a=0.4
- for i in range(120):
- if 0<=i<30 or 60<=i<90:
- a=a+0.08
- left(3) #向左轉3度
- forward(a) #向前走a的步長
- else:
- a=a-0.08
- left(3)
- forward(a)
- end_fill()#填充完成
- penup()
- setheading(90)
- forward(25)
- setheading(0)
- forward(10)
- pendown()
- pencolor(255,155,192)#畫筆顏色
- setheading(10)
- begin_fill()
- circle(5)
- color(160,82,45)#返回或設置pencolor和fillcolor
- end_fill()
- penup()
- setheading(0)
- forward(20)
- pendown()
- pencolor(255,155,192)
- setheading(10)
- begin_fill()
- circle(5)
- color(160,82,45)
- end_fill()
- def head(x,y):#頭
- color((255,155,192),"pink")
- penup()
- goto(x,y)
- setheading(0)
- pendown()
- begin_fill()
- setheading(180)
- circle(300,-30)
- circle(100,-60)
- circle(80,-100)
- circle(150,-20)
- circle(60,-95)
- setheading(161)
- circle(-300,15)
- penup()
- goto(-100,100)
- pendown()
- setheading(-30)
- a=0.4
- for i in range(60):
- if 0<=i<30 or 60<=i<90:
- a=a+0.08
- lt(3) #向左轉3度
- fd(a) #向前走a的步長
- else:
- a=a-0.08
- lt(3)
- fd(a)
- end_fill()
- def cheek(x,y):#腮
- color((255,155,192))
- penup()
- goto(x,y)
- pendown()
- setheading(0)
- begin_fill()
- circle(30)
- end_fill()
- def mouth(x,y): #嘴
- color(239,69,19)
- penup()
- goto(x,y)
- pendown()
- setheading(-80)
- circle(30,40)
- circle(40,80)
- def setting(): #參數設置
- pensize(4)
- hideturtle() #使烏龜無形(隱藏)
- colormode(255) #將其設置為1.0或255.隨后 顏色三元組的r,g,b值必須在0 .. cmode范圍內
- color((255,155,192),"pink")
- setup(840,500)
- speed(10)
- def main():
- setting() #畫布、畫筆設置
- nose(-100,100) #鼻子
- head(-69,167) #頭
- ears(0,160) #耳朵
- eyes(0,140) #眼睛
- cheek(80,10) #腮
- mouth(-20,30) #嘴
- done()
- if __name__ == '__main__':
- main()
思路其實很簡單,就是通過 turtle 模塊實現(xiàn)基本的圓,橢圓,曲線等,難點在于,如何定位每個部位的位置(建議先畫畫草圖)。
完整代碼需要 300 行,限于篇幅,只放了一部分代碼,需要完整源碼的盆友,微信后臺回復關鍵詞“啥是佩奇”可獲得。
作者:丁彥軍
簡介:一名癡戀于 Python 的碼農,公共帳號:戀習 Python,在這里我們一起用 Python 做些有意義的事。