vs设计窗口不见了_开学了:程序设计基础复习

程序设计基础复习课这学期终于可以回归课堂上课了,所以接下来的闲暇时间可能要做一点课程方面的东西,补一下自己的短板。今天,先来尝试设计一下我的开学第一课。
  • 班级:高二

  • 进度:刚学完Python程序设计部分

    课程设计框架体验引入:

通过石头剪刀布游戏,体验Python图形化效果。

宏观分解:

代码分块解读功能,找出强调核心实现部分。

降维任务:

明确课堂任务,完善猜拳游戏的命令行版本。

讲解拓展:

评价各组表现,点播“精简优化”思维与代码。

巩固提升:

通过在线练习,巩固之前所学,让知识落地。

768c1ee8b0788cfc548a98263d26ab92.png 768c1ee8b0788cfc548a98263d26ab92.png 42007139bec5e83d151c10c648fa97a4.png具体各个环节设计NO.1 体验引入:演示游戏引新知

这一部分其实主要是开拓一下学生的视野,让学生从单调乏味的命令行式编程中跳脱出来,看一下Python可以实现的其他效果。

通过具体的小游戏演示和体验,让学生感受代码的魅力,产生强烈的学习欲望和探究心理。这对于后面课堂的展开有积极的引导意义,对于接下来的命令行实现也有一个促进作用。

NO.2 宏观分解:代码分块找核心 加载相关库、多媒体素材
import pygame,sys,randomfrom pygame.locals import *  #引入pygame中的所有常量list=['剪刀','石头','布','退出']  pygame.init()  #pygame模块初始化screen=pygame.display.set_mode((600,400))#定义窗口的大小pygame.display.set_caption("剪刀石头布-pygame版-by潘") #定义窗口的标题background=pygame.image.load('imgs/bg.png') #加载背景图对象screen.blit(background,(0,0))#背景图贴到窗口,blit:位块传送pcount=0ccount=0m_win=pygame.mixer.Sound('mscs/win.wav')m_los=pygame.mixer.Sound('mscs/los.wav')m_eq=pygame.mixer.Sound('mscs/eq.wav')
游戏逻辑实现主体部分:
def start_game(x,y):#根据点击位置    global pcount,ccount    screen.blit(background,(0,0))#背景重新覆盖    c=random.randint(0,2)    p=-1    if x>20 and x<70 and y>20 and y<70:        p=0    elif x>70 and x<120 and y>20 and y<70:        p=1    elif x>120 and x<170 and y>20 and y<70:        p=2        #猜拳的核心实现部分开始    if p>-1:           if (p==0 and c==2) or (p==1 and c==0) or (p==2 and c==1):            win=pygame.image.load("imgs/win.png")            vs=pygame.transform.scale(win,(275,95))            screen.blit(win,[150,280])            pcount=pcount+1            m_win.play()        elif p==c:            win=pygame.image.load("imgs/same.png")            vs=pygame.transform.scale(win,(275,95))            screen.blit(win,[150,280])            m_eq.play()        else:            win=pygame.image.load("imgs/lose.png")            vs=pygame.transform.scale(win,(275,95))            screen.blit(win,[150,280])            ccount=ccount+1            m_los.play()                #猜拳的核心实现部分结束                p_p=pygame.image.load("imgs/"+str(p)+".jpg")        p_p=pygame.transform.scale(p_p,(100,100))        textFont = pygame.font.Font("fzjz.ttf",28)        text1 = textFont.render(str(pcount),True,(0,0,0))        screen.blit(text1,(500,40))        text2 = textFont.render(str(ccount),True,(0,0,0))        screen.blit(text2,(500,70))        c_p=pygame.image.load("imgs/"+str(c)+".jpg")        c_p=pygame.transform.scale(c_p,(100,100))        c_p=pygame.transform.flip(c_p,True,False)        screen.blit(p_p,[100,160])        screen.blit(c_p,[400,160])       pygame.display.update()  #刷新画面
循环刷新以响应点击:       
while True:    for event in pygame.event.get():        if event.type==QUIT:            sys.exit()        elif event.type==pygame.MOUSEBUTTONDOWN:#鼠标点击事件                mouse_x,mouse_y=pygame.mouse.get_pos() #get_pos()返回一个单击时鼠标的xy坐标                start_game(mouse_x,mouse_y)    vs=pygame.image.load("imgs/vs.png")    vs=pygame.transform.scale(vs,(120,120))    screen.blit(vs,[250,150])    pygame.display.update()  #刷新画面    
这一部分,主要是带着孩子们进行代码阅读。没错,就是 代码阅读,编程语言和其它语言一样,其实阅读能力也是重要的一方面,只不过课堂上的代码阅读,我们主要是培养学生的 大局观。也就是宏观上的分块,大致都明白这一块在实现什么功能就好。这样解析下来,学生可能就不会觉得,我能做出来吗?太复杂了吧?取而代之的可能是“原来如此”,“ 给我足够的时间的话,我也可以”。这是我想实现的效果,这种自信的培养,对性格养成,是具有很大的现实意义的。这种大局观意识,分块思想,对孩子的思维和眼光也是大有裨益的。NO.3 任务降维:编码体验练知识

所谓的降维,是从上面的界面游戏,回归编程本身的过程。确切的说,是让学生安心完善实现一个命令行游戏。

我们在课堂上由老师带领书写部分核心代码,主要是难度较大的循环过程构建和基本数据结构的设计使用。留下部分代码,比如多分支判断语句,以及部分代码逻辑语句,作为学生练习任务中的程序填空部分。

降维后目标效果

f4e129ca8a279b15ff0b795cfc9cb61a.png

程序填空代码

bafad29db4bf9b0ff034de24ee60b3f3.png

为了缓解学生对程序设计的陌生感和思维训练缺失(本质是不重视哈),我们采用小组讨论的方式来实现这几个填空,并找小组演示讲解为什么那么填写,以达到群策群力和榜样作用。

NO.4 讲解拓展:优化逻辑促思维

学生讲解之后,由老师进行分析讲授。重点讲解中间的列表字典、While、if嵌套部分。

具体参考代码

import randomcount=0dic={"石头":0,"剪刀":1,"布":2}ls=["石头","剪刀","布"]per=input("请出拳:")while per!="退出":    cn=random.randint(0,2)    if per in ls:        pn=dic[per]        print("人:%s,机:%s" % (per,ls[cn]))        if pn==cn:            print("平局\n")        else:            if (pn==0 and cn==1) or (pn==1 and cn==2) or (pn==2 and cn==0):                print("人胜\n")                count+=1            else:                print("机胜\n")                    per=input("请出拳:")    else:        per=input("输入有误,请重新出拳:")print("游戏结束,人胜次数%d" % count)
然后排除提升任务: 优化判断胜负语句

if(pn==0 and cn==1) or (pn==1 and cn==2) or (pn==2 and cn==0):

同样是学生思考,给出不同的写法,这里我们由学生自主探究,并不进行小组讨论,因为思维的核心主要靠独立思考。当然可以给小组赋分,毕竟个人也是小组的一部分。

我们期待学生的写法:

if pn-cn==-1 or pn-cn==2:

这其实就是进行了抽象计算。再进一步,从语言的角度,可以换为:

if pn-cn in (-1,2):

这也是对基本的列表(元组)、in运算符熟悉的孩子才能想到的。

本部分的安排,其实是一个循序渐进的过程,有助于训练孩子的计算思维、数据思维。就是能看出表象的石头剪刀布背后的“数”,如果前面的引入部分算是最简单的“模块化”思维,这其实就是最简单的“抽象化”。

只有打下这样的基础,耳濡目染、日精日进,将来他们才有可能有“自动化”、“系统化”的思维,才能实现新课程真正想达到的一些效果。NO.5 巩固提升:在线测试固所学

编程课堂最忌讳的就是,一鼓作气、再而衰、三而竭。前面所有的花里胡哨,最终也还是要落地到基本知识,毕竟还有学业水平考试。

所以我们在魔灯(moodle)平台或者其他在线学习平台(问卷星也可以)上,可以放上一组测试单选测试题,来复习各种基础知识。

通过自动评分,和前面的个人小组表现(借助moodle或者别的课堂辅助软件)汇总,最后可以确定表现比较好的同学以及小组,完成最终的汇总评价。

附上几个参考练习题(原创题转载请注明):

可以考考字符串、函数、break语句之类的课堂案例没练习到的知识。

6e409500c58162de867cef20f6c0002d.png

75cbba09c7c11ef01b313b630759fc68.png

ff68d448426c294b57fa3d595783d737.png

当然,以上题目还要根据你学生的平均水平来把握,可以增加判断题等其它题型。一般来说真要用的话要比以上题目简单许多,毕竟学生现在只是会了点皮毛,建立成就感的阶段。 这 对教师的 测试题选取也是个 挑战。

b69009d4ddd4dfda05e4214d8a6ab2f5.png

a8acefac2e25f4af34059c8520f28592.gif 如果你觉得有用,可以点个在看
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值