时间过的真快呀,一转眼七天的假期就要过去了,明天我们就要去学校学习新的知识啦!
今天是 2019 年国庆节的最后一天,也是我们这个「Python 初体验」小系列的最后一天。
最后这一节课,我们将学习 Python 中一种重要的数据结构,并绘制一幅「星夜」的图画。
开始吧~
今天的作品要用到 Python 中一个重要的数据结构...
什么叫数据结构?
昨天我们是不是学过了数据?
数据结构就是计算机存储、组织数据的方式。
怎么理解呢?
可以把数据结构想象成不同形状的容器,而里面装的东西都是我们需要使用的数据。
各种各样的容器
在 Python 语言中,有很多种数据的集合类型。
今天,我们就来介绍其中最为常用的一种 —— 列表 List.
既然列表是一种数据结构,里面自然可以存放数据,那应该怎样放进去呢?
非常的简单,比如现在我们有 0 到 9 这十个数,现在需要把这十个数放到一个列表里,代码只有简单的一行:
number = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(number)
看到了吗?只要把这十个数放到一对中括号里,数之间用逗号分隔开,就把它们放到列表里了。
我们为这个列表取了个名字就叫 numbers,而这时里面的数字有了一个新的名称,它们称为了这个列表的元素。
第二行打印出来的结果也就是这个列表本身:
列表打印运行的结果
列表我明白了,可是它有什么用?
就像一个杯子装了咖啡,有什么用?
喝啊...
完全一样的道理,列表存放了数据之后,作用就是在我们将来要使用的时候,把需要的数据从里面取出来。
那么,在 python 语言的列表中,我们怎么把里面的数据取出来呢?
方法有很多种,今天我们只介绍最为简单的一种。
具体的做法,是按照列表里元素的存放顺序,为每个元素分配个编号,这个编号从 0 开始,0,1,2,3... 这样延续下去,一般我们把这个编号称为索引 index。
有了索引,我们就可以随意取出列表里面的任意一个元素了:
names = ['Batman', 'little D']
print(names[1])
看,我们定义了一个新的列表,存放了 Batman 和 little D 的名字,我们现在打印的是 names[1],结果是什么呢?
别忘了,索引是从 0 开始的,所以打印的结果是 Little D ~
明白了吗,这就是 Python 列表的基本用法,是不是很简单?
在各种现代计算机语言中,都有各种各样的集合类型,而它们的作用都是一样的 —— 存放数据,因为存放数据的方式不同。
我们在编程时可以选择最合适的一种类型,精心选择的数据结构可以带来更快的运行速度或更高的存储效率。
现在,我们再次回到海龟绘图。
还记得吗,国庆那天,我们画了一面红旗,给大家留下了一个问题是怎么画一颗五角星,不知同学们有没有完成?
今天,我们就要画很多的星星,但是,我们不是一笔一笔的画,而是使用另外一种更加简便的方式。
我们先来尝试画一颗五角星。
在画之前,我们先学习使用海龟绘图来写文字的方法,先看一段代码:
import turtle
turtle.write('Hello, Turtle!')
运行一下,画布上就出现了一行文字:
用海龟绘图书写文字
注意,这里的数字 20 表示文字的大小,颜色 orange 就是文字的色彩。
有了这个技能,我们就可以很快的画出一颗五角星了。
因为在各种文字和符号中,有一些符号就是一些常见的图形,而其中就有五角星:
★
这是文字符号,不是图片
所以,我们只要稍加改变,一颗五角星就“画”好了,其实并不是画的,而是写出来的。
万事具备了,我们今天要创作一幅「星夜」的作品。
我们的想法是这样的:在漆黑的夜空中,一颗一颗大小不一,颜色不同的星星布满了整个夜空...
注意到,我们要画的星星有这样几个变化的参数:
这几个值都不是确定的,怎么实现呢?
是猜数字时学的随机吗?
太棒了,就是随机!
我们在「神奇的数字」那天讲到的随机数,就可以实现以上三个数字的不同变化。
有了这样的思路,我们的问题解决方案就随之而来了~
这里要用到我们刚刚学过的函数知识。
首先,我们自定义一个画星星的函数:
def draw(color, x, y, size):
t.color(color)
t.goto(x, y)
t.pendown()
t.write("★", font=("Arial", size, "normal"))
t.penup()
注意到,这个函数有四个参数,分别是:
只要这几个参数确定了,这颗星星就能画好了。
然后,我们需要画很多的星星,比如说一百个,我们就使用一个循环来实现:
for i in range(100):
# 准备好四个随机的数字
color = colors[random.randint(0, 10)] # random.chioce(colors)
x = random.randint(-200, 200)
y = random.randint(-200, 200)
size = random.randint(1, 4)
draw(color, x, y, size) # 调用的绘制星星的函数
在这个循环里,我们先是使用 random 模块的 randint() 函数生成了四个参数的随机数字,最后调用了刚才的 draw() 函数,就可以画出一百颗各式各样的星星啦!
一份完整的代码是这样的:
import turtle as t
import random
screen = t.Screen()
screen.bgcolor('black')
t.hideturtle()
t.penup()
colors = ['red', 'blue', 'gold', 'violet', 'pink', 'orange', 'brown', 'coral', 'purple', 'magen
'white']
def draw(color, x, y, size):
t.color(color)
t.goto(x, y)
t.pendown()
t.write("★", font=("Arial", size, "normal"))
t.penup()
for i in range(100):
color = colors[random.randint(0, 10)] # random.chioce(colors)
x = random.randint(-200, 200)
y = random.randint(-200, 200)
size = random.randint(1, 4)
draw(color, x, y, size)
我们来看一下「星夜」的绘制过程:
绘制星夜
好啦,小朋友们,这个作品我们完成了,我们这个「Python 初体验」系列也随之结束了,不知你是否觉得这个假期过的很有意义?
我们这几天应该对 Python 编程有了一个初步的了解,然而这些也只不过是 Python 语言的冰山一角,更是计算机科学这汪洋大海边的一颗贝壳。
学海拾贝
更多的科学知识就像天上的繁星一样,等着聪明并勤奋的你去摘取 !
加油吧,小朋友们~
关注我们的「计算机科学系列」,我们会陆续推出更多充满趣味的编程课程。
寓教于趣乐,博学而深思