目录
壹:问题回溯
“咳咳咳,同学们,这周的作业是——画一幅夜空的图画。”
“要求是……”
- 画很多星星。
- 星星位置随机。
- 星星颜色随机。
- 星星大小随机。
“下周末晚上12:00前记得在学习通提交作业。”
“下课。”
贰:思路分析
“画一幅夜空的图画”,那么,我们需要先有一张画布(即“turtle库”);分析要求,我们不难看出,要求横竖写着“随机”两个大字,自然,我们联想到了“random库”。
现在我们已经大概知道要用哪些函数库了,那么,下一步呢?もちろん,寻找题目中四个要求的逻辑。
画很多星星……吗?这个“很多”怎么界定?“10”为很多?还是“100”为很多?哎呀,不想了,设星星个数为未知数N吧【N = eval(input('要画多少个星星呢?'))】
星星位置随机?这样啊。えと,随机生成坐标(x,y),然后在这个位置画星星就行了。“嗯?坐标(x,y)吗?画布上有一个看不见的坐标轴呀,不是吗?”
“星星颜色随机”&“星星大小随机”,这两个要求可以整合到画星星这一过程中。至于理解方式的话……你拼过高达吗?就像拼高达一样。
def Star(length,color):
星星颜色要不同,Emm……我们一个一个地把颜色列出来,然后放在一个list列表里吗?嘛,也不是不行。“但,你不觉得手指酸吗?很麻烦呐,而且,如果我们要画100个星星的话,我们可不太能列出那么多的颜色啊。别的办法……RGB,of course!”
RGB is short for "Red, Green, Blue".
红绿蓝是光学三原色,我们通过三者不同比例的调配,得到其他数以万计的颜色。代码实现的话,用“random库”随机生成三个(0,1)之间的数构成比例,然后,就实现了。
对于“length”,读者下来理解一下吧。
叁:代码实现
# -*- coding: utf-8 -*-
# Created by Yuriko, all rights reserved.
#%%
# 调用函数库。
import turtle as t
import random as r
#%%
# 定义画星星的函数。
def Star(length,color):
t.begin_fill()
for x in range(5):
t.color(color)
t.forward(length)
t.right(144)
t.end_fill()
#%%
# 准备。
t.setup(1200,700) # 画布的宽、高。
t.speed('fastest')
#%%
# 代码主体部分。
N = eval(input('要画多少个星星呢?'))
for n in range(N):
x = r.randint(-600,600); y = r.randint(-350,350)
t.penup()
t.goto(x,y)
t.pendown()
length = r.randint(20,30)
color = (r.random(),r.random(),r.random())
Star(length,color)
t.hideturtle()
t.done()
#%%
# To be continued.
肆:对代码的分析
调用库 → 定义函数 → 根据要求调用函数
“挺清楚的,代码的三个部分。老实说,脚本里并没有出现特别复杂的知识点啊,很绕的那种逻辑结构啊。所以,就不展开分析了。”
伍:写在最后的话
“举一隅而不以三隅反,则不复也。”