小编把之前发过的好玩的有趣的Python绘画结果总结起来发给大家,可以在各种节日跟心爱的那个TA来个浪漫表白哦~喜欢就收藏下来吧,多多支持哦~
https://docs.qq.com/doc/DT1ZIUFJmU0N1T0Rt
今天刷漫画的时候看到那个樱花树开的真是太好看了,突然就想画个樱花树,然后趁着心情好就把它解析出来,嘿嘿是真的还蛮好看的,而且一个代码可以随机画出多种样式的。
樱花原产北半球温带环喜马拉雅山地区,在世界各地都有生长,主要在日本国生长。花每枝3到5朵,成伞状花序,花瓣先端缺刻,花色多为白色、粉红色。花常于3月与叶同放或叶后开花,随季节变化,樱花花色幽香艳丽,常用于园林观赏。樱花可分单瓣和复瓣两类,单瓣类能开花结果,复瓣类多半不结果。
Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
Turtle库是Python语言中一个很流行的绘制图像的函数库。
想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制。
(一)绘制画幕
首先绘制画幕,命令说明如下:
1.screensize(width, height, bg=color):设置画幕大小及颜色
2.setup(p1, p2):设置画幕大小,当 p1、p2 为小数时表示屏幕占比;当 p1、p2 为整数时表示像素
3.tracer(speed):设置绘制速度,speed越大表示绘制速度越快
- def get_screen(width, height, color, speed):
- # 创建画幕
- screen_obj = turtle.Screen()
- # 画布大小:(width, height),颜色:color
- screen_obj.screensize(width, height, bg=color)
- screen_obj.setup(1.0, 1.0)
- # speed倍加速
- screen_obj.tracer(speed)
-
- return screen_obj
(二)绘制落花
在确定落花数量的情况下,我们首先要评估落花的范围,这里通过两句语句来约束落花的范围(落花数量越多,当然地落花范围也就越大):
- # 有正有负就可以让画笔往二个方向走
- x = flower - 4 * flower * random()
-
- # 花瓣整体宽度(-10, 10)
- y = 10 - 20 * random()
然后我们来讲讲 turtle 常用的几个命令吧:
首先,我们得明确,对于 turtle 画布来说,其为一个 xOy 的平面,画布中心为原点 O ;对于 turtle 画笔来说,其有一个初始方向,指向 x 轴正方向。
1.penup():起笔(可以想象成画画的时候沾墨之后提笔)
2.forward():向前移动
3.backward():向后移动
4.left(degree):逆时针旋转 degree 度
5.right(degree):顺时针旋转 degree 度
6.pendown():落笔
7.pencolor(color):笔墨颜色为 color
8.circle(r):画一个半径为 r 的圆
代码如下:
- def draw_petal(turtle_obj, flower):
- # 绘制掉落的花瓣
- for i in range(int(flower / 2)):
- # 有正有负就可以让画笔往二个方向走
- x = flower - 2 * flower * random()
-
- # 花瓣整体宽度(-10, 10)
- y = 10 - 20 * random()
-
- # 提笔,向前y,左转90,走x,落笔
- turtle_obj.penup()
- turtle_obj.forward(y)
- turtle_obj.left(90)
- turtle_obj.forward(x)
- turtle_obj.pendown()
-
- # 珊瑚色
- turtle_obj.pencolor("lightcoral")
- # 画圆
- turtle_obj.circle(1)
-
- # 回到起点
- # 提笔,后退x,右转90,后退y,落笔
- turtle_obj.penup()
- turtle_obj.backward(x)
- turtle_obj.right(90)
- turtle_obj.backward(y)
- turtle_obj.pendown()
(三)绘制树枝与花瓣
读者会发现,在 drwa_tree 方法中,又出现了两次 drwa_tree 方法,这是一个递归的方法,可以简单理解为一棵树最下面的树枝最少且最粗,越往上树枝数量增加但是变细了。
- def draw_tree(turtle_obj, branch, tree_color):
- # 设置一个最小分支长度
- min_branch = 4
-
- if branch > min_branch:
- if branch < 8:
- # 以0.5的概率,向左、右分支
- if randint(0, 1) == 0:
- # 左为白色
- turtle_obj.pencolor("snow")
- else:
- # 右为珊瑚色
- turtle_obj.pencolor("lightcoral")
- # 枝干
- turtle_obj.pensize(branch / 2)
- elif 8 <= branch <= 16:
- # 以0.33的概率,分为左、中、右分支
- if randint(0, 2) == 0:
- # 左为白色
- turtle_obj.pencolor("snow")
- else:
- # 中、右为珊瑚色
- turtle_obj.pencolor("lightcoral")
- # 树枝
- turtle_obj.pensize(branch / 4)
- else:
- # 褐色
- turtle_obj.pencolor(tree_color)
- # 细枝
- turtle_obj.pensize(branch / 10)
-
- # 最开始的树干长度
- turtle_obj.forward(branch)
-
- # 随机度数因子
- a = 1.5 * random()
- # 顺时针旋转随机角度(0~30度)
- turtle_obj.right(20 * a)
-
- # 随机长度因子
- b = 1.5 * random()
- # 往右画,直到画不动为止
- draw_tree(turtle_obj, branch - 10 * b, tree_color)
-
- # 左转随机角度
- turtle_obj.left(40 * a)
- # 往左画,直到画不动位置
- draw_tree(turtle_obj, branch - 10 * b, tree_color)
-
- # 右转一定角度
- turtle_obj.right(20 * a)
- # 提笔
- turtle_obj.penup()
-
- # 递归结束回到起点
- turtle_obj.backward(branch)
- turtle_obj.pendown()
(四)绘制多棵树
这部分代码的前半部分是用来约束树根的位置的,为了使树可以在图像中显示地较为完成,较大的树根应该更靠近于画幕底端,且不能太靠近两边,其余部分代码就很容易理解了。
- def trees(tree_num):
- # 颜色
- color = ['brown', 'tan', 'black']
-
- for j in range(tree_num):
- # 树干颜色
- tree_color = color[randint(0, len(color) - 1)]
-
- # 画笔大小
- pensize = randint(2, 5)
- # 前进像素
- forward = ((-1) ** pensize) * pensize * randint(20, 50)
- # 后退像素
- if pensize <= 3:
- backward = ((-1) ** pensize) * (5 - pensize) * randint(10, 15)
- else:
- backward = pensize * randint(45, 50)
-
- # 创建画笔
- turtle_obj = turtle.Turtle()
- # 画笔粗细
- turtle_obj.pensize(pensize)
- # 提笔,向前forward,左转90,backward,落笔
- turtle_obj.penup()
- turtle_obj.forward(forward)
- turtle_obj.left(90)
- turtle_obj.backward(backward)
- turtle_obj.pendown()
- # 画笔颜色:褐色
- turtle_obj.pencolor(tree_color)
-
- # 枝干粗细
- branch = pensize * 15
- # 落花数
- flowers = branch
- # 第j棵树
- draw_tree(turtle_obj, branch, tree_color)
- # 花瓣
- draw_petal(turtle_obj, flowers)
二、效果
整体效果还是挺美的。
相信大家都不会拒绝一只会皮卡皮卡!皮卡丘~的小可爱吧, 小时候是不是都幻想着身边有一只皮卡丘呢?
https://docs.qq.com/doc/DT1ZIUFJmU0N1T0Rt
正文:
今天就为大家分享用python画一只可爱的皮卡丘实例,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧,让我们愉快地开始吧~
上代码:
- #上嘴唇
- color("black","#FFD624")
- penup()
- goto(-168, 65)
- pendown()
- begin_fill()
- setheading(-25)
- for i in range(2):
- setheading(-25)
- circle(35, 70)
- end_fill()
- #嘴中第二个阴影部分
- color("#AB1945", "#AB1945")
- penup()
- goto(-142, 45)
- pendown()
- begin_fill()
- setheading(40)
- circle(-33, 70)
- goto(-104,48.3)
- penup()
- goto(-108,33)
- pendown()
- setheading(155)
- circle(25, 70)
- end_fill()
-
- # 左眼
- t.pu()
- t.color("black")
- t.setpos(t.xcor()-40,t.ycor()+90)
- t.pd()
- t.circle(5)
- t.pu()
- t.setpos(t.xcor()+5,t.ycor()+10)
- t.pd()
- t.begin_fill()
- t.seth(190)
- t.circle(15, 130)
- t.seth(310)
- t.circle(10, 15)
- t.seth(0)
- t.circle(17, 133)
- t.seth(90)
- t.circle(10, 15)
- t.end_fill()
- t.pu()
- t.setpos(t.xcor()+2,t.ycor()-15)
- t.pd()
- t.color("white")
- t.begin_fill()
- t.circle(5)
- t.end_fill()
- # 右眼
- t.pu()
- t.setpos(t.xcor()+85,t.ycor()+15)
- t.pd()
- t.color("black")
- t.circle(5)
- t.pu()
- t.setpos(t.xcor()+5,t.ycor()+10)
- t.pd()
- t.begin_fill()
- t.seth(190)
- t.circle(20, 130)
- t.seth(310)
- t.circle(10, 15)
- t.seth(0)
- t.circle(22, 133)
- t.seth(90)
- t.circle(13, 15)
- t.end_fill()
- t.pu()
- t.setpos(t.xcor()-7,t.ycor()-15)
- t.pd()
- t.color("white")
- t.begin_fill()
- t.circle(7)
- t.end_fill()
结果展示:
都说程序员不浪漫,上次看到一个程序员小哥给自己老婆开发了一个专属的APP。其实程序员还有更多美好的事情可以做,比如,给你喜欢的妹纸,用代码的方式去表白(当然可能还有一些前戏啥的,自己结合实际场景再渲染下)
直接用实力告诉女朋友,我也是浪漫的!
直接上代码:
- #!/usr/bin/env python
-
- # -*- coding:utf-8 -*-
-
- import turtle
- import time
-
- # 画心形圆弧
-
- def hart_arc():
-
- for i in range(200):
-
- turtle.right(1)
-
- turtle.forward(2)
-
-
- def move_pen_position(x, y):
-
- turtle.hideturtle() # 隐藏画笔(先)
-
- turtle.up() # 提笔
-
- turtle.goto(x, y) # 移动画笔到指定起始坐标(窗口中心为0,0)
-
- turtle.down() # 下笔
-
- turtle.showturtle() # 显示画笔
-
-
- # 初始化
-
- turtle.setup(width=800, height=500) # 窗口(画布)大小
-
- turtle.color('red', 'pink') # 画笔颜色
-
- turtle.pensize(3) # 画笔粗细
-
- turtle.speed(1) # 描绘速度
-
- # 初始化画笔起始坐标
-
- move_pen_position(x=0,y=-180) # 移动画笔位置
-
- turtle.left(140) # 向左旋转140度
-
- turtle.begin_fill() # 标记背景填充位置
-
- # 画心形直线( 左下方 )
- turtle.forward(224) # 向前移动画笔,长度为224
-
- # 画爱心圆弧
-
- hart_arc() # 左侧圆弧
- turtle.left(120) # 调整画笔角度
- hart_arc() # 右侧圆弧
-
- # 画心形直线( 右下方 )
-
- turtle.forward(224)
-
- turtle.end_fill() # 标记背景填充结束位置
-
- # 点击窗口关闭程序
-
- window = turtle.Screen()
-
- window.exitonclick()
结果展示:
杠杠滴~
部分代码:
效果展示:
快来学习Python吧,它会给你带来很多乐趣的,现在我们就来画朵玫瑰花吧!
对于喜欢的女孩子表白的时候都喜欢送玫瑰花,但是玫瑰花又容易凋谢又比较贵,特别是对于学生而言就更加承受不了了,毕竟现在还是用的父母的钱,如果我们用编程写出来玫瑰花用来表白又“省钱”又好看,还耐用......
源码:
- from turtle import *
- import time
-
- setup(1000,800,0,0)
- speed(0)
- penup()
- seth(90)
- fd(340)
- seth(0)
- pendown()
-
- speed(5)
- begin_fill()
- fillcolor('red')
- circle(50,30)
-
- for i in range(10):
- fd(1)
- left(10)
-
- circle(40,40)
-
- for i in range(6):
- fd(1)
- left(3)
-
- circle(80,40)
-
- for i in range(20):
- fd(0.5)
- left(5)
-
- circle(80,45)
-
- for i in range(10):
- fd(2)
- left(1)
-
- circle(80,25)
-
- for i in range(20):
- fd(1)
- left(4)
-
- circle(50,50)
-
- time.sleep(0.1)
-
- circle(120,55)
-
- speed(0)
-
- seth(-90)
- fd(70)
-
- right(150)
- fd(20)
-
- left(140)
- circle(140,90)
-
- left(30)
- circle(160,100)
-
- left(130)
- fd(25)
-
- penup()
- right(150)
- circle(40,80)
- pendown()
-
- left(115)
- fd(60)
-
- penup()
- left(180)
- fd(60)
- pendown()
-
- end_fill()
-
- right(120)
- circle(-50,50)
- circle(-20,90)
-
- speed(1)
- fd(75)
-
- speed(0)
- circle(90,110)
-
- penup()
- left(162)
- fd(185)
- left(170)
- pendown()
- circle(200,10)
- circle(100,40)
- circle(-52,115)
- left(20)
- circle(100,20)
- circle(300,20)
- speed(1)
- fd(250)
-
- penup()
- speed(0)
- left(180)
- fd(250)
- circle(-300,7)
- right(80)
- circle(200,5)
- pendown()
-
- left(60)
- begin_fill()
- fillcolor('green')
- circle(-80,100)
- right(90)
- fd(10)
- left(20)
- circle(-63,127)
- end_fill()
结果展示效果图:
给大家绘画个圣诞树玩玩,收藏起来,圣诞节用得上哦~很漂亮,整理了一下源码,分享给大家(这些我都测试过,确实可以生成喔~)
源码:
- import turtle
-
- screen = turtle.Screen()
- screen.setup(375, 700)
-
- circle = turtle.Turtle()
- circle.shape('circle')
- circle.color('red')
- circle.speed('fastest')
- circle.up()
-
- square = turtle.Turtle()
- square.shape('square')
- square.color('green')
- square.speed('fastest')
- square.up()
-
- circle.goto(0, 280)
- circle.stamp()
-
- k = 0
- for i in range(1, 13):
- y = 30 * i
- for j in range(i - k):
- x = 30 * j
- square.goto(x, -y + 280)
- square.stamp()
- square.goto(-x, -y + 280)
- square.stamp()
效果展示图:
后续还有什么喜欢的或者想要的,可以评论区留言哦,我会收集好同步发出来的哦~
喜欢的小伙伴给个喜欢就赶紧拿走吧,戳一下就可以哦 ↓
戳一戳腾讯文档-在线文档https://docs.qq.com/doc/DT1ZIUFJmU0N1T0Rt