美文网首页
好奇心驱动的scratch作品

好奇心驱动的scratch作品

作者: Python_Camp | 来源:发表于2022-04-29 13:30 被阅读0次

    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.png
    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 = 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]的新赋值。至此,我们只是觉察到两者指向的数值不同,但并不清楚为什么不同?

    相关文章

      网友评论

          本文标题:好奇心驱动的scratch作品

          本文链接:https://www.haomeiwen.com/subject/wudsyrtx.html