少儿编程

系列

Python 初体验 | 星夜

前言

时间过的真快呀,一转眼七天的假期就要过去了,明天我们就要去学校学习新的知识啦!

今天是 2019 年国庆节的最后一天,也是我们这个「Python 初体验」小系列的最后一天。

最后这一节课,我们将学习 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()
                

注意到,这个函数有四个参数,分别是:

  1. color 星星的颜色
  2. x,y 星星位置的坐标
  3. size 星星的大小

只要这几个参数确定了,这颗星星就能画好了。

然后,我们需要画很多的星星,比如说一百个,我们就使用一个循环来实现:

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 语言的冰山一角,更是计算机科学这汪洋大海边的一颗贝壳。

学海拾贝

更多的科学知识就像天上的繁星一样,等着聪明并勤奋的你去摘取 !

加油吧,小朋友们~

关注我们的「计算机科学系列」,我们会陆续推出更多充满趣味的编程课程。

寓教于趣乐,博学而深思