目录
- 2023年初中信息技术学科暑假备课
- 1. 创意空间
- 1.1 教师的空间
- 1.2 学生的空间
- 1.3 关于FTP服务器设置
- 2. 什么是编程
- 2.1 编程语言
- 2.2 人人都应学好编程
- 2.3. 编程难吗?
- 2.4 python用途
- 3. 开发环境
- 3.1 打开IDLE
- 3.2 `IDLE`窗口
- 3.2.1 shell窗口和编辑窗口
- 4. 项目式教学
- 4.1 失败案例
- 4.2 项目式教学案例设计
- 4.2.1 动物知识竞猜
- 教学过程
2023年初中信息技术学科暑假备课
1. 创意空间
- 在现有教学的模式,每周课时不足以让学生在当堂或本周内完成课堂内容,如何保存教师授课内容、学生作品,并继续实用,而且在提倡项目式教学的背景下(我完全赞同这种教学方式),我们需要的是系统性思维以及授课的连续性,如何让学生方便浏览教师授课内容、拓展资源、自己作品,以方便学生继续创作及教师浏览学生创意,确实需要完善的方法。
- 教师如何建立自己的成长档案呢?
创客交流稿__蔚蓝慕的博客
1.1 教师的空间
博客是我的首选,它可以作为资源库,不断的修改补充,而且方便师生的交流,
在博客中不仅可以提供图文信息,而且类似软件资料也可以方便提供。对于教师教学内容的组织,我认为是不二的选择。
蔚蓝的博客
pygame_蔚蓝慕的博客
1.2 学生的空间
我推荐在局域网中建立FTP服务器,为每个学生建立账户、设定权限和分配空间。FTP可以方便建立学生成长档案、资源共享。
对于建立FTP服务器的几个问题
-
容量的问题:
假设每班50人,每人分配容量60M,60M*50=3G,假设有100个班级在此微机室学习,3G*100=300G,这不是问题
-
管理方便吗?
权限管理,建立账户和账户对应的文件夹,可以配置文件、批处理来实现,也是很便捷的。我的经验是群组用年级:md01、md02,账号是“群组+班级+序号”
1.3 关于FTP服务器设置
可以参考我的博客:
- 用FileZilla搭建Ftp的问题
2. 什么是编程
计算机不会主动去做任何事情,它只是一个哑巴盒子,只有人告诉它应该怎么做。它不会独立思考,没有情感,即使chatGPT也不例外。
2.1 编程语言
想要告诉计算机如何做,你必须学会一种编程语言。可视化编程语言易于掌握,上手快,适合于初学者。而职业程序员实用文字来编写程序,当下最流行的编程语言之一是python。
2.2 人人都应学好编程
学会编程,你就能让计算机成为你的宠物。编程的思考过程既要符合逻辑又要十分精细。因为,当指令不正确或先后顺序有误,程序将产生bug,因此,编程对学习能力、逻辑思维能力的培养很有帮助。
2.3. 编程难吗?
其实很容易,秘诀是动手实践。我教学的思路是通过完成简单的作品来学习编程,不用太多的时间就可以做出游戏和艺术品。
PS: 1. 为了应付会考,做题有效还是做作品有效。
- 我们能把所有的知识都交给学生吗?
bug:它是程序中的错误,它会让程序无法无法按照预期工作。经常编程可以练就程序员火眼金睛,能很快发现程序逻辑错误。从犯错中学习是有效的提高能力的方法,因此,错误不可怕。
2.4 python用途
python易学易懂,python包含了很多有用的代码库,借用这些库,你可以更加方便快捷的编写自己的程序。
- 互联网领域:谷歌公司的搜索引擎有一部分程序是用python编写的
- 商业用途:python可以编写银行、超市、工厂等管理销售系统
- 航空航天:python可以开发出帮助宇航员们监控任务的执行过程
- 医疗:python可以给机器人编写程序,让机器完成复杂的手术
- 电影:迪士尼公司实用python自动执行动画片重复部分
3. 开发环境
IDLE(集成开发环境的缩写),是一个免费软件,它是为初学者设计的,
3.1 打开IDLE
从程序中找到IDLE
,
打开后,出现下图窗口,courier
3.2 IDLE
窗口
IDLE
有两个窗口:shell窗口和编辑窗口,上图是shell窗口,通过“file”→“New File”可以打开编辑窗口
3.2.1 shell窗口和编辑窗口
当我们在shell窗口输入下面的指令时,注意观察窗口的变化。
from turtle import *
forward(200)
left(90)
forward(300)
- 体验shell窗口
- 输入
from turtle import *
时,没有任何反应。 - 当输入
forward(200)
后,出现下图:
- 继续输入,体会窗口的变化。
- 打开编辑窗口,这次输入全部四行代码
然后保存到0809-01turtle绘图.py文件中,这样保存文件,可以为以后查阅提供帮助。教师可以统一命名,学生命名会出现混乱。
让我们运行此程序,体会程序运行结果,运行方法:“Run”→“Run Module”(或F5)
- shell窗口与编辑窗口比较
shell窗口一次只能执行一行语句,而编辑窗口可以一次运行全部语句。shell窗口适用于当需要验证几个语句的执行效果特别有用。编辑窗口就是我们真正编写程序的地方
4. 项目式教学
4.1 失败案例
我在以前的教学中,体会到项目式教学的好处,这里我给大家做一下介绍我做的一个项目式教学,此项目式教学是针对Python创意编程比赛准备的,共计17课时,外加26个课时的基础课。在培训的过程中,开始就介绍基础知识,总计26课时,后来编写一个完整的游戏将基础知识应用于实践的过程中,本来认为应该学生能够接受,但实际是学生很是迷茫。有些学生开始厌恶编程,为什么呢?后来通过与学生的交谈中,我知道了,本来课业负担重,又来了一个让人乏味的编程,学生没兴趣,就学不会,尤其是初中生,他们的学习能力,学习方法,学习动力等等多方面的原因,导致我的授课效果并不好。后来通过反思总结,我认为,对于初中生来说,不应该有宏大的目标,而应该是不断实现的小目标。尤其是基础知识的学习,在开始学习的时候,不能仅限于知识的传授,要将知识融入小项目。下面我给大家展示我当时的授课内容:
太空射击第17课: Game Over (結束)
对于此项目,适合于有一定的学习能力,有学习动力的学生学习。对于大多数无基础的初中生来讲,这个项目有点大。不过在调查的过程中,学生也是希望自己能够编写出自己的游戏,说明此项目有一定的可取之处。它的可取之处就是符合学生的好玩特征,因此,在进行项目式教学的过程中,选择的项目要符合学生心理特征。
4.2 项目式教学案例设计
4.2.1 动物知识竞猜
从此程序开始Python编程教学,以下根据教学内容对此项目进行改写。
def check_guess(guess, answer):global scorestill_guessing = Trueattempt = 0while still_guessing and attempt < 3:if guess.lower() == answer.lower():print('Correct Answer')score = score + 1still_guessing = Falseelse:if attempt < 2:guess = imput('Sorry wrong answer. Try again ')attempt = attempt +1if attempt == 3:print('The correct answer is ' + answer)score = 0
print('Guess the Animal')
guess1 = input('Which bear lives at the North Pole?')
check_guess(guess1,'polar bear')
guess2 = input('Which is the fastest land animal?')
check_guess(guess2,'cheetah')
guess2 = input('Which is the largest animal?')
check_guess(guess3,'blue whale')print('Your score is ' + str(score))
教学过程
下面内容中,字体加粗的部分属于要注意给学生讲解的内容。
- 创建一个新文件
在file
菜单中,选择“New File”,然后,把文件保存为“animal_quiz.py” - 创建变量
创建一个名为“score”的变量
score = 0
- 显示信息
score = 0
print('动物竞猜!')
- 运行程序
运行程序后,发生了什么?应该在shell窗口中看见信息。
- 用户输入
score = 0
print('动物竞猜!')
guess1 = input('哪种熊居住在北极圈?')
第3行代码是提出问题,然后等待输入答案,输入的答案。输入的答案保存到变量guess1中,运行代码,查看现象,体会输入。然后将代码修改,加入打印输入答案的信息,体会输入、输出的区别。
score = 0
print('动物竞猜!')
guess1 = input('哪种熊居住在北极圈?')
print("输入的答案是"+guess1)
- 逻辑表达式
如果一个语句使用了逻辑运算符对变量和数值进行比较,那么它总是会给出一个布尔值:True
和False
,这些句子称为布尔表达式,比较输入的答案是否正确
score = 0
print('动物竞猜!')
guess1 = input('哪种熊居住在北极圈?')
print("输入的答案是"+guess1)
guess1 == '北极熊'
输出:
代码最后一句就是布尔表达式,用于比较guess1
与字符串“北极熊”是否相等,但是,是否相等呢?程序没有给出答案,现在,我们修改代码,将最后一行改为print(guess1 == '北极熊')
,来看看结果。
score = 0
print('动物竞猜!')
guess1 = input('哪种熊居住在北极圈?')
print("输入的答案是"+guess1)
#guess1 == '北极熊'
print(guess1 == '北极熊')
程序中将第5行注释了,注释以#
开始,标志这行代码在程序运行时不起作用。
第6行,显示表达式的值,任何表达式都可以用这种方法打印,打印结果
打印结果输出了True
,True是一个布尔值,表示此布尔表达式的计算结果为真。
也就是输入的答案是正确的。有了判断正确与否,我们就可以加分或显示胜利的标志。
当输入的错误的答案呢?
输出的结果是False
,那么就要根据答案的正确与否获取不同的结果。
- 分支结构
计算机经常要有选择执行程序中代码,这是因为大多数程序都要根据不同的情况去做不同的事情。
前面的示例中要根据答案的正确与否获取不同的结果。这就是分支结构。
条件:是一个布尔表达式,这个表达式帮助计算机决定选择。
2个分支的示例
执行下面的程序,分别输入正确与错误的答案,看看结果并总结分支结构的特点。
score = 0
print('动物竞猜!')
guess1 = input('哪种熊居住在北极圈?')
print("输入的答案是"+guess1)
#guess1 == '北极熊'
#print(guess1 == '北极熊')
if guess1 == '北极熊':score = score + 1print('正确,你的得分是'+str(score))else:print('错误,你的得分是'+str(score))print('你当前的分数是'+str(score))
当输入错误的答案时,分数没有变化,并提示答案错误。
当输入正确的答案,提示答案正确并将分数加1分
不论答案正确与否,最后一条语句一定执行,这里一定仔细体会。
1个分支的示例
score = 0
print('动物竞猜!')
guess1 = input('哪种熊居住在北极圈?')
print("输入的答案是"+guess1)
#guess1 == '北极熊'
#print(guess1 == '北极熊')
if guess1 == '北极熊':score = score + 1print('正确,你的得分是'+str(score))
print('你当前的分数是'+str(score))
当输入错误的答案时,分数没有变化,也没有提示。
当输入正确的答案,提示答案正确并将分数加1分,与上面的示例效果相同。有时这种结构可以不考虑错误的结果,也精简了程序
不论答案正确与否,最后一条语句一定执行。
- while 循环
程序擅长完成重复的劳动,方法是利用“循环”,循环可以不停重复执行一段代码。
如果你事先不知道循环体要执行多少次,比如,若输入的答案不正确,可以最多有3次输入答案的机会,有可以一次就答对了,也可能2次,也可能3次。
我们需要while语句来实现此程序
教师讲解下面的程序:
score = 0
print('动物竞猜!')
#guess1 = input('哪种熊居住在北极圈?')
#print("输入的答案是"+guess1)
#guess1 == '北极熊'
#print(guess1 == '北极熊')
attempt = 0
while attempt < 3:attempt = attempt + 1print('第'+str(attempt)+'次尝试:')guess1 = input('哪种熊居住在北极圈?')print("输入的答案是"+guess1)if guess1 == '北极熊':score = score + 1print('正确,你的得分是'+str(score))break;else:print('错误,你的得分是'+str(score))print('========================')print('你当前的分数是'+str(score))
程序运行中,输入3次错误答案,运行结果:
在此次程序运行中,总计运行了以下代码3次,其它程序语句仅执行了1次
attempt = attempt + 1
print('第'+str(attempt)+'次尝试:')
guess1 = input('哪种熊居住在北极圈?')
print("输入的答案是"+guess1)if guess1 == '北极熊':score = score + 1print('正确,你的得分是'+str(score))break;else:print('错误,你的得分是'+str(score))print('========================')
下面让我们在执行一次程序,这次,我们直接输入正确答案
从运行结果来看,循环仅执行了一次,因为输出的最后一行是“你当前的分数是1”
本节课程序与上节课程序对比
本次课代码 | 上次课代码 |
---|---|
我们将原来第3、4行代码注释掉,并将此代码加入到新添加while语句块中,while语句后面是一个条件,条件为真时执行其后的语句块,否则执行print('你当前的分数是'+str(score))
,
在程序的第7行增加attempt = 0
语句,来建立新的变量attempt
,用来存放重复输入答案的次数。
在程序的第9、10行我们添加了attempt = attempt + 1
和print('第'+str(attempt)+'次尝试:')
语句,这是为了记录已经输入几次答案并将信息输出。
第23行,我们增加了print('========================')
语句,这是当答案错误时,将本次输入输出信息与下一次信息分隔开,主要是为了程序清晰。
教师在授课时,要注意break
语句的讲解,可以先不加break
语句,学生会发现即使答案输入正确,也需要输入3次答案,这里省略。
- 优化程序
程序每次循环都需要提示问题,这是不合理的。应该在程序中仅仅提示再次输入答案,且print("输入的答案是"+guess1)
语句每次提示答案也是多余。因此,程序修改如下:
score = 0
print('动物竞猜!')
guess1 = input('哪种熊居住在北极圈?')
#print("输入的答案是"+guess1)
#guess1 == '北极熊'
#print(guess1 == '北极熊')
attempt = 0
while attempt < 3:attempt = attempt + 1print('第'+str(attempt)+'次尝试:')#guess1 = input('哪种熊居住在北极圈?')#print("输入的答案是"+guess1) if guess1 == '北极熊':score = score + 1print('正确,你的得分是'+str(score))break;else:print('错误,你的得分是'+str(score))guess1 = input('哪种熊居住在北极圈?')
print('========================')
print('你当前的分数是'+str(score))
第3行guess1 = input('哪种熊居住在北极圈?')
,解除注释,并将第11行的语句注释,将这条语句添加在第20行,因为,循环的作用是判断输入的答案是否正确,只有在不正确时,才提示重新输入。这样避免程序混乱
将print('========================')
语句移到循环的外部,效果是不同的,可以根据自己的喜好是否移动,我倾向于移动。因为,此语句的作用是为了区分不同问题。
- 函数
加入程序要求每次回答3个问题,每个问题最多可以回答3次,比如有如下3个问题:
- “哪种熊居住在北极圈?”
- “陆地上哪种动物跑的最快?”
- “地球上哪种动物最大”
那么,程度可以修改为:
score = 0print('动物竞猜!')
question1 = '哪种熊居住在北极圈?'
guess1 = input(question1)
attempt = 0
while attempt < 3:attempt = attempt + 1print('第'+str(attempt)+'次尝试:')if guess1 == '北极熊':score = score + 1print('正确,你的得分是'+str(score))break; else:print('错误,你的得分是'+str(score))guess1 = input(question1)
print('========================') question2 = '陆地上哪种动物跑的最快?'
guess1 = input(question2)
attempt = 0
while attempt < 3:attempt = attempt + 1print('第'+str(attempt)+'次尝试:')if guess1 == '鸵鸟':score = score + 1print('正确,你的得分是'+str(score))break; else:print('错误,你的得分是'+str(score))guess1 = input(question2)
print('========================') question3 = "地球上哪种动物最大?"
guess1 = input(question3)
attempt = 0
while attempt < 3:attempt = attempt + 1print('第'+str(attempt)+'次尝试:')if guess1 == '蓝鲸':score = score + 1print('正确,你的得分是'+str(score))break; else:print('错误,你的得分是'+str(score))guess1 = input(question3)
print('========================') print('你当前的分数是'+str(score))
讲解此程序时,通过复制粘贴的方式完成代码的编写,以便让学生体会语句的重复。
此部分将3个问题保存到3个变量中,避免重复输入文字。
程序很长,来分析一下程序,看看是否可以精简。
程序功能:
输入一个问题,在重复输入次数小于3次的情况下,判断答案是否正确,回答正确时加1分。这样重复3个问题,每个问题都需要编写一次判断答案正确与否的程序。我们可不可以设计一个功能,让3个问题重复使用一段代码来判定答案是否正确呢?
函数:
def check_guess(question,answer,guess):global score # 声明score是一个全局变量attempt = 0while attempt < 3:attempt = attempt + 1print('第'+str(attempt)+'次尝试:')if guess == answer:score = score + 1print('正确,你的得分是'+str(score))break; else:print('错误,你的得分是'+str(score))guess = input(question)print('========================')
第1行定义名称是check_guess()
的函数,括号内是3个参数,针对问题不同,它的题干、答案、猜想都是不同的,因此,这里3个参数代表了问题不同的3个方面。
运行程序时,需要给参数赋值。
第2行,声明score
是一个全局变量
第8行,将原来的guess1
换成guess
参数,具体的答案换成answer
参数
第14行,question1
换成question
参数
调用函数,程序如下:
def check_guess(question,answer,guess):global score # 声明score是一个全局变量attempt = 0while attempt < 3:attempt = attempt + 1print('第'+str(attempt)+'次尝试:')if guess == answer:score = score + 1print('正确,你的得分是'+str(score))break; else:print('错误,你的得分是'+str(score))guess = input(question)print('========================')
score = 0print('动物竞猜!')
question1 = '哪种熊居住在北极圈?'
guess1 = input(question1)
check_guess(question1,'北极熊',guess1)question2 = '陆地上哪种动物跑的最快?'
guess1 = input(question2)
check_guess(question2,'鸵鸟',guess1)question3 = "地球上哪种动物最大?"
guess1 = input(question3)
check_guess(question3,'蓝鲸',guess1) print('你当前的分数是'+str(score))
程序从50行语句变成只有31行。
优化程序
注意到在三次调用check_guess(question3,'蓝鲸',guess1)
,最后一个参数都是guess1
,那么第一个参数可以都为question1
,而且在函数中用到global score
,那么可不可以将第1、3个参数用作全局变量呢?可以的。
def check_guess(answer):global score, question, guess # 声明score, question, guess是一个全局变量attempt = 0while attempt < 3:attempt = attempt + 1print('第'+str(attempt)+'次尝试:')if guess == answer:score = score + 1print('正确,你的得分是'+str(score))break; else:print('错误,你的得分是'+str(score))guess = input(question)print('========================')
score = 0print('动物竞猜!')
question = '哪种熊居住在北极圈?'
guess = input(question)
check_guess('北极熊')question = '陆地上哪种动物跑的最快?'
guess = input(question)
check_guess('鸵鸟')question = "地球上哪种动物最大?"
guess = input(question)
check_guess('蓝鲸') print('你当前的分数是'+str(score))
我们将变量question1,question2,question3
改成question
,将guess1,guess2,guess3
改为guess
在第1行,将函数check_guess()
变为只有1个参数。这样在调用时就变的简单了。
- for循环
当知道程序需要重复执行多少次,就可以使用for循环。while循环是不知道循环多少次。
列表
列表可以将很多数据项保存在一起,并且让它们按照顺序存放,上面的程序中我们有变量question1,question2,question3
,我们可以将它们放在一起。
question_list = ['哪种熊居住在北极圈?','陆地上哪种动物跑的最快?',"地球上哪种动物最大?"]
列表中的每一项必须用逗号分隔。
从列表中取出数据项是通过在列表名称后的方括号中的编号来取得的,
question[1]
结果是第2项数据,因为编号从0开始,即编号为0的代表第1项。
range
range()
是系统中已经存在的函数,括号中有两个数字,它表示指定范围内的所有数字,这个范围是从第一个数字到最后一个数字小1的数字。如:range(0,3)
表示数字0,1,2。但不包括3。
示例:
for i in range(0,3):print(i)
i
称为循环变量,它跟踪循环体重复执行了多少次,第1次循环它等于列表中的第一项,第2次循环它等于列表第2项。
对于列表question也可以循环
question_list = ['哪种熊居住在北极圈?','陆地上哪种动物跑的最快?',"地球上哪种动物最大?"]
for i in question:print(i)
执行结果
对于正确答案,可以建立correct_answer列表
correct_answer = ['北极熊', '鸵鸟','蓝鲸']
correct_answer
列表与question
列表是一一对应的。
那么我们来修改程序:
def check_guess(answer):global score, question, guess # 声明score, question, guess是一个全局变量attempt = 0while attempt < 3:attempt = attempt + 1print('第'+str(attempt)+'次尝试:')if guess == answer:score = score + 1print('正确,你的得分是'+str(score))break; else:print('错误,你的得分是'+str(score))guess = input(question)print('========================')
score = 0
question_list = ['哪种熊居住在北极圈?','陆地上哪种动物跑的最快?',"地球上哪种动物最大?"]
correct_answer = ['北极熊', '鸵鸟','蓝鲸']
print('动物竞猜!')
for i in range(0,3):question = question_list[i]guess = input(question)check_guess(correct_answer[i])print('你当前的分数是'+str(score))
程序进一步精简,
程序第17行建立列表question_list和correct_answer
,
第23行是for循环语句,其中i
的取值范围是0、1、2,
第24行,将question_list
的第i个数据项赋值给question,
第26行,将correct_answer
列表的第i个数据项作为参数传递给check_guess()
函数