飞道的博客

Pythoner 的花式浪漫,你会吗?

270人阅读  评论(0)

文 | 闲欢

来源:Python 技术「ID: pythonall」

一年一度的圣诞节又要到了,对于这个重大的节日,今年的外国人可能比较难,还处在水深火热之中,希望他们一切都赶快好起来。在我们国内,我们还可以像往年一样正常地过节,虽然是一个外国人的节日,但是每年在这个日子里,还是成就了不少鸳鸯的,也不失是一件好事。作为 Python 程序员,你还在送花、送苹果、送口红吗?有没有想过程序猿式的浪漫?本文就抛砖引玉,为大家提供一种思路,希望大家喜欢。

思路和实现

本文想通过 turtle 动态画图,向观看对象呈现一个动态绘制礼物的过程。一提到圣诞节,大家映入脑海中的肯定就是郁郁葱葱的绿色圣诞树,如果只是一棵圣诞树,未免也太平平无奇了,所以我准备在圣诞树的顶部加一颗爱心,来起到画龙点睛的作用。

我们从上往下画这个动图,所以第一步要画的是爱心。我将爱心分为两个半圆与一个正方形的组合,并且用粉红色来着色,我们来看看具体实现:


   
  1. def loving_heart(r):
  2.     l =  2 * r
  3.     tur.left( 45)
  4.     tur.forward(l)
  5.     tur.circle(r,  180)
  6.     tur.right( 90)
  7.     tur.circle(r,  180)
  8.     tur.forward(l)

爱心画完了,就要开始画圣诞树了,我们知道,圣诞树从树顶往下是一个对称的锥形,这么规则的形状,正是我们想要的,它简化了我们程序的逻辑。我们先画树的主干,然后再画小树枝,小树枝采用从上到下一层一层画的模式,每一层左右对称,并且画法相同,采用递归的方式来实现:


   
  1. # 树函数(递归)
  2. def tree(d, s):
  3.      if d <=  0:
  4.          return
  5.     tur.forward(s)
  6.     tree(d -  1, s *  .8)
  7.     tur.right( 120)
  8.     tree(d -  3, s *  .5)
  9.     tur.right( 120)
  10.     tree(d -  3, s *  .5)
  11.     tur.right( 120)
  12.     # 回退函数
  13.     tur.backward(s)

画完这两部分之后,我们的爱心圣诞树就画好了,但是我们不能就这样结束,我们还需要加一句表白的语句或者祝福语(这个大家自由发挥啦),我这里就写了一句“Merry Christmas”作为示例。

整个作画的主程序是这样的:


   
  1. # 画爱心部分
  2. tur.penup()
  3. # 设置起点位置
  4. tur. goto( 0200)
  5. tur.pendown()
  6. # 设置画笔颜色
  7. tur.pencolor( 'pink')
  8. tur.color( 'pink')
  9. # 对图形进行填充
  10. tur.begin_fill()
  11. # 执行画爱心函数
  12. loving_heart( 20)
  13. tur.end_fill()
  14. # 画树部分
  15. n =  100
  16. tur.speed( 'fastest')
  17. tur.right( 225)
  18. tur.color( "dark green")
  19. tur.backward(n *  4.8)
  20. tree( 15, n)
  21. tur.backward(n /  5)
  22. tur.penup()
  23. tur.Turtle().screen.delay( 2)
  24. tur. goto( 800)
  25. tur.pendown()
  26. tur.color( "gold")
  27. tur.write( "Merry Christmas!", font=( "Times"32"bold"))
  28. tur.hideturtle()

作画的过程我录制了一下,以便大家看看效果:

作画完成后,最终的效果是这样子的:

总结

本文以动态画一棵爱心圣诞树为例,为大家展现了程序猿式的浪漫,这个礼物的重点是要动态画,展现出画的过程,让非程序员女生能够感受到程序的神奇,而不是把最后的成品给她。当然啦,大家可以根据这个思路自由发挥,给自己心爱的她进行定制。反正我写程序的过程被女朋友看到了,然后她在一旁发出“哇哇,原来程序员还可以这样浪漫”的叫声。为了大家我也是拼了,提前泄露了天机,以至于我还需要再准备一份礼物了,大家觉得这种无私奉献的精神是不是值得点个“在看”呢?

PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!

老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

代码获取方式

识别文末二维码,回复:201222


转载:https://blog.csdn.net/weixin_48923393/article/details/111570662
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场