码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员


    目录

    系列文章 

    前言

    圣诞树

    完整代码

    尾声


    系列文章 

    序号文章目录直达链接
    表白系列
    1无法拒绝的表白界面https://want595.blog.csdn.net/article/details/134744894
    2满屏飘字表白代码https://want595.blog.csdn.net/article/details/135037388
    3无限弹窗表白代码https://want595.blog.csdn.net/article/details/134744711
    4李峋同款可写字版跳动的爱心https://want595.blog.csdn.net/article/details/134744191
    5流星雨https://want595.blog.csdn.net/article/details/134747408
    6漂浮爱心https://want595.blog.csdn.net/article/details/134744929
    7爱心光波https://want595.blog.csdn.net/article/details/134747365
    8玫瑰花https://want595.blog.csdn.net/article/details/134747447
    节日系列
    1新春/跨年烟花秀(2022)https://want595.blog.csdn.net/article/details/128727394
    烟花秀(2023)https://want595.blog.csdn.net/article/details/135042880
    粒子烟花https://want595.blog.csdn.net/article/details/136029420
    2圣诞节圣诞礼物https://want595.blog.csdn.net/article/details/135336583
    圣诞树(2022)https://want595.blog.csdn.net/article/details/128428985
    绿色圣诞树(2023)https://want595.blog.csdn.net/article/details/135048607
    粉色圣诞树(2023)https://want595.blog.csdn.net/article/details/135043042
    3冬至大雪纷飞https://want595.blog.csdn.net/article/details/128806017
    4生日生日蛋糕https://want595.blog.csdn.net/article/details/128739755
    5儿童节五彩气球https://want595.blog.csdn.net/article/details/128741043
    6国庆节国庆祝福https://want595.blog.csdn.net/article/details/128740923
    7万圣节万圣礼物https://want595.blog.csdn.net/article/details/128734395
    8愚人节愚人代码https://want595.blog.csdn.net/article/details/128696990
    9中秋节浪漫星空https://want595.blog.csdn.net/article/details/128737284
    10植树节樱花树https://want595.blog.csdn.net/article/details/128700178
    动漫系列
    1名侦探柯南系列柯南https://want595.blog.csdn.net/article/details/134777613
    2喜羊羊与灰太狼系列喜羊羊https://want595.blog.csdn.net/article/details/134778583
    懒羊羊https://want595.blog.csdn.net/article/details/134847642
    灰太狼https://want595.blog.csdn.net/article/details/135335303
    小灰灰https://want595.blog.csdn.net/article/details/135335445
    小香香https://want595.blog.csdn.net/article/details/135056783
    3海绵宝宝系列海绵宝宝https://want595.blog.csdn.net/article/details/134847364
    4哆啦A梦系列哆啦A梦https://want595.blog.csdn.net/article/details/135037884
    5HelloKitty系列hellokittyhttps://want595.blog.csdn.net/article/details/135337732
    6Tom&Jerry系列Tom&Jerryhttps://want595.blog.csdn.net/article/details/135337775
    7草莓熊系列草莓熊https://want595.blog.csdn.net/article/details/135337832
    8皮卡丘系列迷你皮卡丘https://want595.blog.csdn.net/article/details/135337911
    高级皮卡丘https://want595.blog.csdn.net/article/details/135337937
    豪华皮卡丘https://want595.blog.csdn.net/article/details/135337947
    炫酷系列
    1  一闪一闪亮星星系列张万森下雪了https://want595.blog.csdn.net/article/details/135336915
    一闪一闪亮星星https://want595.blog.csdn.net/article/details/135337049
    2代码雨https://want595.blog.csdn.net/article/details/135054341
    3七彩花朵https://want595.blog.csdn.net/article/details/135056670
    43D星空https://want595.blog.csdn.net/article/details/135056516
    5金榜题名https://want595.blog.csdn.net/article/details/135056150
    6满天星https://want595.blog.csdn.net/article/details/135056305
    ……

    前言

    一年一度的圣诞节又要来喽~在这么浪漫的节日里怎么能少的了一个浪漫的程序员呢~让我们一起画个圣诞树,送给你喜欢的那个人吧~

    圣诞树

    一、实现步骤

    用Python的小海龟实现(Turtle)

    具体分为五个步骤:

    (1)圣诞树

    (2)星星

    (3)礼物

    (4)雪花

    (5)祝福

    二、编码实现

    1. 圣诞树

    程序设计

    1. def tree(d,s): #运用递归的方法画圣诞树
    2. t.hideturtle() #隐藏画笔
    3. t.pencolor('limegreen') #画笔颜色置为绿色,用来画树
    4. t.pensize(5) #画笔大小为5
    5. t.speed(0) #最快速度画树(其实挺慢的)
    6. if d<=0:
    7. return
    8. t.forward(s)
    9. tree(d-1,s*0.8)
    10. t.right(120)
    11. tree(d-3,s*0.5)
    12. t.right(120)
    13. tree(d-3,s*0.5)
    14. t.right(120)
    15. t.backward(s)
    16. ……

    程序分析 

    这段代码是用 Python 的 turtle 模块,画出一个圣诞树的函数。圣诞树由一个树干和很多层树叶构成,树叶要用递归的方式画出来。画树的函数 tree(d,s) 中,d 表示树的深度,s 表示树的长度,如果深度为 0,则返回,否则画出一条长度为 s 的线段。然后分别右转 120 度,调用 tree(d-3, s*0.5) 画出树叶,如此递归下去,直到深度为 0。而函数 trees() 则先画出一个树根,然后调用 tree() 画出树叶,最后画出一个大星星。其中需要用到 turtle 模块中的一些函数,比如 goto()、up()、down()、right() 等等。

    2. 星星

    程序设计

    1. def star(): #画圣诞树顶的大星星
    2. t.hideturtle() #隐藏画笔
    3. t.pensize(2) #给画笔设置大小
    4. t.pencolor("gold") #给画笔设置颜色,'gold'表示金色
    5. t.up() #提起画笔,画笔移动时不会画画
    6. t.forward(5) #将画笔向前移5个像素(此时画笔方向向右,即向右移动5个像素)
    7. t.down() #画笔放下,画笔移动时会产生轨迹
    8. t.begin_fill() #给星星填充颜色
    9. for i in range(5): #因为是五角星,所以要循环五次画五个角
    10. t.forward(20)
    11. t.right(144)
    12. t.forward(20)
    13. t.left(72)
    14. t.fillcolor('yellow') #设置填充的颜色
    15. t.end_fill()
    16. return
    17. def stars(): #画圣诞树上的小星星
    18. t.hideturtle() #隐藏画笔
    19. t.speed(0) #设置画画速度,0为最快速
    20. t.pensize(5) #设置画笔大小
    21. for i in range(5): #循环五次画五个角,与画大星星一样
    22. t.forward(5)
    23. t.right(144)
    24. t.forward(5)
    25. t.left(72)
    26. return
    27. ……

    程序分析 

    这段代码用 turtle 模块画出了圣诞树上的星星。其中画大星星的函数 star(),先将画笔向前移动了 5 个像素,然后用 for 循环画出五个角,每次向前移动 20 个像素,右转 144 度(因为五角星每个角是 36 度),向前移动 20 个像素,左转 72 度。最后用 begin_fill()、fillcolor()、end_fill() 函数给星星填充颜色,并返回。画小星星的函数 stars() 与 star() 类似,只是少了填充的步骤。而画圣诞树上所有星星的函数 stares(),则使用了循环,可以画出不同颜色、不同位置的星星。首先设定初始值 x1=-110、x2=110、y1=-40 和 y2=-15,用来控制星星在圣诞树上的位置。然后定义颜色列表 c,用 for 循环画出不同颜色的星星。每画一个星星,n 加一,根据 n 的奇偶性判断是在圣诞树左边还是右边画星星,然后用 randint() 函数随机生成星星的坐标,接着调用 stars() 函数画出星星,最后更新 x1、x2、y1、y2 的值,保证下一个星星的位置在上一个星星的周围。

    3. 雪花

    程序设计 

    1. def snow(): #画雪花(全屏)
    2. t.hideturtle() #隐藏画笔
    3. t.pensize(2) #画笔大小
    4. t.speed(0) #画雪花的速度
    5. for i in range(500): #循环画500个雪花
    6. t.pencolor('white') #雪花是白色的
    7. t.penup() #提笔
    8. t.setx(r.randint(-1000,1000)) #在画布上随机找点
    9. t.sety(r.randint(-1000,1000))
    10. t.pendown()
    11. snowsize=r.randint(4,10) #雪花大小
    12. for i in range(6): #画雪花(雪花为六瓣,需要循环六次)
    13. t.forward(int(snowsize))
    14. t.backward(int(snowsize))
    15. t.left(60)

    程序分析 

    这段代码用 turtle 模块画出了一个全屏的雪花效果。首先定义 snow() 函数,里面包含了循环 500 次,画出 500 个雪花的过程。其中要注意,每画一个雪花都要先将笔提起,然后随机在画布上找一个点,再将笔放下,开始画雪花。接着定义雪花的大小 snowsize,大小是随机生成的,范围是 4 到 10。然后用 for 循环画出六瓣雪花,每画一瓣,向前移动 snowsize 像素,再向后移动 snowsize 像素,最后左转 60 度。这样循环六次就可以画出一个完整的雪花了。用 pencolor() 函数将雪花的颜色设置为白色,用 randint() 函数随机生成坐标,用 speed() 函数设置画雪花的速度为 0(最快速度),用 pensize() 函数设置画笔的粗细为 2。最后调用这个函数,就可以看到一个全屏都是飘雪花的效果了。

    4. 礼物

    程序设计

    1. def gift(): #画正方体礼物盒
    2. t.hideturtle() #隐藏画笔
    3. t.speed(0) #画笔速度
    4. x=40 #礼物盒的长和宽,我设置为正方形礼物盒,长宽高相等
    5. y=16 #由于是立体图形,宽与长不一样
    6. for i in range(4): #以下为画礼物盒的方法(x,y的值可以自行修改)
    7. t.forward(x)
    8. t.left(90)
    9. t.up()
    10. t.left(45)
    11. t.forward(y)
    12. t.right(45)
    13. t.down()
    14. for i in range(4):
    15. t.forward(x)
    16. t.left(90)
    17. t.up()
    18. t.right(135)
    19. t.forward(y)
    20. t.down()
    21. t.left(180)
    22. t.forward(y)
    23. t.backward(y)
    24. t.right(45)
    25. t.forward(x)
    26. t.left(45)
    27. t.forward(y)
    28. t.backward(y)
    29. t.left(45)
    30. t.forward(x)
    31. t.right(45)
    32. t.forward(y)
    33. t.backward(y)
    34. t.left(135)
    35. t.forward(x)
    36. t.right(135)
    37. t.forward(y)
    38. t.backward(y)
    39. t.right(135)
    40. t.forward(x)
    41. t.left(90)
    42. ……

    程序分析 

    这段代码用 turtle 模块画出了一个立体的正方体礼物盒效果。首先定义 gift() 函数,里面包含了画出一个正方体礼物盒的过程。这里我设置礼物盒的长、宽、高相等,长和宽为 x,高为 y。在循环里,先画出四条边,然后左转 45 度,向前移动 y 像素,右转 45 度,再画出四条边,然后左转 135 度,向前移动 y 像素,再右转 180 度,向前移动 y 像素,左转 45 度,向前移动 x 像素,右转 45 度,向前移动 y 像素,向后移动 y 像素,左转 45 度,向前移动 x 像素,右转 45 度,向前移动 y 像素,向后移动 y 像素,左转 135 度,向前移动 x 像素,右转 135 度,向前移动 y 像素,向后移动 y 像素,右转 135 度,向前移动 x 像素,左转 90 度,完成一个正方体礼物盒的绘制。

    接着定义 gifts() 函数,用来画出多个正方体礼物盒。在循环里,先用 up() 函数提起笔,向前移动 40 像素,再用 down() 函数将笔放下,画出一个正方体礼物盒,拉出礼物盒的颜色列表 c,循环画出不同颜色的礼物盒。最后的效果就是屏幕上有多个彩色的正方体礼物盒,从而实现了礼物盒的效果。

    5. 祝福 

    程序设计

    1. def writes(): #写字:“圣诞快乐!”
    2. t.pencolor("cyan") #画笔颜色,天蓝色
    3. t.hideturtle() #隐藏画笔
    4. t.up()
    5. t.goto(-160,-250) #从(-160,-250)开始写字
    6. t.down()
    7. t.write("Merry Christmas!",font=("Comic Sans MS",30,"bold")) #开始写字,"Merry Christmas!"为要写的字,"Comic Sans MS"为字体,30为字的大小,bold为粗体(可自行修改要写的字)

    程序分析

    这段代码用 turtle 模块在屏幕上写出了一段文字 “Merry Christmas!” 的效果。定义 writes() 函数,先用 pencolor() 函数设置画笔颜色为天蓝色,再用 up() 函数提起笔,将画笔移动到屏幕底部中心点的左边 160 像素,向下 250 像素的位置,准备写字。用 down() 函数将笔放下,用 write() 函数开始写字,"Merry Christmas!" 是要写的字,"Comic Sans MS" 是字体,30 是字的大小,bold 是粗体。写完后,画笔隐藏,写字结束。最后在屏幕上就会出现一行 “Merry Christmas!” 的字。

    完整代码

    https://want595.blog.csdn.net/article/details/128428985

    尾声

    祝小伙伴们圣诞节快乐吖!

  • 相关阅读:
    Spring事务执行原理源码
    Chapter 2 Gradient Descent
    在Python中如何对文件进行操作?
    ViewModifier/视图修饰符, ButtonStyle/按钮样式 的使用
    买卖股票的最佳时机
    练[极客大挑战 2019]BuyFlag
    webview_flutter
    基于RK3588全高端智能终端机器人主板
    Selenium启动常用浏览器
    深度 | 国产数据库到底行不行?金仓数据库审计性能实测
  • 原文地址:https://blog.csdn.net/m0_68111267/article/details/128213770
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号