Python入门——(二)Python基本图形绘制

 

 

深入理解Python语言

  •  "超级语言"的诞生计算机技术的演进
  • 编程语言的多样初心
  • Python语言的特点

计算机技术的演进

计算机技术的演进过程

2008-2016

复杂信息系统时代 (8年)

1981-2008

网络和视窗时代 (27年)

1946-1981

计算机系统结构时代 (35年)

2016-

人工智能时代

计算机技术的演进过程

2017-

人工智能时代

新计算时代

人类的问题

2008-2016

复杂信息系统时代

数据问题

1981-2008 网络和视窗时代

交互问题

1946-1981

计算机系统结构时代

计算能力问题

编程语言的多样初心

编程语言有哪些?

Basic, C, C++, C#, CSS, Fortran, Go, HTML, Java, JavaScript, Lisp, Lua, Matlab, Object C, Pascal, Perl, PHP, PostScript, Python, Ruby, Scala, SQL, Swift, VBA,

VB.NET, Verilog, VHDL, Visual Basic编程语言,也是一个江湖!

不同编程语言的初心和适用对象

 

编程语言

学习内容

语言本质

解决问题

适用对象

C

指针、内存、数据类型

理解计算机系统结构

性能

计算机类专业

Java

对象、跨平台、运行时

理解主客体关系

跨平台

软件类专业

C++

对象、多态、继承

理解主客体关系

大规模程序

计算机类专业

VB

对象、按钮、文本框

理解交互逻辑

桌面应用

不确定

Python

编程逻辑、第三方库

理解问题求解

各类问题

所有专业

各编程语言所处历史时期和使命不同,Python是计算时代演进的选择!

2018年以后的计算环境…

计算机性能不再是解一般问的瓶颈移动互联网广泛普及

大数据、云计算、物联网、信息安全、人工智能等需求爆发

解决日益增长的计算需求,用什么语言?

Python语言的特点

  • Python语言是通用语言
  • Python语言是脚本语言
  • Python语言是开源语言
  • Python语言是跨平台语言
  • Python语言是多模型语言

Guido van Rossum

Python语言创立者

2002年,Python 2.x

2008年,Python 3.x

Python特点与优势

语法简洁

  • C代码量的10%
  • 强制可读性
  • 较少的底层语法元素
  • 多种编程方式
  • 支持中文字符

生态高产

  • >13万第三方库
  • 快速增长的计算生态
  • 避免重复造轮子
  • 开放共享
  • 跨操作系统平台

 

Python 21行代码

如何看待Python语言?

人生苦短,我学Python

  • C/C++:Python归Python,C归C
  • Java:针对特定开发和岗位需求
  • HTML/CSS/JS:不可替代的前端技术,全栈能力
  • 其他语言:R/Go/Matlab等,特定领域

如何看待Python语言?

Python是最高产的程序设计语言及……

    • 掌握抽象并求解计算问题综合能力的语言
    • 了解产业界解决复杂计算问题方法的语言
    • 享受利用编程将创新变为实现乐趣的语

如何看待Python语言?

工具决定思维:关注工具变革的力量!

"超级语言"的诞生

编程语言的种类

机器语言

  • 一种二进制语言,直接使用二进制代码表达指令
  • 计算机硬件(CPU)可以直接执行,与具体CPU型号有关
  • 完成 2+3 功能的机器语言

11010010 00111011

编程语言的种类

汇编语言

  • 一种将二进制代码直接对应助记符的编程语言
  • 汇编语言与CPU型号有关,程序不通用,需要汇编器转换
  • 完成 2+3 功能的汇编语言 add 2,3,result

编程语言的种类

高级语言

  • 更接近自然语言,同时更容易描述计算问题
  • 高级语言代码与具体CPU型号无关,编译后运行
  • 完成 2+3 功能的高级语言 result = 2 + 3

编程语言种类的发展

超级语言

高级语言

汇编语言机器语言

    • 粘性整合已有程序,具备庞大计算生态
    • 接近自然语言,编译器,与CPU型号无关
    • 有助记符,汇编器,与CPU型号有关
    • 代码直接执行,与CPU型号有关

编程语言的种类

超级语言

  • 具有庞大计算生态,可以很容易利用已有代码功能
  • 编程思维不再是刀耕火种,而是集成开发
  • 完成 2+3 功能的超级语言 result = sum(2,3)

Python: 唯一的"超级语言"

Python前进的步伐不可阻挡

深入理解Python语言

  • 计算机系统结构时代到人工智能时代的演进路线
  • 五种编程语言的初心和历史使命

实例2: Python蟒蛇绘制

"Python蟒蛇绘制"问题分析

Python蟒蛇绘制

用程序绘制一条蟒蛇

- 貌似很有趣,可以来试试

- 先学会蟒蛇绘制,再绘朵玫瑰花送给TA

Python蟒蛇绘制

设计蟒蛇的基本形状

Python蟒蛇绘制

用程序绘制一条蟒蛇

  • 问题1: 计算机绘图是什么原理?

一段程序为何能够产生窗体?为何能在窗体上绘制图形?

  • 问题2: Python蟒蛇绘制从哪里开始呢?

如何绘制一条线?如何绘制一个弧形?如何绘制一个蟒蛇?

Python蟒蛇绘制

用程序绘制一条蟒蛇

实例1: 温度转换

Python蟒蛇绘制
#PythonDraw.py"Python蟒蛇绘制"实例编写

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4):

turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

使用IDLE的文件方式编写代码

并保存为

PythonDraw.py 文件

运行效果

IDLE打开文件,按F5运行

#PythonDraw.py

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4):

turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

程序关键

import 保留字引入了一个绘图库名字叫turtle没错,就是 海龟
#PythonDraw.py"Python蟒蛇绘制"举一反三

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3)

turtle.done()

举一反三

Python语法元素理解

    • Python蟒蛇绘制共17行代码,但很多行类似
    • 清楚理解这17行代码能够掌握Python基本绘图方法
    • 参考框架结构、逐行分析、逐词理解

举一反三

程序参数的改变

    • Python蟒蛇的颜色:黑色、白色、七彩色…
    • Python蟒蛇的长度:1节、3节、10节…
    • Python蟒蛇的方向:向左走、斜着走…

举一反三

计算问题的扩展

 

  • Python蟒蛇绘制问题是各类图像绘制问题的代表
  • 掌握绘制一条线的方法,就可以绘制整个世界
  • 圆形绘制、五角星绘制、国旗绘制、机器猫绘制…

 

模块1: turtle库的使用

  • turtle库基本介绍
  • RGB色彩体系

turtle库基本介绍

 

turtle库概述

turtle(海龟)库是turtle绘图体系的Python实现

 

  • turtle绘图体系:1969年诞生,主要用于程序设计入门
  • Python语言的标准库之一
  • 入门级的图形绘制函数库

标准库

Python计算生态 = 标准库 + 第三方库

 

  • 标准库:随解释器直接安装到操作系统中的功能模块
  • 第三方库:需要经过安装才能使用的功能模块
  • 库Library、包Package、模块Module,统称模块

turtle的原(wan)理(fa)

turtle(海龟)是一种真实的存在

 

  • 有一只海龟,其实在窗体正中心,在画布上游走
  • 走过的轨迹形成了绘制的图形
  • 海龟由程序控制,可以变换颜色、改变宽度等

turtle的魅力

turtle的绘图窗体

turtle的一个画布空间最小单位是像素

(0, 0)

turtle的绘图窗体

(startx, starty)

屏幕坐标系

turtle的绘图窗体

turtle.setup(width, height, startx,

    • setup()设置窗体大小及位置
    • 4个参数中后两个可选
    • setup()不是必须的

turtle的绘图窗体

turtle空间坐标体系

绝对坐标

(-100, 100)

(-100, -100)

y

(0, 0)

(100, 100)

x

(100, -100)

turtle空间坐标体系

turtle.goto(x, y)

(-100, 100)

y

(100, 100)

(-100, -100)

(0, 0)

x

(100, -100)

turtle空间坐标体系

import turtle

turtle.goto( 100, 100)

turtle.goto( 100,-100) turtle.goto(-100,-100) turtle.goto(-100, 100) turtle.goto(0,0)

(-100, 100)

(-100, -100)

(0, 0)

(100, 100)

(100, -100)

turtle空间坐标体系

左侧方向

海龟坐标

后退方向

前进方向

右侧方向

turtle空间坐标体系

turtle.circle(r,angle)

turtle.bk(d) turtle.fd(d)

turtle角度坐标体系

绝对角度

180 / -180 

90 / -270 

y

0 / 360 度

x

270 / -90 度

turtle角度坐标体系

turtle.seth(angle)

180 / -180 

90 / -270 

y

270 / -90 

0 / 360 

x

  • seth()改变海龟行进方向
  • angle为绝对度数
  • seth()只改变方向但不行进

turtle角度坐标体系
turtle.left(angle)Turtle角度坐标体系

海龟角度

turtle.right(angle)

Turtle角度坐标体系

import turtle turtle.left(45) turtle.fd(150) turtle.right(135) turtle.fd(300) turtle.left(135) turtle.fd(150)

300

RGB色彩体系

RGB色彩模式

由三种颜色构成的万物色

 

  • RGB指红蓝绿三个通道的颜色组合
  • 覆盖视力所能感知的所有颜色
  • RGB每色取值范围0-255整数或0-1小数

常用RGB色彩

英文名称

RGB整数值

RGB小数值

中文名称

white

255, 255, 255

1, 1, 1

白色

yellow

255, 255, 0

1, 1, 0

黄色

magenta

255, 0, 255

1, 0, 1

洋红

cyan

0, 255, 255

0, 1, 1

青色

blue

0, 0, 255

0, 0, 1

蓝色

black

0, 0, 0

0, 0, 0

黑色

常用RGB色彩

英文名称

RGB整数值

RGB小数值

中文名称

seashell

255, 245, 238

1, 0.96, 0.93

海贝色

gold

255, 215, 0

1, 0.84, 0

金色

pink

255, 192, 203

1, 0.75, 0.80

粉红色

brown

165, 42, 42

0.65, 0.16, 0.16

棕色

purple

160, 32, 240

0.63, 0.13, 0.94

紫色

tomato

255, 99, 71

1, 0.39, 0.28

番茄色

turtle的RGB色彩模式

默认采用小数值 可切换为整数值

turtle.colormode(mode)

  • 1.0:RGB小数值模式
  • 255:RGB整数值模式

 

 

turtle程序语法元素分析

  • 库引用与import
  • turtle画笔控制函数
  • turtle运动控制函数
  • turtle方向控制函数

 

 

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80)

turtle.circle(40, 80/2)

turtle.fd(40) <a>.<b>()的编码风格

turtle.circle(16, 180)

turtle.fd(40 * 2/3)

turtle.done()

库引用

扩充Python程序功能的方式

  • 使用import保留字完成,采用<a>.<b>()编码风格 import <库名>

<库名>.<函数名>(<函数参数>)

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40)

引入turtle库

使用turtle库函数

完成功能

turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

可是可是, 好多turtle,很繁琐嘛…

import更多用法

使用fromimport保留字共同完成

 

from <库名> import <函数名> from <库名> import *

<函数名>(<函数参数>)

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40)

from turtle import * setup(650, 350, 200, 200)

penup() fd(-250)

pendown() pensize(25) pencolor("purple") seth(-40)

for i in range(4): circle(40, 80)

circle(-40, 80) circle(40, 80/2) fd(40)

turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

circle(16, 180)

fd(40 * 2/3) done()

import更多用法

两种方法比较

import <库名>

<库名>.<函数名>(<函数参数>)

from <库名> import <函数名>

from <库名> import *

<函数名>(<函数参数>)

 

第一种方法不会出现函数重名问题,第二种方法则会出现

import更多用法

使用importas保留字共同完成

import <库名> as <库别名>

<库别名>.<函数名>(<函数参数>)
给调用的外部库关联一个更短、更适合自己的名字

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180)

import turtle as t t.setup(650, 350, 200, 200)

t.penup()

t.fd(-250) t.pendown() t.pensize(25) t.pencolor("purple") t.seth(-40)

for i in range(4): t.circle(40, 80)

t.circle(-40, 80) t.circle(40, 80/2) t.fd(40) t.circle(16, 180)

turtle.fd(40 * 2/3) turtle.done()

t.fd(40 * 2/3) t.done()

这个方法好!

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()
画笔控制函数penup(), pendown() pensize(), pencolor()

画笔操作后一直有效,一般成对出现

  • turtle.penup() 别名  turtle.pu()抬起画笔,海龟在飞行
  • turtle.pendown() 别名  turtle.pd()落下画笔,海龟在爬行

画笔控制函数

画笔设置后一直有效,直至下次重新设置

  • turtle.pensize(width) 别名  turtle.width(width)画笔宽度,海龟的腰围
  • turtle.pencolor(color) color为颜色字符串或r,g,b值画笔颜色,海龟在涂装

画笔控制函数

pencolor(color)的color参与可以有三种形式

  • 颜色字符串 :turtle.pencolor("purple")
  • RGB的小数值:turtle.pencolor(0.63, 0.13, 0.94)
  • RGB的元组值:turtle.pencolor((0.63,0.13,0.94))

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

penup() pendown() pensize(width)

pencolor(colorstring) pencolor(r,g,b) pencolor((r,g,b))

import trtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

fd() circle()

运动控制函数

控制海龟行进:走直线 & 走曲线

  • turtle.forward(d) 别名 turtle.fd(d)

向前行进,海龟走直线

  • d: 行进距离,可以为负数

运动控制函数

控制海龟行进:走直线 & 走曲线

  • turtle.circle(r, extent=None)

根据半径r绘制extent角度的弧形

  • r: 默认圆心在海龟左侧r距离的位置
  • extent: 绘制角度,默认是360度整圆

运动控制函数

turtle.circle(100) turtle.circle(-100,90)

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)
turtle.setup(650, 350, 200, 200) turtle.penup()import turtle

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

fd(d) circle(r,extent=None)

运动控制函数

画笔设置后一直有效,直至下次重新设置

  • turtle.forward(d) 别名 turtle.fd(d)

向前行进,海龟走直线

  • d: 行进距离,可以为负数

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done(

seth()

方向控制函数

控制海龟面对方向: 绝对角度 & 海龟角度

  • turtle.setheading(angle) 别名 turtle.seth(angle)

改变行进方向,海龟走角度

  • angle: 行进方向的绝对角度

方向控制函数

turtle.seth(45) turtle.seth(-135)

控制海龟面对方向: 绝对角度 & 海龟角度方向控制函数

  • turtle.left(angle) 海龟向左转
  • turtle.right(angle) 海龟向右转
  • angle: 在海龟当前行进方向上旋转的角度

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

seth(angle)

循环语句与range()函数

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

for in 保留字 range()

循环语句

按照一定次数循环执行一组语句

for <变量> in range(<次数>):

<被循环执行的语句>

  • <变量>表示每次循环的计数,0到<次数>-1

循环语句

  • 产生循环计数序列range()函数range(N)

产生 0 到 N-1的整数序列,共N个

  • range(M,N)

产生 M 到 N-1的整数序列,共N-M个

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

for i in range(N) range(M, N)

"Python蟒蛇绘制"代码分析

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

import turtle

turtle.setup(650, 350, 200, 200) turtle.penup()

turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40)

for i in range(4): turtle.circle(40, 80)

turtle.circle(-40, 80) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

turtle程序语法元素分析

    • 库引用: import、from…import、import…as…
    • penup()、pendown()、pensize()、pencolor()
    • fd()、circle()、seth()
 
   

 

猜你喜欢

转载自blog.csdn.net/qq_38677310/article/details/82181148