19、初识Python的海龟库

前面我们已经学完了Python的所有数据类型和程序的结构。从这节课开始,我们来学习Python的海龟库。

海龟(turtle)库中有一支神奇的画笔,从绘画窗的正中心开始,根据指令在画布上游走。我们可以自己控制画笔的方向、颜色、粗细,从而绘制出多彩的图形。我们从这节课开始讲turtle库中基本的函数使用,让我们也用python画出属于自己的一幅画吧。

一、了解笛卡尔坐标系和像素的概念

1.1 笛卡尔坐标系

在使用海龟库画图的过程中,我们需要使用坐标来表示画布中一个点的位置。因此,我们需要对坐标系有一个初步的了解。在海龟库的画布中,我们使用的是笛卡尔坐标系,也叫平面直角坐标系。

两条数轴分别置于水平位置与垂直位置,取向右与向上的方向分别为两条数轴的正方向。水平的数轴叫做x轴(x-axis)或横轴,垂直的数轴叫做y轴(y-axis)或纵轴,x轴y轴统称为坐标轴,它们的公共原点O称为直角坐标系的原点(origin),以点O为原点的平面直角坐标系记作平面直角坐标系xOy。

19、初识Python的海龟库_第1张图片

在海龟库的画布中,画布的最中间的位置是坐标轴的原点。画布上任何一个点的位置,都可以使用坐标表示。表示方法为(x, y)。原点的坐标是(0, 0)

19、初识Python的海龟库_第2张图片

上图中,A点的坐标是(3, 2),B点的坐标是(-2, 1),C点坐标是(-1, -2),D点坐标是(1, -3)。 

1.2 什么叫像素

我们都学过长度的单位,有米、分米、厘米、毫米等等。这些长度单位在我们电脑屏幕上是不适用的。为什么呢?因为我们每个人使用的计算机的屏幕大小都是不一样的。大到电视机,小到手机屏幕。

如果用厘米为单位,同样是向前10厘米对于电视机屏幕来说才走了一点点,对于手机屏幕来说已经不够用了。

计算机的显示器是由一个个方点组成的,每一个方点的长度叫做1像素(pixcel,简称px)。我们使用像素作为长度的单位。

二、如何导入海龟库

海龟(turtle)库是Python中的一个绘图用的函数库。在Python中导入一个库,需要使用import语句。导入海龟库的语句格式为:

import turtle

在程序中,要使用turtle.开头调用turtle库中的对象和方法。 为了程序中书写简便,我们可以加上as语句定义一个别名。

import turtle as t

使用了别名后,在程序中,只需要使用 t. 开头调用turtle库中的对象和方法。

还有一种调用方式,是直接调用库中所有的对象和方法,函数名称前不再需要写任何东西。

from turtle import *

三、基本画笔控制函数

我们先想一下,如果说给你一张纸和一支笔,画线条的时候你会有哪些操作?使用计算机画线条的操作基本上跟人类区别不大,无非就是落笔、抬笔、笔向前移动或者向后移动、转动方向。那我们看一下基本画笔控制的函数:

函数 描述
forward() 画笔前进
backward() 画笔后退
left() 画笔向左旋转
right() 画笔向右旋转
goto() 画笔移动到指定坐标
penup() 抬笔
pendown() 落笔

我们在画图时,画笔的位置位于坐标原点(画布的最中央),画笔的角度为水平向右,画笔是落笔状态。在画布中,我们可以看到海龟的箭头,箭头的位置就是当前画笔的位置,箭头指向的方向就是画笔当前的角度。

下面,我们来看看各种函数的具体使用吧。

3.1 forward()函数

画笔向前移动一定的距离,使用方法:

turtle.forward(distance)

使用示例:

import turtle
turtle.forward(100)
turtle.done()

19、初识Python的海龟库_第3张图片

3.2 backward()函数

画笔向后移动一定的距离,使用方法:

turtle.backward(distance)

使用示例:

import turtle
turtle.backward(100)
turtle.done()

19、初识Python的海龟库_第4张图片

3.3 left()函数和right()函数

left()函数是画笔向左转一定角度,right()函数是画笔向右转一定角度,函数里的参数是角度。使用的方法一样:

turtle.left(angle)
turtle.right(angle)

 使用示例:

import turtle
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.done()

19、初识Python的海龟库_第5张图片

import turtle
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.done()

 19、初识Python的海龟库_第6张图片

3.4  goto()函数

goto()函数的作用是将画笔移动到指定的坐标。无论画笔当前转向什么角度,使用直线直接走到对应的坐标。使用方法如下:

turtle.goto(x, y)

这里的参数x和y表示坐标轴的坐标值。

使用示例:

import turtle
turtle.goto(100, 100)
turtle.done()

19、初识Python的海龟库_第7张图片

3.5 penup()和pendown()函数

 看单词就可以看出,它们分别是抬笔和落笔。函数中没有任何参数。使用方法:

turtle.penup()
turtle.pendown()

使用实例:

import turtle
turtle.forward(50)
turtle.penup()
turtle.forward(100)
turtle.pendown()
turtle.forward(50)
turtle.done()

19、初识Python的海龟库_第8张图片

 四、画笔属性设置基本函数

前面我们虽然画出了线条,但是都是一根黑色的细线,如果想要更加美观,就得使用画笔属性设置的函数了。我们先学习三种基本的画笔属性的函数:

函数 描述
pensize() 设置画笔粗细
pencolor() 设置画笔颜色
speed() 设置绘画速度

下面我们来看这几个函数的具体使用吧:

4.1 pensize()函数

pensize()函数可以设置画笔的粗细,在未设置粗细的情况下,默认宽度为1,函数格式:

turtle.pensize(width)

我们看看具体的例子吧:

import turtle
turtle.forward(100)
turtle.pensize(10)
turtle.forward(100)
turtle.done()

19、初识Python的海龟库_第9张图片

4.2 pencolor()函数

 pencolor()函数可以设置画笔的颜色,在未设置的情况下,画笔默认颜色为黑色。函数格式:

turtle.pencolor(color)

这里的颜色目前阶段我们只要使用颜色英文单词的字符串就可以了。以后讲了颜色的高级设置以后还有更多的值可以写。我们看看具体的例子:

import turtle
turtle.pensize(5)
turtle.pencolor("red")
turtle.forward(100)
turtle.pencolor("blue")
turtle.forward(100)
turtle.done()

 

19、初识Python的海龟库_第10张图片

4.3 speed()函数

speed()函数的作用是控制画图的速度,函数的格式为:

turtle.speed(speed)

参数speed的取值范围是0~10。最慢为1,随着数字变大,速度越来越快。有一个特殊的值:速度0为最快

示例代码:

import turtle
turtle.speed(1)
turtle.forward(50)
turtle.speed(10)
turtle.forward(50)
turtle.done()

大家可以复制代码运行试一下。代码运行的过程中注意观察画笔运行的速度。

五、turtle库的其他常用函数

5.1 hideturtle()函数

我们前面在试各种函数时会发现,我们都图画完后,画笔还在屏幕上。如果最后生成一个作品,上面多一个画笔确实不好看。我们当然希望把它给隐藏了。只要使用hideturtle()函数就可以了。使用方法:

turtle.hideturtle()

5.2 done()函数

前面的每一个例子中,我们都在使用它。最后我们讲一下它的作用:

暂停程序,停止画笔绘制,但绘图窗体不关闭,直到用户关闭Python Turtle图形化窗口为止。使用方法:

turtle.done()

这个代码放在turtle画图的最后一行,如果后面还有代码将不会再运行。它最大的作用是阻止窗口关闭,大家可以试一下如果没有这一行,图画完后会怎样。

六、本节课函数应用实例演示

题目要求:使用turtle绘制一个边长为100、线条宽度为5、线条颜色为绿色的等边三角形。

题目分析:等边三角形的三条边相等,内角是60°。我们先绘制一条线,内角是60°,那我们画笔要旋转120°。线条的宽度和线条的颜色在绘图之前先设置好。

代码如下:

import turtle as t
t.pensize(5)
t.pencolor("green")
t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
t.forward(100)
t.hideturtle()
t.done()

以上代码可以按照题目的要求绘制出等边三角形了。但是我们想一下,三个边的操作都都是一样的,我们为什么不能用循环语句来书写呢?我们可以优化一下代码:

import turtle as t
t.pensize(5)
t.pencolor("green")
for i in range(3):
    t.forward(100)
    t.left(120)
t.hideturtle()
t.done()

七、课后思考题

1、绘制一个长为300,宽为200的长方形,线条宽度为4,长的线条为粉红色、宽的线条为紫色。

2、绘制一个五角星,每条线的长度为150,线条宽度为2,线条颜色为橙色。

3、绘制两条长度为200的线段,两条线的间隔为100,上面一条线颜色为棕色、下面一条线颜色为黄色,两条线的宽度都为10。

八、上节课思考题答案

1、参考答案:

score = [(98, 97,96), (79,98,97), (90,96,97), (99,90,92), (93,98,91), (98,99,97), (89,95,87), (97,67,89)]
chinese = [] # 语文成绩
math = [] # 数学成绩
english = [] # 英语成绩
total = [] # 总成绩
for i in score:
    chinese.append(i[0])
    math.append(i[1])
    english.append(i[2])
    total.append(sum(i))
print("语文平均分:", sum(chinese) / len(chinese))
print("语文最高分:", max(chinese))
print("语文最低分:", min(chinese))
print("数学平均分:", sum(math) / len(math))
print("数学最高分:", max(math))
print("数学最低分:", min(math))
print("英语平均分:", sum(english) / len(english))
print("英语最高分:", max(english))
print("英语最低分:", min(english))
print("每位同学的总成绩:", total)

2、参考答案:

for i in range(2, 101):   #先取100以内的数字(range包前不包尾)
    for j in range(2, i):   #再取小于第一次取的数
        if i % j == 0:   #第一次(较大)的数 除以 第二次(较小)的数
            break           #如果取余为0表示j是i的因子,舍去,结束本次i所在数的所有循环,用break
    else:
        print(i)         #无法整除所有j,则无因子,符合质数的概念,输出

3、参考答案

a = int(input("第一个数:"))
b = int(input("第二个数:"))
# 无法确定输入的数哪个大,先要判断大小
if a < b:
    xiao = a
    da = b
else:
    da = a
    xiao = b
n = 0 #求和用
for i in range(xiao, da + 1): #含头不含尾,大的数要+1
    if i % 3 == 0:
        continue #能被3整除的略过
    n += i
print(n)

你可能感兴趣的:(青少年Python编程系列讲解,python,开发语言,青少年编程)