今天咱们要用Python当一回星空画家,在黑色的夜空中画出一闪一闪的满天星!
想象一下,漆黑的夜空中,有大小不一、颜色各异的星星在眨眼睛,是不是特别浪漫?
按老规矩,拿到一个项目先别急着敲代码,咱们得先琢磨琢磨,这片星空都需要些什么,整个画面是啥样的,我们拆解一下。
先观察一下咱们想要的效果:
背景:黑色的夜空(这样才能衬托出星星的闪亮)。
星星:有黄色的、白色的、还有淡蓝色和淡粉色的,大小也不一样,有的亮一些大一些,有的小一些暗一些。
分布:星星不是整整齐齐排队的,而是随机散落在天空的各个角落。
数量:咱们打算画100颗星星,这样看起来既热闹又不至于太挤。
把这么一片星空拆成这几个小目标,是不是感觉清晰多了?好,那咱们就按这个思路,一步一步把它画出来!
第一步:邀请海龟,布置画布
首先,咱们得把老朋友——海龟绘图请出来。
还是用“import turtle as t”,导入模块并起个小名叫做“t”:
今天我们的星星分布是随机位置和随机颜色的,所以还要用到随机功能。
那就要把随机模块也邀请进我们的程序,随机的英文是“random”,所以,导入随机模块就是:import random
接下来布置画布。
既然是夜空,背景色得是黑色的,这个用“t.bgcolor()”来实现,
这里小括号里的"black"就是黑色,我们如果想要别的背景颜色,只需要把black修改一下就可以了。

接下来为了让画画速度快一点,我们把它的速度调到最快(speed(0)表示最快)
最后,因为咱们只需要看到星星,不需要看到海龟本龟,所以使用“t.hideturtle()”把它藏起来。
第二步:制作一颗星星的“印章”
咱们要画100颗星星,如果每颗星星都写一遍调位置、改颜色、画圆的代码,那也太累人了。
这时候就需要用到咱们的新工具——函数。
什么是函数呢?
其实也就是把我们画星星的步骤单独拿出来起一个名字,之后用的时候就不用每次都写一堆复杂的步骤了。
就像我们都有一个技能叫吃饭,吃饭的步骤可以分为:拿起筷子--叨菜--放嘴里--咀嚼--咽下去,大概就这么一个流程,但是我们的家长喊我们吃饭的时候肯定不能每次都说这一大堆步骤,肯定是说:“小明,过来吃饭!”
所以在这的吃饭就是一个函数,就是把吃饭的流程总结出来起一个名字。
那今天我们就要把画圆的流程拿出来起个名字,每次要画圆只需要告诉他位置、颜色、大小,然后画圆函数就会帮我们画出来了。
咱们这个函数我给它起名叫star,它需要三个信息:位置x和y、大小size、颜色color。
了解了函数我们其实也就知道了,我们前面用的这些功能,像前进、转向、改颜色等等,都是一个一个的函数,只不过是有人已经把里面的内容规定好了,我们按照规则使用就可以了。
上面的代码就是创建函数的,我们简单分析一下函数的这段代码:
这里的def就代表我们是要自己规定一个函数出来
star就是这个函数的名字,
小括号里写的就是我这个函数需要什么样的信息,今天我们需要x、y坐标,大小、颜色,所以在小括号里写上对应的变量名字就可以了。
冒号(:)是表示开始的意思;
所有要放在函数里的代码,代码前都要加4个空格
然后函数里的内容就是要画圆了, 我们的步骤是:
抬笔--移动位置--落笔--画圆,
抬笔和落笔比较简单,就是penup()和pendown(),移动位置是goto(),在这里因为我们规定了使用这个函数需要告诉我们x、y的数值,所以直接把x、y这两个变量放入goto函数中,就可以到达我们想要去的地方。
重点是最后一步的“t.dot(size, color)”,dot这个函数就是用来实心圆点的,比我们上节课的画圆并填充更加快捷一些,里面需要两个数据,一个是圆的大小,一个是颜色。
第三步:随机撒下100颗星星
函数写好了,接下来就是绘画环节。
咱们要画100次,所以要用到循环——for i in range(100),for循环我们学过,就是让指定的任务重复执行一定的次数。
每一次绘画,星星的位置、大小、颜色都应该是随机的,这样才自然。
咱们一步一步来:
1. 随机位置咱们的画布范围大概是x从-300到300,y从-200到200(可以根据自己的喜好调整)。
用random.randint(a, b)可以生成a到b之间的随机整数,我们的x、y坐标都用随机数来生成。
然后x = random.randint(-300, 300)就是生成一个在-300到300之间的随机数,并且用一个名字叫x的变量存起来,y坐标就是一样的道理了。
2. 随机大小星星有大有小才好看,咱们让大小在10到30像素之间随机,并且用size变量存起来:
3. 随机颜色咱们准备了五种星星的颜色:黄、白、淡蓝、淡粉、金色。
用random.choice()可以从列表中随机选一个:
choice函数可以从给定的数据中随机选择一个,在这里我们用["yellow", "white", "lightblue", "lightpink", "gold"]的这种写法存储了5种不同的颜色。[]代表列表的意思,和之前的scratch阶段我们学到的列表是一样的道理,列表可以存储多个数据,所以我们用列表来存储我们的多种颜色,然后放到choice()函数里,就可以在我们指定的颜色中进行随机了。当然,我们可以自己再添加新的颜色,在gold后面添加就行,注意用逗号间隔,并且颜色的单词要用引号包起来。4. 绘画最后,拿着这些随机出来的数据,调用咱们的星星函数,海龟就会到达我们指定的x、y的位置,画指定大小、指定颜色的圆点:
把上面这些放进循环里,完整的一段就是:
最后别忘了加上turtle.done(),这样画完之后窗口不会自动关闭,咱们可以好好欣赏一下自己创作的星空。
完整代码来啦!
把上面所有的代码拼在一起,就是咱们的满天星程序:
好啦,大功告成!咱们总结总结。
你看,就这么短短十几行代码,一片独一无二的星空就出现在眼前啦!咱们又练习了:
拆解任务的本事,把“画星空”拆成背景、星星、随机分布几个小任务。
函数的用法,把重复的动作单独拿出来,起一个名字,代码简洁又清晰。
随机数的用法,用randint()和choice()让每次运行的星空都不一样。
坐标的概念,控制星星出现在画布的不同位置。
这节课我们画的星星是用圆点替代的,下节课,我们就要用星星的形状,来画真正的星星啦,当然代码也会更加复杂一些, 不过我们只要学会拆解分析,我相信是难不住各位的。
做完了别忘了把你的星空截图发给我,或者在下面留言,我会把大家的作品整理起来,让更多人看到哦!