python-turtle-画雪花-2种方法及效果的详解

1.方法一:

代码:

#python3.8
#xuguojun
#2020.1.30
#导出模块
import turtle as t
import random as r
#定义画雪
def drawsnow():
    t.ht()  #隐藏笔头,ht=hideturtle
    t.pensize(2)  #定义笔头大小
    for i in range(50): #50,其实画49朵雪花
        t.pencolor("white") #定义画笔颜色为白色,其实就是雪花为白色
        t.pu() #提笔,pu=penup
        t.setx(r.randint(-350,350)) #定义x坐标,随机从-350到350之间选择
        t.sety(r.randint(1,350)) #定义y坐标,注意雪花一般在地上不会落下,所以定义是从1开始
        t.pd() #落笔,pd=pendown
        dens = 6 #雪花瓣数设为6
        snowsize = r.randint(2,12) #定义雪花大小
        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))  #转动角度

#画地面线:
def drawgroud():
    t.ht() #隐藏画笔,t.hideturtle()
    for i in range(r.randint(10,15)): #随机画几条地面线,但在10和15之间
    #for i in range(10): #每次操作只画10条地面线
        x=r.randint(-400,350)
        y=r.randint(-280,-1)
        t.pencolor("white")
        t.pu() #提笔pu=penup
        t.goto(x,y) #去这个坐标
        t.pd() #落笔pd=pendown
        t.fd(r.randint(40,100))  #fd=forward向前画大小,随机从40~100选

t.setup(800,600,200,200)#窗口大小和位置
t.tracer(True)   #雪花和背景绘制的过程,true=就是慢慢看它画雪
t.bgcolor("lightpink") #lightpink=轻粉色,天蓝色lightblue=#B0E0E6
t.speed(0.1) #画笔的速度
drawsnow() #执行画雪
drawgroud() #执行画地面线
t.done() #完成

效果图:

2.方法二:

代码:

#python3.8
#xuguojun
#2020.1.30
#导出模块,这样导出比代码较简洁,但是注意r和后面RGB的r,所以我改为d代替R(r)
import turtle as t
import random as r
#绘制雪花
s=30 #定义30个
def snow(s):
    t.ht()  #ht=hideturtle,隐藏画笔和轨迹
    t.speed(500) #设置画笔的速度,快
    t.pensize(2) #设置笔头大小
    for i in range(s):
        d = r.random() #随机定义颜色
        g = r.random()
        b = r.random()
        t.pencolor(d, g, b) #随机颜色定义,画笔的颜色,注意这里本来是rgb,但是r定义过random,所以用d代替
        t.pu() #pu=penup,提笔
        t.goto(r.randint(-350, 350), r.randint(1, 270)) #坐标和x和y值随机取值及范围
        t.pd() #pd=pendown,落笔
        dens = r.randint(8, 12) #随机定义雪花的花瓣数
        snowsize = r.randint(10, 14) #随机定义雪花的大小
        for _ in range(dens):
            t.forward(snowsize)  # 向当前画笔方向移动snowsize像素长度
            t.backward(snowsize)  # 向当前画笔相反方向移动snowsize像素长度
            t.right(360 / dens)  # 顺时针移动360 / dens度

#绘制地面线
g=50 #定义50条
def ground(g):
    t.ht() #ht=hideturtle,隐藏画笔和轨迹
    t.speed(500) #画笔的速度
    for i in range(g):
        t.pensize(r.randint(5, 10)) #随机画笔大小,从5~10选
        x = r.randint(-400, 350) #x坐标轴的随机从-400到350选
        y = r.randint(-280, -1)
        d = -y / 280 #注意这里的r要该d
        g = -y / 280 #定义随机数dgb,与y随机数挂钩
        b = -y / 280
        t.pencolor(d, g, b) #定义颜色,r改为d,因为r在模块导出时定义random的
        t.penup()  #pu=penup,提笔
        t.goto(x, y)  # 让画笔移动到此位置
        t.pendown()  # pd=pendown,落笔
        t.forward(r.randint(40, 100))  # 眼当前画笔方向向前移动40~100距离,fd=forward

#-----熟悉以下2中方法,启动画画------
# 方法一:主函数法
def main():
    t.setup(800, 600, 500, 0) #窗口大小和位置,x=500,y=0,代表坐标
    t.bgcolor("black") #背景颜色为黑色
    snow(s) #代表数量
    ground(g) #代表数量
    t.mainloop() #循环挂起

main()

#方法二 简洁法
#将方法一,注释掉,去掉下面的注释,启动方法二,即可

‘‘‘
t.setup(800, 600, 500, 0) #窗口大小和位置,x=500,y=0,代表坐标
t.bgcolor("black") #背景颜色为黑色
snow(s) #代表数量
ground(g) #代表数量
t.done() #如果没有这个,结束后自动关闭窗口,有了,就不关闭。
‘‘‘

效果图:

原文地址:https://www.cnblogs.com/ysysbky/p/12242355.html

时间: 2024-08-02 15:07:36

python-turtle-画雪花-2种方法及效果的详解的相关文章

Java Web -- Servlet(4) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(1)

一.实现Servlet接口 通过实现Servlet接口来了解Servlet的生命周期 (1)以规范的形式创建一个web应用(即在webapps目录下创建一个web应用) 创建web应用 (2)classes目录下创建一个.java(该java文件为实现Servlet接口) 创建文件夹MyFirstServlet.java 代码如下: package com.focus; import javax.servlet.*; import javax.servlet.http.*; import jav

Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(2)

三.Servlet的生命周期 一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除.Servlet的生命周期被javax.servlet.Servlet这个接口所定义. 所有的Java Servlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行. Servlet引擎是Web 服务器按照Java Servlet API定制的扩展.S

Python下载网页的几种方法

get和post方式总结 get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在servlet/jsp中就无法处理发挥java的比如vector之类的功能). post方式:就传输方式讲参数会被打包在数据报中传输,从CONTENT_LENGTH这个环境变量中读取,便于传送较大一些的数据,同时因为不暴露数据在浏览器的地址栏中,安全性相对较高,但这样的处理效率会受到影响. get

Python字符串拼接的6种方法

Python字符串拼接的6种方法: 1. 加号 第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此直接用 “+” 来连接两个字符串: 1 print 'Python' + 'Tab' 结果: 1 PythonTab 2. 逗号 第二种比较特殊,使用逗号连接两个字符串,如果两个字符串用“逗号”隔开,那么这两个字符串将被连接,但是,字符串之间会多出一个空格: 1 print 'Python','Tab' 结果: 1 Python Tab 3. 直接连接 第

python遍历数组的两种方法的代码

工作过程中,把开发过程中较好的一些内容段备份一下,下面内容是关于python遍历数组的两种方法的内容,希望对小伙伴有用途. colours = ["red","green","blue"] for colour in colours: print colour # red # green # blue 下面的方法可以先获得数组的长度,然后根据索引号遍历数组,同时输出索引号 colours = ["red","gree

Python调用系统命令的6种方法

Python调用系统命令的6种方法在Python中调用系统命令一般使用os或者subprocess模块,下面介绍Python中最常用的6种调用系统命令的方法.1.os.system()该函数返回命令执行结果的返回值,system()函数在执行过程中进行了以下三步操作:1.fork一个子进程:2.在子进程中调用exec函数去执行命令:3.在父进程中调用wait(阻塞)去等待子进程结束.返回0表示命令执行成功,其他表示失败.用法:os.system("command")2.os.popen

第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行一个函数 dispatcher.connect()信号分发器,第一个参数信号触发函数,第二个参数是触发信号, signals.engine_started当Scrapy引擎启动爬取时发送该信号.该信号支持返回deferreds.signals.engine_stopped当Scrapy引擎停止时发送

Swing中弹出对话框的几种方式_JOptionPane.showMessageDialog等详解

Swing中弹出对话框的几种方式_JOptionPane.showMessageDialog等详解 在swing中,基于业务的考量,会有对话框来限制用户的行为及对用户的动作进行提示. Swing中提供了JOptionPane类来实现类似Windows平台下的MessageBox的功能,同样在Java中也有,利用JOptionPane类中的各个static方法 来生成各种标准的对话框,实现显示出信息.提出问题.警告.用户输入参数等功能.这些对话框都是模式对话框. ConfirmDialog ---

【转】jquery ajax 方法及各参数详解

在使用jquery的时候,我们经常用到jquery中对ajax的封装,下面对ajax函数的各参数详细说明和讲解,以便更好的理解和使用 $.get(url, data, callback,type) 和 $.post(url, data, callback, type). 1. jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据 这个是jQuery 的底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等. $.ajax() 返回其创建的 XML