python教学设计

2024-05-04

python教学设计(通用9篇)

篇1:python教学设计

最近这段时间我们学习了很多内容,增长了很多关于Python的知识,万事万物是相通的,正如学习新的知识就像吃饭一样。

吃多了就会消化不良,反映到学习上也是一样,不知各位最近的感觉怎样,反正学记是需要一些时间好好消化,掌握到手中,为下一步的知识补齐缺口。

接下来,学记和大家一起回顾一下最近学习的内容,循序渐进,循序渐进。

分支结构

分支结构就像上图一样,是用来选择道路的。

所用的关键字是

If elif else

这三个词的意思分别是

如果 否则如果 其他的

分支语句的写法需要将与关键字与关键字对齐

循环结构

循环结构应用于一些重复的进程

通常我们只接触两种循环

for-in循环 和 while循环

for-in循环适用于

确切的知道到底循环几次

while循环适用于

不知道到底有几次循环

此时要搭配bool 来进行

即 True 和 Flase

关键字

关键字的熟练运用对于今后的开发工作

有非常重要的作用,但这么多关键字我们不能去死记硬背

只有在一个一个代码的验证当中去熟悉去掌握

那样是最可靠的

def 设置模组

len 计算字符串长度

capitalize 获得字符串首字母大写的拷贝

upper 获得字符串变大写后的拷贝

find 从字符串中查找子串所在位置

index 与find类似但找不到子串时会引发异常

startswith 检查字符串是否以指定的字符串开头

endswith 检查字符串是否以指定的字符串结尾

center 将字符串以指定的宽度居中并在两侧填充指定的字符

rjust 将字符串以指定的宽度靠右放置左侧 填充指定的字符

isdigit 检查字符串是否由数字构成

isalpha 检查字符串是否以字母构成

isalnum 检查字符串是否以数字和字母构成

append 添加元素

remove 删除元素

clear 清空元素

sorted 排序

大家可能会有些疑惑,学习这些东西真的有用吗?这些随处可见的基础方面的知识真的有用吗?

我可以非常肯定地告诉大家

有用的!

这些知识就像是建筑工地随处可见的砖石,不管这些砖石怎样的不起眼,但是没有一幢建筑可以离开砖石,学习的过程是枯燥的,不过这也正符合非常现实的一条规律。

学如逆水行舟,不进则退!

也正是因为它枯燥苦闷,学习有难度,才保证了,我们学习了这些知识以后,可以靠它们为生,在这个知识时代闯出自己的一片天!

不要放弃,绝对不要放弃!

黎明之前是最黑暗的!

为了自己的未来好好坚守吧!

青年学记 陪伴着各位青年

篇2:python教学设计

python是一门非常有潜力的高级语言,历经多年的发展,其在编程上发挥着越来越大的作用。在这学期中,通过选修python课上的基础知识学习,我对python也有了一定的认识。

在学习python的第一节课上,其对我的最初的印象就是,相较于我学习过的c语言编程,它更加的简洁。所有的变量都不需要像c语言编程那样需要提前去定义,这样给了编程者很大的自由空间与方便。如x=2,即可同时完成变量的定义与赋值。对于简化程序的代码,起到了许多的作用。而且,在字符串上的处理,python相对于c语言也是给程序员极大的便利。在c语言中,只能用字符类的数组对字符串进行相应的操作,步骤也是相对于比较繁琐的,而在python中,当我们需要创建一个字符串的时候,只需要在创建字符串的时候用“s=”就可以了。而python不仅如此,它的库也很多,正因为它强大的库,让编程变得不再艰难。我们只需要调用库中的函数,而对于函数的具体实现,也没有特殊的需求。

篇3:发掘python的教学应用潜力

Python支持结构化程序设计, 在最初的程序学习中, 完全可以使用简约的python代码实现结构化的程序学习, 几乎没有难度。Python可以轻易的调用DLL文件来扩展功能, 实际编程工作中可以使用它快速的编制程序基本框架, 然后相关模块采用C或C++等来进行编制。其类库十分强大易用, 而且完全开源。

2 在网络基础课程中的运用

很多传统计算机课程除了编程语言的学习之外, 基本上都是纯粹理论性的。我们可以通过学期初简单的python学习 (2-3周) , 根据相关课程的特色实地编写一些小程序来实践计算机相关理论知识。比如计算机网络课程, 可以编写一个最简单的C/S结构的python小程序来分别实践TCP、UDP两种协议的不同执行效果, 让学生对建立连接和无连接产生真实的感受, 从而较深入的理解两种主要的通信协议的异同;

Python服务器端代码书写

执行客户端代码, 服务器端效果如下:[127.0.0.1:54091]connected

我们可以得出结论:TCP协议要求网络帧数据必须先建立连接, 实现3次握手协议, 当连接建立后, 方能进行数据的传输, 而数据传输结束后需断开连接。因此常应用于对数据传输安全要求高的行业。下面是UDP的例子:

Python服务器端代码

同上, 在服务器端运行该段代码。

python客户端代码:

UDP由于不需要对帧数据包进行判断也不需要保持网络的持续连接, 实行先到先得的发送方式, 因此网络的响应速度更快。

仅需要数十行代码, 即可立即验证TCP与UDP的区别, 学生同时掌握了网络协议的区别、python的网络编程两方面的信息, 对培养学生的学习热情和夯实基础起到很大作用。

参考文献

[1][法]Tarek Ziade, 著, 姚军, 夏海轮, 王秀丽, 译.《Python高级编程》.[1][法]Tarek Ziade, 著, 姚军, 夏海轮, 王秀丽, 译.《Python高级编程》.

篇4:python教学设计

摘要:面向计算思维的教学改革需要理解计算思维的时代性,即计算思维是基于计算机技术的科学思维,教学改革要符合并适应计算机技术的发展阶段。Python语言是目前最接近自然语言的通用编程语言,近年来在美国大学广受欢迎,并取得了良好的教学效果。面向非计算机专业本科生开展Python语言教学是程序设计课程发展的重要历史契机,有助于进一步释放师生活力和创新热情,全面提升教学质量,使学生有机会掌握一门终身受用的程序设计语言。

关键词:高等教育:教学改革;Python语言:计算思维:程序设计;非计算机专业

一、计算思维培养视角下的程序设计课程

1.程序设计课程教学内容分析

我们选取非计算机专业本科生程序设计课程最主要的教学内容:C,Java,VB三种编程语言,以及本文建议开设的Python语言,逐一分析这些编程语言所阐述的计算思维外延。

(1)C语言。我国大学针对非计算机专业普遍开设C语言程序设计课程,其实际教学内容围绕数据类型、指针、内存、字符操作等开展。这些内容主要诠释“计算机系统结构时代”的计算思维外延,即计算机体系结构(计算机工作原理)的抽象和自动化。通过这种计算思维的培养,能够让学生掌握程序的高效运行模式。

然而,由于非计算机专业同学缺少计算机体系结构相关知识,也没有专业需求,即使通过C语言考试,也很难在后续计算机应用中使用该语言解决面对的计算问题。C语言更适合的教学对象是需要对程序运行效率依赖性高的群体,主要是计算机及部分信息类专业学生。

(2)Java语言。由于该语言是面向对象语言,其实际教学内容围绕类、对象、封装、继承、多态、接口等面向对象方法开展。这些内容主要诠释了“计算机网络时代”的计算思维,体现在计算机网络对异构性的支持(跨平台)和对鲁棒性(运行时)的需求。从计算思维本质角度,Java语言抽象了问题中的主体边界和主客体关系,通过面向对象概念,开展高效的代码复用。

同样,非计算机专业同学的培养目标并非专业程序员,并不需要关注代码复用性和可移植性,且Java语言开发功能很少直接应用在个人应用中,学生学习后缺少应用场景,很难持续使用。Java语言适合的教学对象是需要编写高复用性或高可靠性代码的群体,主要是计算机专业学生。

(3)VB语言。该语言发展自早期的Basic语言,主要由微软公司支持和维护,用于开发Windows系统中的视窗应用。VB语言实际教学内容围绕窗体对象、按钮、文本框、图形界面、事件响应等开展,这些内容诠释了“计算机视窗”时代(与“计算机网络”时代在时间上重叠)的计算思维,体现在根植于视窗的语法设计体系。VB语言抽象了交互逻辑和响应关系,以及自动化逻辑间交互方式。

由于VB语言所开发的程序所见即所得,且继承VB语法的VBA(Visual Basic for Applica.tions)语言能够支持Word及Excel等办公软件的编程扩展,对非计算机专业同学有一定实际作用,因此,该语言的教学效果相对较好。VB语言最适合的教学对象是需要编写视窗应用的群体,主要是计算机及信息类专业学生。然而,必须看到,VB语言及后续的VB.NET所开发程序仅限于Windows系统,属于微软公司专属商业开发工具,语言使用具有较大局限性,应用面狭窄。

(4)Python语言。这是一门发展了近30年的编程语言,是目前美国大学最受欢迎的程序设计语言。Python语言实际教学内容是分支、循环、函数等基本的程序逻辑关系及功能强大的函数库应用,它是目前最接近自然语言的通用编程语言。该语言只关心计算问题的求解,其轻量级的语法和高层次的语言表示表达了应用计算机解决问题的计算思维理念。

Python语言抽象了问题及解决方案,自动化问题求解,是“复杂信息系统时代”利用计算机解决问题最直观的表达工具。从北京理工大学和美国多所高校的实际教学效果看,Python语言适合的教学对象是需要利用计算机解决各类计算问题的群体,这恰是大学程序设计课程的教学目的,涉及的本科生包括计算机专业和非计算机专业学生。

2.面向本科生开设Python语言的建议

表1汇总了4种程序设计语言的计算思维外延,从计算思维“抽象”和“自动化”两方面考虑,给出了各程序设计语言的理解。其中,“自动化”的狭义含义指程序逻辑的自动运行,而这里所指的“自动化”除了表达程序基本逻辑运行外,主要指通过“抽象”后,程序获得运行逻辑以外的收益。

与计算机专业理解并应用计算机系统结构、计算机网络等专业知识教学不同,面向非计算机专业计算机基础类程序设计课程的定位应该是:通过某一编程语言的教学传授利用计算思维解决一般计算问题的基本方法,并能够通过程序设计更好地利用计算机强大的计算性能。即:程序设计语言应该成为学生以计算思维将计算问题转变为计算机程序的有效手段。

计算机技术已经发展到“复杂信息系统时代”,普通计算机性能强大,对于一般计算问题,计算机的计算性能不再是求解问题瓶颈。因此,针对更广泛学生培养计算思维的实践,应该与计算机技术发展相适应,在这个技术“时代”更应关注问题的求解,超越对程序执行性能、代码高复用性或某一个特殊系统中视窗设计的关注,让学生真正掌握利用计算机解决计算问题的通用方法。

综上分析,结合计算思维时代性特点,我们提出面向非计算机专业本科生开设Python语言的建议,尤其是将Python语言作为首选语言开设。即使针对计算机专业本科生(“985工程”高校或“211工程”高校),我们也建议将Python语言作为第二门程序设计语言开设。对于以应用为主的计算机专业本科高校,更建议将Python语言作为首门程序设计语言开设。

3.开设Python语言的必要性和重要意义

从程序设计语言发展角度来看,高级编程语言的设计一直追求接近人类的自然语言。这样的高级语言需要两个基本要求:不存在自然语言中广泛存在的歧义性以及隐藏计算机系统的设计细节。C,Java,VB从各自角度抽象了程序设计,Python语言又进一步,提供十分接近人类理解的语法形式。应该说,Python语言发展了高级语言的表达形式,简化程序设计过程,提升了程序设计效率。

从计算思维培养角度,表1说明了已有教学语言的局限性和技术时代的关联性,即传统C,Java和VB语言过分强调语法并不适合非计算机专业学生。从传统应用技能教育向计算思维培养转变过程中,教学内容变革是重中之重。对于程序设计课程,选择适合技术时代发展的编程语言是显著提高培养效果的前提和基础。

从解决计算问题角度,传统c,Java和VB语言过分强调语法并不适合非计算机专业学生解决一般计算问题,Python语言作为适应新技术时代的轻语法程序设计语言,应该得到大学计算机教育领域的重视。

从上述三方面看,Python语言相比其他语言具有更高的教学价值。这一技术趋势也得到了国外众多大学的直接响应。以美国斯坦福大学为例,该校从2009年开设Python语言程序设计类课程开始,每年新增约5门课程,截止到2015年,该校年度开设22门与Python语言相关课程,并替换了之前的Java语言和部分专业的C语言课程。

随着大数据、云计算、网络空间安全等概念的兴起,当代信息社会要求大学生在具备操作计算机的基础技能外,还要具备一定的编程能力,用于解决工作和学习中遇到的各类非通用计算问题,理解并实践计算思维。这种信息时代深入发展的趋势为程序设计课程的内容改革提供了依据。

程序设计课程教学内容的变化是一个正常的技术更迭过程。从20世纪90年代开始,程序设计课程的教学内容经过几次较大变化,曾经广泛教学的Pascal语言、Fortran语言被C语言、Java语言、VB语言等取代。然而,从21世纪开始,程序设计语言教学内容基本没有改变,针对非计算机专业学生主要开设C语言、Java语言和VB语言。教学内容近15年的稳定并非因为上述教学内容达到了教学预期,而是受制于特定技术时代的历史局限性。我们认为,用Python语言替代传统教学内容是程序设计课程发展中的一个重要历史契机,这种教学内容的变化将在十年甚至更长的时间尺度上影响本科生计算思维和基础计算机应用能力的培养,值得高校领导和教师在认识上给予足够重视。

由于计算机技术在科学技术体系中的广泛性和基础性,将Python语言全面纳入大学计算机教学计划具有重要意义和深远影响。

Python语言解释器是开源的且开源协议限制很少,任何基于该语言编写的代码都符合我国“自主可控”的信息安全要求。

Python语言的易学易用和丰富的开源库将会给学生带来一个全新的程序设计认识,改变主观渴望学好编程语言但客观上学不会学不精的状况,有助于帮助学生学会一种终身受用的编程语言,进而帮助他们更好地利用计算机解决所面临的各类计算问题。

Python语言的高编写效率会进一步加快程序实现和修改节奏,降低程序错误率,缩短计算服务和产品的上市时间,提高国民综合生产效率。

在我国全面提高高等教育质量、广泛开展本科教学工程背景下,Python语言教学改革将会开启一个全新的程序设计语言教学时代,进一步释放师生活力和创新热情,全面提升教学质量。以Python语言教学为手段,将更容易开展计算思维教育教学活动,使学生在思维和技能两方面终身受益。

北京理工大学自2013年面向非计算机专业开设了全校公选课“Python语言程序设计”,取得了学生的高度认同,不及格率明显下降,学生反馈教学效果显著提高。鉴于对高级语言发展的理解和实际教学效果,我们建议国内高校普遍针对非计算机专业开展教学改革,开设Python语言程序设计课程。

二、Python语言和高校教学改革

1.Python语言特点

Python语言是Guido van Rossum在1990年开发的编程语言,至今已经有26年历史,目前最新版本是3.5.1。Python语言的全部实现都是开源的,遵循类似GPL但比其更宽松的开源协议,该协议可以允许不公开基于Python的修改版本,并将Python与其他软件共同在GPL下发布。Python语言的版权由PSF(PythonSoftware Foundation,Python软件基金会)持有,该基金会是一个非营利组织,通过接受捐款来推进Python语言的推广和开源事业。

Python语言是一个轻语法、弱类型的脚本语言。与C语言相比,Python语言没有指针、地址等计算机系统结构元素;对于变量无须定义直接使用,由解释器自动匹配;语言内部采用UTF-8编码实现,具有独立的字符串类型,简化了多语言文本的操作,对中文有良好的支持;通过使用变长列表而不是定长数组,兼容多种数据类型并灵活表达集合长度。

除了基本语法外,Python语言是一个脚本语言,即通过直接运行源代码来执行,这使得程序运行与源代码不可分离。对于非专业学生来说,源代码执行这种模式有助于代码维护、跨多个操作系统和交流代码设计与实现。

Python语言代码十分简洁,可以支持面向过程和面向对象两种程序设计方法,并不要求程序通过函数封装,代码行数可以缩减为c语言同样功能的1/5到1/10。以最简单的“HelloWorld”为例,Python语言的可运行源代码程序是:

Print(”Hello World!”)

C语言编写的程序需要引入mainfl函数,其可运行源代码程序如下:

#include

int main()

{

printf(”Hello World!\n”);

return 0;

}

此外,Python语言还可以编写图形界面程序,并且十分简洁。例如,下面所示程序可以绘制一条曲线,形成一棵树的形状:

from turtle import*

def tree(plist,l,a,f):

if>5:

ist=[1

for p in plist:

p.forward(1)

q=p.clone()

p.1eft(a)

q.right(a)

ist.append(p)

ist.append(q)

tree(1st,l*f,a,f)

p=Turtle()

p.color(”green”)

p.pensize(3)

p.speed(10)

p.1eft(90)

t=tree(【p】,110,65,O.6375)

输出结果如下图:

从上面两个简单实例可以看到,Python语言与C语言相比能够更好支持图形输出、具有更少的程序代码、更接近自然语言逻辑的语法等。同时,Python语言兼容面向对象和面向过程两种设计方式,不在语法和程序编写方法上过分限制。

2.Python语言的时代先进性

历史上出现的程序设计语言超过200种,然而,至今常用的语言不超过20种。Python作为当代常用的通用编程语言之一,具有很强的生命力,这种生命力主要来源于该语言的时代先进性,体现在以下三个方面:

第一,Python语言的设计本质。Python语言是目前最接近自然语言的高级语言,抽象程度高,代码编写高效,符合计算思维的时代性,适应当代计算机技术发展水平。Python语言更侧重问题求解,在计算机性能高度发展的今天,该语言更适合解决运算性能非关键的一般计算问题。

第二,Python语言的开源开放体系。目前,围绕Python语言形成了世界上最大的针对单一编程语言的开放社区,截至2015年11月,这一开放社区共提供超过68956个函数库,覆盖信息技术的众多技术领域。其中大量函数库编写质量很高,且同样开源,为使用Python语言编写程序提供了极大的便利和良好的学习平台。这种开源开放理念是推动计算机发展的原动力。

第三,Python语言的良好就业前景。云计算、大数据、移动互联网、创意游戏等给Python语言提供了良好的就业前景。表2列出了美国前两位在线招聘网站在美国加州,以及中国前两位招聘网站在北京、上海、广州、深圳等四个一线城市对Python语言、C语言、VB语言和Java语言程序员的需求对比。尽管这些就业需求数据并不能作为开设课程的依据,但可以作为对教学内容的一个评判维度。从职位需求的数量级别可以看出,在美国,Python语言和Java语言已经是程序员就业市场上很重要的两个分支,其中Python语言的市场需求约是Java语言的一半。然而,在国内,受限于大学教学的局限性和产业界对编程语言的信息洼地,Python语言程序员需求刚刚超过C语言和VB语言。这里需要说明的是,Java语言的就业需求几乎都是针对Android系统的APP开发,面向专业计算机程序员,比较单一。而Python语言就业需求更为广泛,包括数据分析师、运维工程师、产品测试等多个类别。

3.针对Python语言的教学开展

中国和美国在Python语言高校教学方面存在较大差距。其实,程序设计语言课程的教学内容很难达到教学目标的问题同样困扰美国大学教学,然而,近5年,美国大学通过引入Python语言在该课程的教学改革方面取得了显著进展。

以美国斯坦福大学为例,该校从2009年开设Python语言程序设计类课程开始,每年新增约5门课程,截至2015年,该校年度开设22门与Python语言有关的课程,尤其是针对非计算机专业学生,替换了之前的Java语言和部分C语言。美国综合排名前100的大学有超过70所在近3年开设了Python语言类课程。另外,有一批美国地方大学针对学生实际情况,开设了Python语言,从教学效果和质量来看,相关教改取得了较好效果。

在我国,截至2015年,开设Python语言教学的高校不超过10所,大多数以小班尝试为主。大部分课程面向计算机专业学生作为第二门语言学习,针对非计算机专业学生开设Python语言课程的教学实践还相当有限。

与教学开展类似,国内Python语言相关教材和参考书建设也十分有限。以美国和中国亚马逊网站数据为例,截至2015年11月,美国亚马逊有关Python语言的英文参考书为5 782本,相比,中文Python语言参考书仅为1 360本,而且其中绝大多数为国外参考书的翻译版,因此适合高校使用的教材亟待建设。

从教学开展和教学资源建设方面看,国内高校对开展Python语言教学的重要价值和意义认识不足,且缺少师资和参考教学体系。

北京理工大学从2013年开始开设了全校公选课,编写面向非计算机专业的Python语言教材,由高等教育出版社出版,同时,建立了整套教学体系和丰富的教学资源。2015年,主讲教师结合教学改革进展在“中国大学MOOC”上开设了“Python语言程序设计”课程,首次选课人数超过2万人,显示了Python语言较强的学习需求,MOOC课程为我们积累了更多教学经验。希望这些教学资源能够为国内同行开设Pvthon语言课程提供参考。

面向计算思维的教学改革需要理解计算思维的时代性,即计算思维是基于计算机技术的科学思维,教学改革要符合并适应计算机技术的发展阶段。本文从计算思维培养角度对传统程序设计课程的教学内容进行分析,提出了面向非计算机专业本科生开设Python语言的建议,阐述了该教学建议的时代选择性、紧迫性和重要意义。结合Python语言自身特点、就业需求数据、国内外开展教学现状和资源建设情况,分析得出;Python语言教学内容改革是程序设计课程发展的重要历史契机,将在十年甚至更长的时间尺度上影响本科生计算思维和基础计算机应用能力的培养。开展Pvthon语言教学有助于进一步释放师生活力和创新热情,全面提升教学质量,使学生有机会掌握一门终身受用的程序设计语言。

篇5:Python精选教学心得

编程基本思想

现实世界中,每个复杂的事务都可以拆分为多个组成部分,其中的每一部分就可称之为对象。比如要实现一个很大很复杂的项目,我们可以把项目拆分成不同的组成部分,然后分别对不同部分通过编程实现,最终再把各个部分组装起来完成整个项目。这让我们能够从整体上来控制项目,从而让程序开发更有效。

比如汽车制造,汽车厂所做的仅仅是各个部件的组装和匹配,而各个部件的生产是由相对专业的厂商完成。如果需要研发新型号汽车,整车厂所考虑的是如何对各个新式的零部件进行新的组装和匹配,而不是从头到尾重新生产一辆汽车。

面向对象的编程

VS

面向过程的编程

面向过程编程是针对一个需求的具体实现过程,但是对于大型项目的复杂需求,一步一步的做,这种编程效率显然是低下的。

面向对象编程则是对项目进行拆分后(一般按照功能拆分),分别实现,再将各个对象组装起来。因此简单的小程序使用面向过程方法编程更适合。面向对象的编程特性是易维护(可读性高),效率高,质量高(重用性),扩展性好(高内聚,低耦合)。

对象

通俗的讲,对象就是事物,一个公司、一个部门、一个人,甚至一本书都可以是一个对象,程序员可以自由决定把什么作为对象。

比如eHR系统,需要对组织架构,员工进行管理,所以使用的对象可能是公司,部门,岗位,员工,等等。对象可大可小,可复杂也可简单,如果仅仅是做一个考勤系统,员工这个对象一定要比eHR系统中的员工对象简单。

现实世界中,类代表一组有共同特性的事物,把不同对象之间的共性抽象出来,就形成类的概念。比如说男人、女人可以抽象成人这个类;处长、秘书可以抽象成员工类。至于类如何去抽象,粒度的粗细,这是一个需要在学习和实践中摸索的过程。

实例

以下是一个实例,大家体会一下:

1. 定义父类:

class Employee:

def __init__(self, name, age): #抽象员工共性(名字,年龄)

self.name = name

self.age = age

def signON(self):

print(self.name+“ sign on.”) #抽象签到的动作

def work(self):

print(self.name + “ on work.”) #抽象工作的动作

2. 继承出子类:

class MEmployee(Employee): #继承父类的共性

def __init__(self, name, age):

super().__init__(name, age)

def work(self): #重写子类的方法(抽象出从事管理岗位工作的动作)

print(self.name + “ on manager_work.”)

3. 继承出第二个子类:

class TEmployee(Employee):

def __init__(self, name, age, devLanguage): #继承父类的共性,增加语言的属性

super().__init__(name, age)

self.devLanguage = devLanguage

def work(self): #重写子类的方法(抽象出从事技术岗位工作的动作)

print(self.name + “ on technology_work.”)

def showLanguage(self): #增加子类的方法(抽象出会某种编程语言的动作)

print(“use ”+self.devLanguage+“ language.”)

篇6:python教学设计

在__builtin__模块初始化中,md_dict中存储的内容就包括内置函数以及系统类型对象,如len,dir,getattr等函数以及int,str,list等类型对象。正因为如此,我们才能在代码中直接用len函数,因为根据LEGB规则,我们能够在__builtin__模块中找到len这个符号。几乎同样的过程创建sys模块以及__main__模块。创建完成后,进程对象interp->builtins会被设置为__builtin__模块的md_dict字段,即模块对象中的那个字典字段。而interp->sysdict则是被设置为sys模块的md_dict字段。

sys模块初始化后,其中包括前面提到过的modules以及path,version,stdin,stdout,maxint等属性,exit,getrefcount,_getframe等函数。注意这里是设置了基本的sys.path(即python安装目录的lib路径等),第三方模块的路径是在site模块初始化的时候添加的。

需要说明的是,__main__模块是个特殊的模块,在我们写第一个python程序时,其中的__name__ == “__main__”中的__main__指的就是这个模块名字。当我们用python xxx.py运行python程序时,该源文件就可以当作是名为__main__的模块了,而如果是通过其他模块导入,则其名字就是源文件本身的名字,至于为什么,这个在后面运行一个python程序的例子中会详细说明。其中还有一点要说明的是,在创建__main__模块的时候,会在模块的字典中插入(“__builtins__”, __builtin__ module)对应关系。在后面可以看到这个模块特别重要,因为在运行时栈帧对象PyFrameObject的f_buitins字段就会被设置为__builtin__模块,而栈帧对象的locals和globals字段初始会被设置为__main__模块的字典。

另外,site模块初始化主要用来初始化python第三方模块搜索路径,我们经常用的sys.path就是这个模块设置的了。它不仅将site-packages路径加到sys.path中,还会把site-packages目录下面的.pth文件中的所有路径加入到sys.path中。

下面是一些验证代码,可以看到sys.modules中果然有了__builtin__, sys, __main__等模块。此外,系统的类型对象都已经位于__builtin__模块字典中。

In [13]: import sysIn [14]: sys.modules[‘__builtin__‘].__dict__[‘int‘]Out[14]: intIn [15]: sys.modules[‘__builtin__‘].__dict__[‘len‘]Out[15]:In [16]: sys.modules[‘__builtin__‘].__dict__[‘__name__‘]Out[16]: ‘__builtin__‘In [17]: sys.modules[‘__builtin__‘].__dict__[‘__doc__‘]Out[17]: “Built-in functions, exceptions, and other objects.nnNoteworthy: None is the `nil‘ object; Ellipsis represents `...‘ in slices.”In [18]: sys.modules[‘sys‘]Out[18]:In [19]: sys.modules[‘__main__‘]Out[19]:

篇7:python教学设计

Python-QQ:Python语言实现的QQ客户端,根据QQ协议,使用Python来实现一个跨平台的客户端,

充分发挥Python语言快速开发和跨平台运行的优点,特别是让unix用户在使用QQ的时候又多一个选择。

项目主页:www.open-open.com/lib/view/home/1324282948639

篇8:基于Python的设计模式研究

本文通过实际事例对各种常见的设计模式及设计原则进行讲解, 在体现设计模式必要性的同时也对python语言的进行了展示, 为python程序员和爱好者提供了参考与借鉴。

1 设计模式

1.1 工厂模式

工厂模式指的是一个工厂对象决定创建出那一种具体的类对象。工厂模式由3个部分组成:工厂对象、抽象产品对象以及具体产品对象, 工厂模式如所示。工厂模式通过抽象出的产品对象, 减少了代码的耦合。工厂模式如图1所示。

1.2 策略模式

策略模式是将一系列算法进行封装, 对外提供统一的调用接口。策略模式中的各种算法虽然实现不同, 但都以相同方式调用。策略模式减少了算法之间的耦合。策略模式如图2所示。

2实现及优化

2.1 原始设计

某公司需要对员工考勤记录进行统计。考勤记录为打卡机生成的excel表。根据需求可以很容易的想到要设计2个类来实现上述功能:一个为操作excel的类 (Excel Class类) , 另一个则是用于统计各种考勤信息的类 (Over Time类) 。

程序结构大致可以表述如下:

2.2 简单工厂模式

接近年终, 公司领导为完成年度任务, 要求部分员工实行611工作制, 并严格考勤, 于是考勤软件需要实现对611员工迟到、早退、旷工的特殊处理。首先肯定会想到的是要对Over Time进行派生, 派生出对普通员工统计的子类 (Over Time Normal) 和对611制员工统计的子类 (Over Time611) 对Process函数进行考勤处理。然后在业务代码中对员工姓名进行判断, 如果属于611工作制的员工, 则生成Over Time611类对象进行处理, 反之则生成Over Time Normal对象进行处理。

程序大致可以表述如下:

这样虽然可以达到目的, 但是如果再派生出其他之类 (如724工作制) , 那么不仅需要对派生类进行编写, 还需要改动业务代码。这无疑增加了程序的耦合性。于是可以考虑采用工厂模式。

定义了一个工厂函数类, 它依据员工姓名生成对应的m_Over Timer.对象, 不同对象调用子类重载的Process函数对考勤时间进行计算。

工厂类表述如下:

业务代码大致可以表述如下:

但是存在一个问题, 就是所有子类对象必须有同样的方法名称, 要是不同对象之间不是从同一个父类派生而来, 那方法的名称也可能不同, 这样就没法使用工厂模式了。策略模式可以解决这个问题。

2.3 策略模式

策略模式, 通过将彼此无关的方法进行封装, 从而对外提了供统一的抽象接口。策略类大致代码表述如下:

此时Over Time611的Process和Over Time Normal的Process可以是不同的名称, 但通过Strategy封装后, 抽象出统一的调用接口:Strategy。另外Strategy也结合了工厂模式, 可以根据员工姓名调用对应考勤子类重载后的Process方法。

业务代码大致可以表述如下:

3 模式分析

(1) 通过派生的方式, 可以扩展各种制度下的考勤统计, 各派生类之间无耦合, 实现了开放-封闭原则。

(2) 通过使用简单工厂模式, 将判断生成子类对象的工作从业务代码剥离。业务代码通过调用抽象出的工厂类对象, 减少了业务代码与子类的耦合, 在进行子类扩展时, 只需修改工厂类, 而无需对业务代码进行修改。

(3) 策略模式将各子类的方法甚至是其他类对象的方法通过聚合而不是继承的方式抽象出一致的调用接口, 是遵循接口编程的应用。

(4) 除了工厂模式和策略模式外, 还对底层第三方库操作EXCEL的方法进行封装, 提供抽象接口, 将业务代码和底层接口的剥离, 减少耦合, 实现了依赖倒转原则。

4 结论

本文不但对工厂模式与策略模式进行理论说明, 还通过实例对整个优化过程进行了详细的讲解。这种循序渐进的方式让读者充分体会到了各种设计模式的好处, 避免了知道理论知识却不知道何时使用的问题。

基于python语言的实现, 不仅为python语言使用者提供了设计模式的借鉴与参考, 更为广大程序员展示了python语言的魅力。

摘要:在面向对象的软件设计过程中, 为了提升软件的复用性、灵活性、扩展性、可维护性、稳定性, 程序员通过封装、继承、派生等手段对软件架构有目的性的进行了一些额外设计。在编码之初, 可能觉得有无这些设计并不重要, 但是随着软件的需求的变化以及功能的扩展, 在后续软件的更改与维护过程中就会越发体现出这些设计工作必要性。以往, 这些设计工作都是由有经验的程序员实施的, 随着设计模式的成熟和增多, 逐渐对这些设计模式进行了归纳与提取, 并总结出了各种经典的设计模式供程序员学习与效仿。

关键词:设计模式,Python,工厂模式,策略模式

参考文献

[1]程杰.大话设计模式[M].清华大学出版社, 2003.

[2]Erich Gamm、Richard Helm、Ralph Johnson, John Vlissides.译者:李英军、马骁星、蔡敏、刘建中.可以复用面向对象软件的基础[M].机械工业出版社, 2008.

篇9:python教学设计

[关键词]计算思维;Python;程序设计;课堂教学

[中图分类号] G642 [文献标识码] A [文章编号] 2095-3437(2016)08-0127-03

一、引言

2006年,美国CMU大学周以真(Jeannette M.Wing)教授在美国计算机权威期刊《Communications of the ACM》上发表并定义了计算思维(Computational Thinking)。[1]周以真教授认为:计算思维是运用计算机科学的基础概念去求解问题、设计系统以及理解人类行为,它包括了涵盖计算机科学之广度的一系列思维活动。计算思维就是通过约简、嵌入、转化和仿真等方法,把一个看起来困难的问题重新阐释成一个我们知道如何求解的问题;计算思维采用抽象和分解的方法来控制庞杂的任务或设计巨型复杂系统。它是基于关注点分离的方法,它是选择一种合适的方式陈述一个问题,或者是选择合适的方式对一个问题的相关方面建模使其易于处理。计算思维利用启发式推理寻求解答,就是在不确定情况下的规划、学习和调度。计算思维将成为每一个人的技能组合成分,而不仅仅限于科学家。[4]

计算思维能力是多种学科人才必须具备的基本素质,其概念一经提出就引起了国内外科学界和教育界的广泛关注。近年来,国内外学者从不同的角度对计算思维的含义、特点和培养方法进行了探索和研究。中国科学院院士、中国科学技术大学陈国良教授指出:在大学中,计算思维不仅能振兴大学计算教育,而且会令科学与工程领域创造出革命性的研究成果。[2]朱亚宗教授将计算思维、实验思维和理论思维归结为人类三大科学思维方式。[3]

二、Python语言

Python语言是一种面向对象、直译式计算机程序设计语言,Python语法简捷、清晰和易读。Python是开源的语言,具有丰富和强大的类库,同时具有优良的可扩展性和平台可移植性,它能够很轻松的把用其他语言制作的各种模块轻松地联结在一起。

Python语言的主要特点:

(一)简单易学

Python有极其简单的语法,容易上手,易于学习,非常适合初学者,也特别适合专家使用。一个好的Python程序专注于解决问题本身,而并不是沉迷于语言语法。

(二)免费、开源

Python的使用者可以自由地发布这个软件的拷贝,阅读它的源代码,对它做改动,把它的一部分用于新的自由软件中。

(三)可移植性、可扩展性、可嵌入性

Python可以被移植到各种不同的平台上,如Linux、Windows、Macintosh等等,以及Google基于linux开发的android平台。Python可以将部分程序用C或C++编写,然后在Python程序中使用它们。使用者也可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。

(四)面向对象

Python支持面向过程和面向对象的编程。

(五)丰富的库

Python除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

目前我国高校主要把C语言和VB语言作为程序设计课程所用语言。这些程序设计语言历史较久,功能强大,特点突出。但是这些程序语言进行程序开发工作量较大,难度相对较高,特别是对于非计算机专业和文科院校专业的学生更是如此。

Python语言是一种简洁、易读的程序语言,具有可扩展性和可移植性的特点。同时Python是开源的语言,拥有丰富的库,为开发提供了极大的便利。目前国内外采用Python语言作为程序设计课程语言的高等院校日益增多。

三、Python程序设计课程的计算思维

程序设计课程是很多非计算机专业学生的一门必修课,同时也是一个训练学生计算思维很好的平台。[5]本文尝试在Python程序设计课程的教学过程中,引入计算思维的先进理念,把程序设计知识以一种新的方式教授给学生,通过把计算思维融入Python程序设计课程教学中,实现逐步引入计算思维的基本概念和方法,使学生理解计算思维的理念,学会运用计算思维的方法,去发现问题,然后寻找解决问题的途径,最终解决问题。这样通过本课程的学习,达到培养学生计算思维的能力,提高学生解决问题的能力和创新能力的目的,为程序设计课程探索一条新的教学途径。

在实际工作中,当需要解决一个大型问题时,往往都会首先考虑怎么对问题进行分解化简。如现代制造业中的离散制造,就融合了计算思维的本质,把一个庞大的生产问题,按照产品的功能进行层层分解,使一个庞大的问题分解成一个个子问题,更便于人们在生产过程中进行处理和控制。计算思维就是通过约简、分离、嵌入、启发等方法,把复杂的问题分解并解释成若干简单问题,从而降低难度,便于分析和解决问题。

在Python程序设计教学过程中,运用这种分解或分层的方法,以程序设计理论为出发点,把人的思维融入程序设计解决问题。学生不再只是面对抽象的程序设计的理论与算法,更多的是将注意力集中在分解问题和解决问题的过程中,同时还可以将各自专业和学科知识融入其中。

四、Python程序设计课程中计算思维应用

在计算思维解决问题的方法中,关键是把问题化简和分离,也就是将复杂而庞大的问题按照较为合理的方法进行分解简化,问题最终将被分解成多个模块,或者多个阶段,然后再针对这些模块或阶段去逐个找出解决方法,最终解决整个系统的问题。

事实上这种把问题化简和分离的方法,非常适合在Python程序设计课程中应用。教师在教学中把各个问题分解简化,学生面对的不再是整个完整的问题,而是一个个相对容易解决的小问题和小模块,所以学生只需要把每个小问题解决好了,那么也就掌握了Python程序设计的方法和过程。下面以Python程序设计课程中的一个问题为例,来说明Python程序设计课程中的计算思维应用。

现在需要用Python程序设计中的列表来处理数据。教师首先把列表问题分解成创建列表、添加数据、显示数据等几个问题,然后逐步解决这些问题,最终实现运用列表处理数据的目的。

(一)创建列表

现有一些关于汽车基本信息的数据,需要根据这些数据先去创建关于汽车品牌的一个列表。在创建列表过程中,教师会让学生重点关注一下几个问题:列表的结构、列表的存储方式、列表中数据项的处理方法。

创建一个名为“cars”,关于汽车品牌的列表。

cars=[“大众”,“通用”,“丰田”,“福特”]

通过创建列表这一问题,使得学生掌握创建列表的基本方法,了解列表中数据项的数据类型问题,同时也让学生知道列表中数据项存储方式是类似于数组的。在解决创建列表问题的基础上,教师可以进一步把问题加以扩展,如列表中数据项的显示、列表中数据项的添加、列表中数据项的删除等等,这样又让学生掌握了列表中数据项的处理方法。

(二)添加数据

在创建了关于汽车品牌的列表后,现在需要为它增加一个生产年份的数据,而且要求数据要添加在每一个汽车品牌后面。在这一问题中,教师提示学生要关注解决问题的不同方法。

方法一:运用“insert”和“append”命令,向“cars”列表中直接添加所需要的数据。

cars.insert(1,“2012”)

cars.insert(3,“2010”)

cars.insert(5,“2000”)

cars.append(“2014”)

这种方法需要用到“insert”和“append”命令,而且还要分别计算每个生产年份在整个列表中的位置。

方法二:从头重新创建“cars”列表。

cars=[“大众”,“2012”,“通用”,“2010”,“丰田”,“2000”,“福特”,“2014”]

这种方法相对比较简单,只需重建列表。

添加数据问题解决后,让学生进行总结讨论,这两种方法的优缺点,使学生了解对应不同的需要和不同的列表,可以采用不同方法来解决问题。

(三)显示数据

进入显示数据阶段,教师首先要求学生把上述所建的“cars”列表中的数据,按品牌和年份分别显示出来,用“print”命令显示出来,这一任务学生很容易完成。

print(cars[0],cars[1])

print(cars[2],cars[3])

print(cars[4],cars[5])

print(cars[6],cars[7])

然后教师再提出一个问题,如果“cars”列表中添加了新的数据项,也需要显示出来,怎么解决?学生解决的方法往往是增加“print”语句,接着我们再问学生:如果列表中增加的数据项有很多项,那怎么解决?是不是要添加很多条“print”语句呢?

上面这个问题往往会难住学生,教师就可以适时的提出用迭代方法来处理列表中的数据,引入“for循环”语句可以非常方便解决这一问题。

for each_item in cars:

print(each_item)

用迭代方法方便解决问题后,我们还可以让学生考虑用“while循环”语句编写迭代代码。

cars=[“大众”,2012,“通用”,2010,“丰田”,2000,“福特”,2014]

number=0

while number

print(cars[number])

number=number+1

显示数据问题解决后,学生在此过程中掌握了通过迭代来实现显示列表中数据的方法,同时初步了解了循环语句的用法。

(四)思维启发

经过前面三个阶段的学习,学生已经基本掌握了列表处理数据的方法,同时也从中了解了与计算思维相关的一些知识。为了让学生更好的理解计算思维的本质,教师需要把计算思维方法中的思维启发引入教学过程中,让学生多思考,多寻求解决问题的方法,从而达到培养学生应用计算思维能力的目的。

具体实施方法是,以前面三个阶段的学习为基础,再给学生提出一系列与列表相关的问题,如运用列表知识来解决企业销售的问题、超市商品价格查询问题等。学生要解决这些问题,光靠前三个阶段的知识是远远不够的,由于课堂时间有限,所以教师应鼓励学生课后去思考,去寻找解决问题的方法。经过一阶段后,教师再去检查学生完成任务的情况,当然学生完成的情况可能不是很理想,存在很多问题,这都是很正常的。教师提出一系列与列表相关问题,其目的主要是关注学生思考探索问题的过程,而不是解决问题的结果。在学生经过自己思考探索之后,教师在学生结果中挑选一些典型例子,进行讲解分析,最后引出正确的解决问题的方法和思路。通过这些训练,学生思考问题、解决问题的能力会有很大提高,学生也慢慢学会使用计算思维的各种方法来思考和解决问题。

学生计算思维的基本技能的培养,不可能单单通过课堂教学就能完成,实际的锻炼是最好的方法。所以教师应当多鼓励学生参加一些创新项目和应用能力大赛,通过项目和大赛磨炼和挑战自己,参与的学生都受益匪浅,感到自己各方面的能力都得到了锻炼。学生的这些收获往往是在课堂上老师所不能给予的。计算思维能力的培养最终要靠学生自己在学习、实践活动过程中逐步掌握和形成。

五、结束语

要让学生掌握好计算思维的基本技能,必须把计算思维的培养融入整个教学过程中。从Python程序设计课程教学尝试来看,计算思维方法能很好的培养和训练学生思考和解决问题的能力,使学生较好的掌握教学内容,使教学效果良好,这表明了把计算思维融入程序设计课堂教学的可行性和有效性。所以,教师都有必要从计算思维的理念出发,积极主动地参与到教学过程中,把计算思维的各种方法和自己的课程有机的结合起来,从而达到培养学生计算思维的能力的目的。

[ 注 释 ]

[1] Wing J M.Computational Thinking[J].Communication of the ACM,2006(3):33-35.

[2] 陈国良,董荣胜.计算思维与大学计算机基础教育[J].中国大学教学,2011(1):7-11,32.

[3] 朱亚宗.论计算思维——计算思维的科学定位、基本原理及创新路径[J].计算机科学,2009(4):53-55.

[4] 周以真.计算思维[J].中国计算机学会通讯,2007(11):83-85.

[5] 孙家广.计算机科学的变革[J].中国计算机学会通讯,2009(2):6-9.

[责任编辑:钟 岚]

上一篇:铁口卡焦炭处理下一篇:有智慧的寓言故事400字