好奇心驱动的scratch作品
2022-04-29 本文已影响0人
Python_Camp
scratch实现娃的天马行空的想法,有故事、角色和剧本情节,创作空间可以和导演匹敌,不是吗?
梓捷同学作品薛定谔的猫
1973年4月28日。平克-弗洛伊德的《月之暗面》在美国专辑榜上排名第一,开始了在榜单上741周的破纪录之旅。2003年,《滚石》杂志在其 "有史以来最伟大的500张专辑 "名单中把这张专辑列为第43位。
image.png
color7 = { 'red': '#FF0000',
'orange': '#FFA500',
'yellow': '#FFFF00',
'green':'#008000',
'blue': '#0000FF',
'indigo': '#4B0082',
'purple': '#800080',
}
t.bgcolor("black") #background 背景
t.goto(-100,0) #正中间
for i in range(3):
t.color('white')
t.fd(150) #forward 前进
t.left(120)
t.color('white')
t.pensize(6)
t.penup()
t.goto(-260,-20)
t.pendown()
t.left(20)
t.fd(195)
#棱镜内部
t.color('blue')
t.pensize(6)
t.penup()
t.fd(98)
t.pendown()
x,y = t.position()
#射出棱镜彩虹
t.right(30)
for k, v in color7.items():
t.pencolor(cnames[k])
t.pensize(3)
t.fd(300)
t.pendown()
t.goto(x,y)
t.rt(0.8)
t.penup()
t.done()
image.png
python运用turtle模块实现,但老师的代码并不完美。因为射出的光线在编程命令中是一条条逐条实现,显然和物理事实不符。这就算任务驱动的学习?如何实现光线同时射出?
魔鬼细节 enumerate vs range
image.pnggrass = [7,1,14,3,8,2,7,2,0,6]
# 原题输入
print(sum(grass)/len(grass))
# 数学求平均验证可以做到每格 5 个草墩
# 初始化 金币花费cost
cost = 0
for i,e in enumerate(grass[:-1]):
st = grass[i] - 5 #注意没有采用 e 取而代之用地址脚标[i]
cost += abs(st)
grass[i+1] += st
grass[i] -= st
print(cost,grass)
输出结果
41 [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
金币的花费是41
注意上述写法没有采用enumerate常用的 e 取而代之用地址脚标[i]
为何不直接用 e
试试看如何
# 写法 2
grass = [7,1,14,3,8,2,7,2,0,6]
# 原题输入
print(sum(grass)/len(grass))
# 数学求平均验证可以做到每格 5 个草墩
# 初始化 金币花费cost
cost = 0
for i,e in enumerate(grass[:-1]):
st = e - 5 #注意采用 e 不用地址脚标[i]
cost += abs(st)
grass[i+1] += st
grass[i] -= st
print(cost,grass)
输出结果
33 [5, 7, 1, 14, 3, 8, 2, 7, 2, 1]
金币的花费是33,不同于前面的写法结果41,why?
请同学深入思考两种写法
添加一行代码,观察e, grass[i], grass三个变量的变化过程
cost = 0
step = 0
grass = [7,1,14,3,8,2,7,2,0,6]
for i,e in enumerate(grass[:-1]):
print(i,e,grass[i],grass)
st = e - 5
cost += abs(st)
grass[i+1] += st
grass[i] -= st
print(cost,grass)
0 0 7 7 [7, 1, 14, 3, 8, 2, 7, 2, 0, 6]
1 2 1 3 [5, 3, 14, 3, 8, 2, 7, 2, 0, 6]
2 4 14 12 [5, 5, 12, 3, 8, 2, 7, 2, 0, 6]
3 11 3 10 [5, 5, 5, 10, 8, 2, 7, 2, 0, 6]
4 16 8 13 [5, 5, 5, 5, 13, 2, 7, 2, 0, 6]
5 24 2 10 [5, 5, 5, 5, 5, 10, 7, 2, 0, 6]
6 29 7 12 [5, 5, 5, 5, 5, 5, 12, 2, 0, 6]
7 36 2 9 [5, 5, 5, 5, 5, 5, 5, 9, 0, 6]
8 40 0 4 [5, 5, 5, 5, 5, 5, 5, 5, 4, 6]
41 [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
输出结果看,只有第一行e 和 grass[i]相等都是 7,第2行还是输出呈现明显的规律,就算e正好是原数组grass的遍历,grass[i]则是每一步修改后的grass[i]的新赋值。至此,我们只是觉察到两者指向的数值不同,但并不清楚为什么不同?