Python教案 - 教学设计

2022-07-10 23:31:22   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《Python教案 - 教学设计》,欢迎阅读!
教学设计,教案,Python

时间:

课题 教学重点

Python语言开发的运行环境的配置 程序设计基础--绪论

1. 了解程序设计语言的发展历史 2. 理解Python语言的特点及其重要性 3. 掌握Python语言Hello程序的编写方法 4. 掌握Python语言开发的运行环境的配置 Python语言的特点及其重要性

教学难点 Python语言开发的运行环境的配置 主要教法

讲授演示法+上机操作



一、新课导入

1. 计算机的定义:

能够根据指令操作数据的设备 计算机的两个特性

功能性 可编程性

计算机的可编程性需要通过程序设计来体现

2. 程序设计语言:计算机能够理解和识别操作的一种交互体系 程序设计语言的种类

机器语言 汇编语言 高级语言

常用的程序设计语言 高级语言的执行方法

静态语言:编译执行 脚本语言:解释执行 编译和解释的区别

编译:一次性的翻译,需对目标代码优化 解释:每次运行都需要


编译:源代码(高级语言)转换成目标代码(机器语言) 解释:源代码逐条转化成目标代码同时逐条运行目标代码的过程

编译的好处

目标代码执行速度更快

目标代码在相同操作系统上使用灵活 解释的好处

便于维护源代码 良好的可移植性

Python语言:将解释器和编译器结合的脚本语言 3.

计算机已成为普通工具 学会编程:满足感和安全感 C/C++等语言:复杂

Python语言:充满快乐和创造性的全新旅程

Python语言概述 Python语言的历史

诞生于 1989年,已有25年,达到成熟期 2000, Python 2.0, 2,.7.6 2008, Python 3.0, 3.4.x Python语言的特点

强制缩进保证可读性 不需要主函数

可以同时被解释和编译执行 语言简洁

编程模式灵活(面向过程和面向对象) Python语言的开发环境配置 安装Python运行环境

根据操作系统选择不同版本

下载相应的Python 2.7.6版本程序,跟随提示安装 使用Python运行环境

方法一:启动Windows命令行工具,输入python,在>>>后输入Python语句,如图所示输入exit()quit()退出

方法二:调用已安装的IDLE来启动Python运行环境,

方法三:按照语法格式编写代码,保存为文件,例如源文件hello.py。打开Windows命令行,使用命令python hello.py来运行文件 使用Python运行环境

方法四:打开IDLECtrl+N打开一个新窗口,输入语句并保存,使用快键建F5即可运行该程序

方法五:将Python集成到Eclipse等面向较大规模项目开发的集成开发环境中 其他操作系统上配置Python环境与上述在Windows上的配置方法类似 Hello程序

你的第一个程序:在屏幕上打印出“Hello World



4.





5.


print Hello World

表示将引号中的信息输出到屏幕上

显示效果如下: 二、上机练习

首先进行Python的安装与开发环境配置, 接着完成第一个程序 Hello World 三、本课小结

计算机的基本概念 程序设计语言分类 编译和解释

Python语言概述

PythonHello程序编写及开发环境配置

课后 反思




时间:

课题 教学重点 教学难点 主要教法



Python 程序语言入门

让学生了解什么是编程及对编程提起浓厚的学习兴趣; ·Python ShellGUIPrompt(提示符)的理解; ·学会与Python交互的方法,print指令;

·新建程序文本文档、运行程序的方法、保存时需要注意什么; ·学会怎样去查询程序的错误;

·让学生对编程提起浓厚的兴趣; ·print指令的运用;

·识别和修正程序的错误。 ·识别和修正程序的错误;

讲授演示法+上机操作



一、复习巩固

1、什么是编程?

2Python-我们和计算机沟通的语言

所想要表达 编程软件翻 计算机接收 的意思 译成二进制 并执行 常用、最流行的几种程序语言:CC++C#JavaVBpython 3Python可以用来做什么

·开发游戏&软件(游戏后台大多数用python编写); ·制作更高级的Flashweb flash game); ·创建数据库;

·黑客 hacker(远程攻击计算机、破解硬件or软件);

·发明变形金刚(2006年日本FANUC推出的人工智能机器人); ·学习其他语言的基础(所有程序语言都有共同性,学好python能够让你快人一步的理解其他程序语言);

·python几乎无所不能。

======== 当然不是每一个学习python的人都能成功 ======== ======== 但是学习python你将获利以下几点 ========

让你的思维更加敏捷! 让你变的知识渊博! 让你学习更多的英文!

============ 也有可能带来一些“负面影响” =========== × 你的皮肤会变得粗糙 >_<

× 你可能会变成一枚宅男 ╯□╰ × 500元买一副眼镜 ⊙﹏⊙ 二、上机操作从IDLE启动python

1、通过开始菜单; 好比三种 第一种:2B青年


三种方法 2、通过快捷方式; 第二种:普通青年 3、通过快捷键; 网络青年 第三种:文艺青年

·窗口标题栏的文字“Python Shell”-中文意思是“python的外壳”,是作为用户输入文本与程序交互途径的一种。

·整个窗口被叫做“GUI”-中文意思是“图形用户界面”,GUI的特性是包含:窗口、菜单、按钮、滚动条等。没有这些特性的程序叫做text-mode(文本模式程序)、command line(命令行程序)

*提问:平时在使用电脑时有没有遇见过带有GUI的程序和text-modecommand line(答案:windows窗口 DOS

·>>> -叫做提示符(Prompt),指程序正在等待你键入信息时显示的符号。 三、来点指令吧!

>>> print Hey man! 回车(每输入完一行指令都要输入回车以跳转到下一行) Print-打印(命令),指在屏幕上显示文本,而不是常说的用打印机打印在纸上。 !!注意 >>颜色<< 注意!!

问:IDEL里为什么会有这些奇妙的颜色呢?

答:IDLE为了帮助我们更好的理解和阅读这些内容,会用不同的颜色来区分代码code)不同的部分,print 的颜色就是橙色。

!!注意 >>错误<< 注意!!

问:SyntaxError: invalid syntax是个什么东西?

答:直译“语法错误:无效的语法”,表示python不懂你输入的内容,因为print被错误的拼成了point 四、与python交互

我们刚刚执行的第一条指令:hey man,就是在和python交互,这种输入代码与计算机交流的过程就叫做交互。

多试一条指令! >>> print 5 + 3 8 >>>

计算机非常擅长算术运算,计算机被创造出来的初期就是被用来数据计算。 再试一条指令! >>> print 5 * 3 15 >>>

====== Mr.Lee TIPS ======

几乎所有计算机程序和语言中都使用 * 符号作为乘号。这个符号称作“星号”或“星”。

======口算&计算器&python三者进行对比吧====== 算:Print 5 * 3

======口算&计算器&python三者进行对比吧======

利用python你除了可以超大数的数学计算之外,你还可以做些令人意想不到的事情,例如:

>>> print Dog + brother Dog brother >> 或者

>>> print where is plane * 20


where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane where is plane

>>>

计算机除了非常擅长运算外,另一件事情就是反复的做事情,重要的是它不会感到枯燥,就像上面我让计算机喊了20 where is plane ,如果你高兴可以让它喊到直到MH370出现,前提是马航要给力还有就是不要停电…… 五、编程任务

到目前为止,我们只是看到单个python指令的演示,其实程序就是多个指令的集合。 1、创建程序的方法:

a.通过Python Shell菜单栏 File New Windows创建; b.快捷键:Ctrl + N

*新程序窗口标题栏显示“Untitled”(未命名)。如何给程序取名字?

2、程序1 我们的第一个程序-“我爱吃香蕉” print “我爱吃香蕉!” print “香蕉 * 20 print mua * 40 print “我吃撑了!”

3、保存/另存(命名)你的程序文档

File Save / Save As

输入完指令后通过 Save 快:Ctrl + N 保存or另存为 Save As 快:Ctrl + Shift +S

!!注意 >>扩展名<< 注意!!

输入完程序名称后一定不要忘了加上 .py ,否则在python中将看不到 程序中命令的颜色和windows不知道该用什么程序来打开这个文件。 ====== Mr.Lee TIPS ======

如果你想要你的程序支持中文,需要在程序的第一行加上代码: #encoding XXX#

XXX用各国文字编码代码来替换,各国文字编码代码可以查询百度。 例如,简体中文的代码是:GBK,那么程序的第一行应写上: #encoding GBK#

====== Mr.Lee TIPS ====== 六、如果出了问题

在编程过程中容易出现的问题归纳为两大类:

1syntax error(语法错误):指编程语言的拼写和文法规则出现错误,意味着你键入的某个内容不是正确的 Python 代码。 例如: >>>

print where is plane

syntax error: invalid syntax(语法错误:无效的语法) there's an error is your program(这是一个错误的程序) >>>

错误原因:where前面漏了一个引号

2runtime error(运行时错误):只会在程序运行时才会发生的错误,是 IDLE python 无法检测出来的错误。


例如:

程序2 运行时错误-“我爱大鳄鱼” >>>

print “你好!欢迎来到我的动物园!”

print “我的动物园有好多好多的动物,例如: print “鳄鱼 + 5 >>>

错误原因:

IDLE 1.2.1 ======== No Subprocess ========= >>>

你好!欢迎来到我的动物园!

我的动物园有好多好多的动物,例如:

Traceback (most recent call last):(错误的开始)

File C:\Users\Administrator\Destop\i love big cayman.py, line 4, in (错误发生的位置 / 程序文件保存的路径)

Print 鳄鱼 + 5(出错的代码行)

TypeErrorcannot concatenate str and int objectspython认为可能存在的问题,并不一定是在这里,但是会在这附近)

===================== ===================== 为嘛print “鳄鱼 * 5可以,print “鳄鱼 + 5却不行? ===================== =====================

听我说,这有点像将苹果和鳄鱼放在一起,在python中不能将两个完全不同的东西放在一起,比如说数字(int)和文本(str)。“鳄鱼 + 5像是在说5个苹果和3只鳄鱼相加等于多少?结果是8,但是8个什么?完全没有意义。

不过几乎所有东西都可以乘以一个数来翻倍,如果你有1只鳄鱼,再乘以5,那么你就会有5只鳄鱼!(克隆大乱斗!)。 七、第二个程序任务

第一个程序“我爱吃香蕉!”没多大实际意义,仅仅只是在屏幕上打印了一些内容,下面我们来是一个更加有意思的程序,记得给它取上一个名字,“NumGuess”是个不错的名字。

File New Windows Save NumGuess.py 输入以下代码:

====================================================== #encoding=GBK# import random

secret = random.randint(1, 100) guess = 0 tries = 0

print "你好,同学……我和你们班主任之间有一个秘密!?"

print "这个秘密就在1-99之间的一个数字。 我会给你6次机会来猜这个数字,猜对你就可以获赠加多宝一罐! "

while guess !=secret and tries < 6:

guess = input("来猜个数字吧!? ") if guess < secret:

print "太低了喔!~" elif guess > secret:


print "太高了喔!~" tries = tries + 1 if guess == secret:

print "哦也!你猜中这个数字了!!那么加多宝的话,请出门左拐找你们蒋老师!" else:

print "我不会给你更多机会了,同学!你现在得请我喝一瓶王老吉!" print "这个秘密数字就是————", secret

====================================================== 程序解析:

while if elseelif input 指令我们在以后会详细的学到。 程序概念点:

由程序随机选取秘密数。 用户输入他猜的数。

程序根据秘密数检查用户猜的结果:太大还是太小? 用户不断尝试,直到猜出这个数,或者用完所有机会。 猜到的数与秘密数一致时,玩家获胜。

>>> 教学过程结束。 课堂小结:

学会了如何启动IDLE 了解了交互模式;

交给 Python 一些指令来执行;

看到了 Python 知道如何完成算术运算(包括非常大的数) 启动 IDLE 文本编辑器键入你的第一个程序:我爱吃香蕉; 运行你的第一个 Python 程序; 了解如何查看错误消息;

运行你的第二个 Python 程序:猜数游戏 课堂练习 用脑想一想:

1. 如何启动IDLE 2. print 的作用是什么?

3. Python 中表示乘法和除法的符号是什么? 4. GUI 的特性包括哪些?

5. 如果想要你的程序支持中文,需要做什么? 课堂练习 动手做一做:

1. 在交互模式中,使用 Python 计算一周有多少分钟。

2. 编写一个简短的小程序,打印 3 行:你的名字、出生日期,还有你最喜欢的颜色。(结果应该是下面这样)

我的名字叫XX,我是XX运动队的。 1988 08 20 日出生。

我最喜欢的颜色是粉红色。

课后 反思



时间:

课题

判断循环




教学重点

教学难点 主要教法

掌握if语句:单分支、双分支、多分支、嵌套 完成条件语句实例:登录认证模块 学会判断输入是否合法 了解三元表达式 掌握range() 掌握循环语句 掌握for语句 掌握while

掌握breakcontinuepass

完成循环语句实例:登录认证模块扩展

掌握if语句:单分支、双分支、多分支、嵌套 了解三元表达式 掌握range() 掌握循环语句 掌握for语句 掌握while

掌握breakcontinuepass

完成条件语句实例:登录认证模块 完成循环语句实例:登录认证模块扩展

讲授演示法+上机操作



一、新课讲授

1. 掌握if语句 a) 单分支

if 表达式: 代码块1 else

代码块

b) 双分支

if 表达式1

代码块1

elif 表达式2

代码块2

c) 多分支

if 表达式1

代码块1 elif 表达式2


代码块2 else

代码块_其他

d) 嵌套 2. 了解三元表达式

Expression1 if boolean_expression else Expression2

如果满足条件A大于B,max值为A,反之maxB 如:max=A if A>B else B 例如:

3. 掌握range()

range():产生整数序列 例:

range(n):产生从0开始,到n的数字序列,不包括n range(m,n):产生从m开始,到n的数字序列,不包括n

range(m,n,k):产生从m开始,到n,增量为k的数字序列,不包括n

4. 掌握循环语句 a) 掌握for语句

语法格式:

for expression1 in iterable:

for_suite

else



else_suite 例如:

结果:

b) 掌握while

c) 掌握breakcontinuepass

1.1 语法结构:


while boolean_expression:

while_suite

else:

else_suite

1.2 解释:

如果boolean_expression的结果为True,循环就会执行;boolean_expression的结果为False时终止循环,此时如果有else分支,则会执行。

以上结构中,else分支为可选部分。else代码块:循环不满足循环条件终止,才会执行,如果循环终止是由break跳出,则else分支不会执行。 1.3 例如:

break:跳出所处的最近层循环

continue:跳到所处的最近层循环的开始处 pass:占位语句 例如:

执行结果:

二、上机练习

1. 条件语句实例:登录认证模块 a) 判断输入是否合法 b) 非法用户提示警告信息 c) 合法用户提示登录成功

username = raw_input("username:")

if username == '': print " 用户名不能为空" else:

print "\033[1;33;45m登录成功,欢迎%s\033[0m"%username chr() ord()

2. 循环语句实例:登录认证模块扩展 a) 直接回车无效,继续输入 b) 验证用户身份是否合法

三、课堂小结


if语句:单分支、双分支、多分支、嵌套、三元表达式、range()、循环语句、for语句、while

breakcontinuepass 登录认证模块展示

课后 反思



时间:

课题

python序列-字符串

了解序列类型常用操作 了解索引和切片 掌握类型转化 掌握强制类型转化

学会字符串转换实例:格式化输出菜单列表,将用户的输入数值转化整型并验证

掌握字符串常用方法

s.find() s.join() s.replace() s.split() s.strip() s.index() s.startswith/s.endswitht s. isalnum()/s.isalpha()/s.isdigit()/isupper()/islower() s.upper()/ s.lower() /s.swapcase s.count()

了解序列类型常用操作 了解索引和切片 掌握类型转化 掌握强制类型转化 学会字符串转换实例

讲授演示法+上机操作



教学重点 教学难点 主要教法



一、新课讲授

1. 序列类型常用操作 a) 索引和切片

1.1.1 1.1.2 1.1.3

索引:例:s[0]从左向右:索引从0开始;从右向左:索引从-1开始 切片:例:s[0:2]

扩展切片:指定步长,例:s[0:9:2]

b) 掌握类型转化

格式:

print “字符串 %format1 %format2…” % (变量或值1,变量或值2...) 符号及其对应输出格式: %d%i

十进制整数或长整数


%f %s



浮点数 字符串 用于输出符号%

%% 举例:

c) 强制类型转化

int():强制转换为整型, 例如:

注意:只能将由数字组成的字符串转换为整型 错误用法

float():强制转换为浮点型例如 str():强制转换为字符串例如:

2. 掌握字符串常用方法



s.findt):查找子串t,找到返回最小的索引值,找不到则返回-1

s.join(iter) 使用s作为连接符连接序列iter中所有元素 如:list2=["h","e","l","l","o"," .","c","o","m"]



“”.joinlist2

s.replaceold,new):替换

s.splitsep):使用sep作为分割符,列表返回结果。 如:str=””

str.split(".") 得到["www ","baidu","com"]序列 s. strip(t): 删掉开头和结尾的字符t 如:删除空白符 s1.strip()

s. indext):子串t首次出现的位置,找不到报错

s.startswith/s.endswitht)以子串t开头/结尾:结果是truefalse

s. isalnum()/s.isalpha()/s.isdigit()/isupper()/islower()判断所有字符是否为数字或字母

/是否为字母/是否为数字 结果是bool s.upper()/ 互换

s.count(t) 统计t出现的次数 二、上机练习

s.lower() /s.swapcase:所有字母转化为大写字母/小写字母,大小写

a) 字符串转换实例:格式化输出菜单列表;将用户的输入数值转化整


型并验证

三、本课小结

序列类型常用操作、索引和切片、类型转化、强制类型转化、字符串常用方法 学生展示:字符串转换实例

课后 反思



时间:

课题 教学重点 教学难点 主要教法

掌握列表基础知识 掌握列表相关方法 掌握序列类型操作 掌握生成器 掌握元组类型 掌握元组相关方法 掌握列表相关方法 掌握序列类型操作 掌握生成器 掌握元组类型 掌握列表相关方法 掌握元组相关方法

python列表和元祖

讲授演示法+上机操作



一、新课讲授

1. 掌握列表基础知识 1.1 列表的特点:

支持异构:一个列表中含不同类型的对象 支持嵌套:即列表中的元素可以是列表 可变:支持通过索引,切片,进行修改 1.2 如何定义列表:

方法一:[];例:list1=[1,3,5]

方法二:使用内置函数list() 内建函数list(a_sequence) 可以将一个序列转为列表 1


>>> str1="dddgf" >>> list1=list(str1) >>> list1

['d', 'd', 'd', 'g', 'f'] 2(后面讲)

>>> tuple1=(1,2,1) >>> list1=list(tuple1) >>> list1 [1, 2, 1] 3

2. 掌握列表相关方法:



2.1 append():向列表中追加元素 例如:

2.2 extend():追加可迭代对象中所有元素

1list2=[1,2,3]

list3=[]

list3.extend(list2) 2

2.3 insert():在指定索引位置插入 列表也支持索引,例如:

插入例子:

2.4 pop():按照索引弹出元素,返回值为该元素。默认弹出最后一个元素。 例如:

2.5 remove():按照元素值弹出第一个匹配项 例如:

2.6 count():统计指定值出现的次数 2.7 index():某个值第一次出现的位置 例如:

2.8 reverse():反向存放 例如: 2.9 查询遍历:


for I in list

for ik enumentlist 2.10

sort():排序

3. 掌握序列类型操作:序列类型包括:字符串、列表、元组

3.1

+连接*重复

例如: 3.2

max():求最大值、min():求最小值

例如:

4. 掌握列表生成式

列表生成式,是Python内置的一种极其强大的生成list的表达式。

4.1 用于:基于已有列表生成新列表 4.2 语法结构:

列表生成式的书写格式:[x*x for x in range(1 , 11)] 第一:把要生成的元素 x*x 放到前面 第二:后面跟上for循环 这样就可以把list创建出来。 for循环后面还可以加上if判断 4.3 举例:

110之间的偶数平方再除以2 作为新列表元素 110之间的偶数,作为新列表元素

4.4 特点:一次性生成新列表,如果列表数据过大,会消耗大量资源。

1. 掌握元组类型

1.1 定义元组:

方法一:() 例:tuple1=(1,3,4)

方法二:使用内置函数tuple():将可迭代对象中所有元素作为元组元素 例:

>>> list1=[1,2,3] >>> t1=tuple(list1) >>> t1 (1, 2, 3)


1.2 元组的特点

支持异构; 支持嵌套;

不可变:不支持通过索引、切片,进行修改

2. 元组的遍历 例如:

3. 掌握元组相关方法

index():返回指定元素第一次出现的索引位置 count():指定元素出现的次数 例如:

二、上机练习

练习:

三、本课小结

列表基础知识、列表相关方法、序列类型操作、生成器、元组类型、元组相关方法 学生完成实例操作

课后 反思



时间:

课题 教学重点 教学难点 主要教法

登录模块实现 查询可管理计算机 登录模块实现 添加计算机 删除计算机

查询可管理计算机

运维平台计算机管理实例

讲授演示法+上机操作



一、学习任务

运维平台计算机管理实例 任务要求与注意事项 二、上机练习


学生上机实操: 提示:

三、任务展示与评价

学生进行展示,完成互评与老师点评

项目 程序设计

分值

评价标准

编程技巧 调试过程 搭建合理稳固

小组成员分工及配合方面





自评



得分 组评



师评

20 30

运行结果 30 小组配合 20

总体得分

课后 反思



时间:

课题 教学重点 教学难点 主要教法

掌握字典类型 掌握字典相关方法 掌握字典的遍历 掌握集合类型 掌握集合相关方法 掌握字典相关方法 掌握字典的遍历 掌握集合类型 掌握字典的遍历 掌握集合相关方法

python字典和集合

讲授演示法+上机操作



一、新课讲授

1.

掌握字典类型 a)

字典的特点

无序: 通过键实现元素存取,故无序 可变:可以通过键进行改变 异构:支持多种数据类型

嵌套:可以在键值对中的值部分出现字典 b) 定义字典:

ii. iii.

方法一:{key1value1key2value2... 方法二:dict()内置函数:指定键值


例:d2=dictname="jerry",age="45",gender="m"

iv.

关键点:

键与值用冒号分开; 项与项用逗号分开;

字典中的键必须是唯一的,而值可以不唯一

2. 掌握字典相关方法

2.1 新或添加元素:dict1[key] = value 例如:

2.2 items():变量解包:即将字典转化为键、值作为元组的列表 例如:

2.3 keys();键列表 例如:

2.4 values():值列表 例如:

2.5 has_key():判断是否存在某个键,返回结果true false 例如:

2.6 del 删除元素:调用python自身函数删除 例如:

2.7 len():取得字典中键值对个数 例如:

2.8 update():在原字典上合并字典,键相同时会被覆盖。

例如:

2.9 get():取得某个键对应的值 例如:

2.10 2.11 2.12 例如:

3. 掌握字典的遍历: 4. 掌握集合类型 4.1 么是集合

无序、互异, 4.2 合的功能及特点



支持成员关系判断 支持迭代

不支持索引,切片 元素唯一 4.3 义集合set

方法一:{元素}

法二:内置函数set() 例:

5. 集合相关方法: 5.1 len():元素个数 例如:

5.2 add():添加元素 例如:

pop():弹出指定键对应的值 popitem():随机弹出键值对 clear():清除所有元素


5.3 remove():删除元素 例如:

5.4 update():合并集合 例如:

5.5 pop():随机弹出某个元素 例如:

5.6 合关系操作

5.6.1

例如:

5.6.2

例如:

5.6.3

例如:

5.6.4

例如:

s^t:求对称差集

s-t:求差集,存在于s集合而不存在于t集合中的 s&tst的交集 s|tst的并集

二、上机练习

学生上机完成字典类型、字典相关方法、字典的遍历、集合类型、集合相关方法的案例练习。

三、本课小结

字典类型、 字典相关方法、 字典的遍历、 集合类型、 集合相关方法

课后 反思



时间:

课题 教学重点

掌握如何创建文件对象 掌握open()三种基本模式 掌握open()的附加模式 掌握文件对象的相关方法 掌握文件对象的相关属性 掌握如何创建文件对象 掌握open()三种基本模式

python文件处理


掌握open()的附加模式 掌握文件对象的相关方法

教学难点 主要教法

掌握文件对象的相关属性

讲授演示法+上机操作



一、新课讲授

1. 掌握如何创建文件对象

a) 内置函数open()file() :用于打开文件和创建文件对象,返回文件对象 b) with 打开文件:with open('password') as f : #f = file('password') c) 语法格式:open(文件名,模式) 例如:

2. 掌握open()三种基本模式

a) r:只读,如果文件不存在,会发生异常 例:

b) w:写入(覆盖原有内容),如果文件不存在,会创建文件

i. 1password文件内容不为空,以w模式打开:

结果:

ii. 创建passwd文件

c) a:附加(从文件尾部追加),如果文件不存在,会创建文件 例如:

3. 掌握open()的附加模式

a) +:表示同时支持读写aa

b) a+ 可读写模式,写只能写在文件末尾处 c) w+ 可读写,与a+的区别是要清空文件内容 d) r+ 可读写,与a+的区别是可以写到文件任何位置 4. 掌握文件对象的相关方法

readline():返回一行

readlines():列表类型返回所有行内容

read():指定从文件读取多少字节,不指定字节数则读取全部内容,以字符串形式显示。


tell():当前指针在文件中的位置(多少个字节的位置) seek():定义文件指针的偏移量



f.seek(偏移量, 选项)

write():将字符串写入文件 writelines():将字符序列写入

flush():刷新,将数据从缓存区写入文件 sldkjalsjaslkjd close():关闭文件 例如:

2

5. 掌握文件对象的相关属性

mode:文件打开模式 name:返回文件名

closed:显示文件是否已关闭掉 例如:

二、上机练习

学生上机完成创建文件对象、open()三种基本模式、open()的附加模式、文件对象的相关上机练习,熟练完成Python创建文件对象的方法。

三、本课小结

如何创建文件对象、 open()三种基本模式、 open()的附加模式、 掌握文件对象的相关方法

掌握文件对象的相关属性

课后 反思



时间:

课题

函数式编程一


教学重点 教学难点 主要教法

掌握什么是函数 掌握函数的定义 掌握函数的调用

掌握函数形参和实参的区别

了解函数的作用域:什么是作用域、作用域分类 掌握函数的参数:默认参数、关键字参数、可变参数 掌握函数的调用

掌握函数形参和实参的区别

了解函数的作用域:什么是作用域、作用域分类 掌握函数的参数:默认参数、关键字参数、可变参数

讲授演示法+上机操作



一、新课讲授

1. 掌握什么是函数 function 功能 def

函数是python为了代码重用和最小化代码冗余而提供的基本程序结构。 函数将相关功能打包并参数化,将复杂的系统分解成可管理的部件。 2. 掌握函数的定义

在这里说明几点:

Python中采用def关键字进行函数的定义,不用指定返回值的类型。

函数参数params可以是零个、一个或者多个,同样的,函数参数也不用指定参数类型,因为

Python中变量都是弱类型的,Python会自动根据值来维护其类型。

return语句是可选的,它可以在函数体内任何地方出现,表示函数调用执行到此结束;如果没

return语句,会自动返回NONE,如果有return语句,但是return后面没有接表达式或者值的话也是返回NONE。下面看例子:

1

2 3


3. 掌握函数的调用

函数调用的方法:函数名(实际参数)

Python中不允许前向引用,即在函数定义之前,不允许调用该函数例如下面的错误:

4. 掌握函数形参和实参的区别

4.1 形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量称作为形式参数。

4.2 实参全称为实际参数,在调用函数时提供的值或者变量称作为实际参数

例如:

5. 了解函数的作用域

5.1 什么是作用域

变量的作用域:即变量能够使用的范围

5.2 作用域分类

5.2.1 本地作用域:定义在函数体内的变量(局部变量)

Python中,会为每个层次生成一个符号表,里层能调用外层中的变量,而外层不能调用里层中的变量,并且当外层和里层有同名变量时,外层变量会被里层变量屏蔽掉,例如:

在函数function中,while循环外面和while循环里面都有变量x,此时,while循环外面的变量x会被屏蔽掉。注意在函数内部定义的变量作用域都仅限于函数内部,在函数外部是不能够调用的,一般称这种变量为局部变量。

5.2.2 局作用域:定义在主程序的变量(全局变量)

它是在函数外部定义的,作用域是整个文件。全局变量可以直接在函数里面应用,但是如果要在函数内部改变全局变量,必须使用global关键字进行声明

6. 掌握函数的参数

6.1 默认参数:定义函数时,“name=value”的形式设置参数默认值

Python中默认的是采用位置参数来传参。这样调用函数必须严格按照函数定义时的参数个数和位置来传参,从左至右进行匹配,否则将会出现预想不到的结果调用函数时




数放后边

6.2 关键字参数: 调用函数时,使用“name=value”的形式通过参数名指定

通过指定参数名字传递参数的时候,参数位置对结果是没有影响的。关键字参数最厉害的地方在于它能够给函数参数提供默认值,

参数指定了默认值后,如果传参时不指定参数名,则会从左到右依次进行传参,关键参数要放在普通参数后面。

例如:

6.3 可变参数

6.3.1 1*args我们要定义一个函数的时候,必须要预先定义这个函数需要多少个参数

(或者说可以接受多少个参数)。一般情况下这是没问题的,但是也有在定义函数的时候,不能知道参数个数的情况在Python里,带*的参数就是用来接受可变数量参数的,这里接收的是元组数据

6.3.2 2**kwargs, 使**使

name=value




二、上机练习

学生上机完成函数式编程任务,教师巡视指导。 三、本课小结 什么是函数 函数的定义 函数的调用

函数形参和实参的区别

函数的作用域:什么是作用域、作用域分类 函数的参数:默认参数、关键字参数、可变参数

课后 反思



时间:

课题 教学重点 教学难点 主要教法

递归函数

掌握lambda表达式 enumerate函数序列化 yield函数(迭代) 装饰器 递归函数

掌握lambda表达式 enumerate函数序列化 yield函数(迭代)

函数式编程二

讲授演示法+上机操作




一、新课讲授

1. 递归函数:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,

这个函数就是递归函数; 1

2

2. 掌握lambda表达式

2.1 lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有

名称的

2.2 语法:lambda 参数 : 表达式

lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象 2.3 举例:

f1=lambda x,y:x+y f1(2,3)

2.4 map函数共同使用:

Map()第一个参数接收一个函数名,第二个参数接收一个可迭代对象 例如:

Lambdamap共同使用

3. enumerate函数用于遍历序列中的元素以及它们的下标

4. yield函数:yield 的作用就是把一个函数变成一个 generator,带有 yield 的函

数不再是一个普通函数,Python 解释器会将其视为一个 generator 例如:

5. 装饰器

5.1 装饰器就是为已经存在的对象添加额外的功能。

比如1

例如2

其中@语法糖:相当于 run = login(run)

二、上机练习

学生上机完成本节函数式编程任务,教师巡视指导。 三、本课小结

递归函数

掌握lambda表达式


enumerate函数序列化 yield函数(迭代) 装饰器

课后 反思



时间:

课题 教学重点 教学难点 主要教法

了解模块和文件 掌握导入模块 了解什么是模块 了解模块和文件

常用模块一

掌握导入模块:模块搜索路径、import语句导入模块、from 语句导入模块 os模块及方法:系统相关、目录相关、路径相关、文件相关、查询相关

os模块及方法: 讲授演示法+上机操作



一、新课讲授 1. 了解什么是模块

模块是一个包含定义的变量,函数和类的文件,其后缀名是.py。模块可以被其他程序导入,以使用该模块中的变量,函数和类。 2. 了解模块和文件

2.1 if __name__ =="__main__":print ‘xxxx’

2.1.1 如果作为程序文件独立执行,__name__变量值为__main__,则执行if

__name__ =="__main__":后的语句。

2.1.2 如果作为模块导入其他文件,__name__变量值为模块名,则不执行if

__name__ =="__main__":后的语句,在导入进的文件中调用时才对应执行。


3. 掌握导入模块 1.1 模块搜索路径:

import sys

print sys.path 查看以列表显示的搜索路径 例如:

1.2 import语句导入模块

import module 导入模块

import module as module_alias 以别名导入模块 1.3 from 语句导入模块

from modules import names 导入模块的指定属性或方法

4. 掌握os模块常用方法(实现跨平台的操作系统应用接口)

4.1 示正在使用的平台;如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix'

例如:

4.2 用系统命令的方法

4.2.1 os.system():调用操作系统的命令;例如 4.2.2 os.popen()调用系统命令,但结果是返回对象

例如:

4.3 录相关的方法:

4.3.1 getcwd():查看当前目录。即python脚本工作的目录路径;例如: 4.3.2 chdir():切换目录;例如:

4.3.3 os.walk():遍历目录树walk(top,topdown=True,onerror=None) 4.3.4 listdir():列出指定目录下文件及子目录;如:

显示c盘文件和目录:

4.3.5 mkdir():创建目录;如: 4.3.6 makedirs( ):创建多层级目录;如: 4.3.7 rmdir():删除空目录;例如:

4.3.8 removedirs():删除多层级空目录;例如:

4.4 径相关的方法:

4.4.1 :函数返回一个路径的目录名和文件名;例如: 4.4.2 ;如: 4.4.3 ,例如:


4.4.4 ,例如: 4.4.5 ;例如: 4.4.6 ,例如:

4.5 件相关的方法:

4.5.1 remove():删除文件,如: 4.5.2 rename():重命名文件,如

4.6 询相关方法

4.6.1 os.path.exists()函数用来检验给出的路径是否真地存在,如 4.6.2 例如:

4.6.3 islink():是否为链接文件

4.7 件信息相关方法:

4.7.1 stat():查看文件状态信息 4.7.2 getatime():访问时间

4.7.3 getctime() 状态改变时间(例如权限等) 4.7.4 getmtime():修改时间 4.7.5 0L

二、上机练习

学生上机完成本节模块与文件的上机编程任务,教师巡视指导。 三、本课小结

什么是模块 模块和文件

掌握导入模块:模块搜索路径、import语句导入模块、from 语句导入模块 os模块及方法:系统相关、目录相关、路径相关、文件相关、查询相关

课后 反思



时间:

课题

常用模块二




掌握Random模块

教学重点 教学难点 主要教法

掌握MD5加密模块 掌握Time模块 掌握Sys模块

掌握Random模块 掌握MD5加密模块

讲授演示法+上机操作



一、新课讲授 1. random模块 1) random.randint

random.randint()的函数原型为:random.randint(a, b),用于生成一个指定

范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b

print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20

#print random.randint(20, 10) #该语句是错误的。下限必须小于上限。

2) Random.randrange ([start], stop[, step])

从指定范围内,按指定基数递增的集合中 获取一个随机数。如:

random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数

2. Md5加密模块 3. Time模块 4. Sys模块 sys.argv实例

import sys

def readfile(filename): #从文件中读出文件内容 '''''Print a file to the standard output.''' f = file(filename) while True:


line = f.readline() if len(line) == 0: break

print line, # notice comma 分别输出每行内容 f.close()

# Script starts from here if len(sys.argv) < 2:

print 'No action specified.' sys.exit()

if sys.argv[1].startswith('--'): option = sys.argv[1][2:]

# fetch sys.argv[1] but without the first two characters if option == 'version': #当命令行参数为-- version,显示版本号 print 'Version 1.2'

elif option == 'help': #当命令行参数为--help时,显示相关帮助内容 print '''''/

This program prints files to the standard output. Any number of files can be specified. Options include:

--version : Prints the version number --help : Display this help''' else:

print 'Unknown option.' sys.exit() else:

for filename in sys.argv[1:]: #当参数为文件名时,传入readfile,读出其内容 readfile(filename)

二、上机练习

学生上机完成本节Random模块、MD5加密模块、Time模块、Sys模块的上机编程任务,教师巡视指导。 三、本课小结

Random模块 MD5加密模块 Time模块 Sys模块

课后 反思



时间:

课题

错误与异常和正则表达式


教学重点 教学难点 主要教法

了解什么是错误 了解什么是异常

掌握python中的常见异常 掌握检测和处理异常

掌握处理异常的特殊方法:断言、抛出异常、 掌握re模块

掌握python中的常见异常 掌握检测和处理异常

掌握处理异常的特殊方法:断言、抛出异常

讲授演示法+上机操作



一、新课讲授

1. 了解什么是错误

错误分为:语法错误和逻辑错误 2. 了解什么是异常 异常:

python检测到错误(语法错误或者逻辑错误等)时,导致解释器无法继续执行下去,这时候就出现了异常. 异常抛出:

为程序开发人员提供了一种在运行时发现错误,进行恢复处理,继续执行的能力。

3. 掌握python中的常见异常

NameError---------使用一个还未赋予对象的变量 SyntaxError-------语法出错

IOError-----------输入/输出操作失败,基本是无法打开文件 ImportError-------无法导入模块或者包,基本是路径问题 IndentationError--语法错误,代码没有正确的对齐(缩进错误) IndexError--------下标索引超出序列边界 TypeError---------传入的对象类型与要求不符

AttributeError----对象没有这个属性,试图访问一个对象没有的属性或是方法 4. 掌握检测和处理异常

python编程_Python异常机制try: 代码段 except 异常类型,e: 异常处理代码段,如果不知道异常类型,可以使用try: 代码段 except Except,e:异常处理代码段;Except是通用异常类型 try: 语句 -->捕捉这里语句的异常

except Exception1[,reason]: -->异常判断语句 语句 -->异常处理语句

except Exception2[,reason]: -->异常判断语句 语句 -->异常处理语句


except: -->except语句用于捕捉其他异常 语句

else: -->未发生异常时执行

语句

finally: -->无论是否发生异常都执行 语句

5 掌握处理异常的特殊方法 51 断言

语法:assert expression[,reason]

assert是断言的关键字。执行该语句的时候,先判断表达式expression,如果表达式为真,则什么都不做;如果表达式不为真,则抛出异常 1. 了解什么是正则表达式

正则表达式(RE)是由普通字符和特殊符号组成的字符串,描述了这些字符的某种组合方式,因此能按某种模式匹配一组有相似特征的字符串. 2. 了解什么是re模块

Pythonre模块用于实现正则表达式。 3. 掌握正则表达式中的特殊字符

\d 匹配任何数字 \D 匹配非数字字符 \w 匹配字母,数字,下划线

\W 匹配不是字母,数字,下划线的字符 \s 匹配空白字符 \S 匹配不是空白的字符

4. 掌握re模块的常用方法

1) compile()

功能:编译正则表达式

用法:compile(pattern,flags=0) 2) findall()

功能:取得每个()中正则匹配的内容(没有()则整个正则匹配的部分),返回匹配列表

用法:findall(pattern,string[,flags]) 3) match()

匹配:从字符串的开头对模式进行匹配,如果成功,则返回一个对象;如果失败,则返回None


用法:match(pattern,string) 4) search()

搜索:search 会检查字符串任意位置与给定正则表达式的搜索情况。如果搜索到成功的匹配,会返回一个匹配对象,否则返回 None 用法:search(pattern,string) 5) split()

功能:正则表达式作为分隔符把字符串分割为一个列表,返回列表,最多分割 max (默认是分割所有匹配的地方) 用法:split(pattern,string, max=0)

import re a =

print re.split('\.',a)

6) sub()subn()

功能:将某字符串中匹配正则表达式模式的部分进行替换。

subn() sub()一样,但它还返回一个表示替换次数的数字;替换后的字符串和表示替换次数的数字作为一个元组返回。 用法:sub(pattern, repl, string, max=0)

5. 掌握匹配或搜索返回对象的常用的方法

1) group() 返回整个正则表达式匹配的字符串,同group(0)

2) group(i) 正则表达式中第i个“()” 括起来部分正则表达式匹配的内容 3) groups() 返回各个()括起来的正则表达式匹配的字符串组成的元组 4) start() 返回匹配开始的位置 5) end() 返回匹配结束的位置 6) span()返回匹配开始和结束的位置

二、上机练习

学生上机完成本节python中的常见异常、检测和处理异常、处理异常的特殊方法、re模块的上机编程任务,教师巡视指导。 三、本课小结

什么是错误、什么是异常 python中的常见异常 检测和处理异常

处理异常的特殊方法:断言、抛出异常、 re模块


课后 反思



时间:

课题 教学重点 教学难点 主要教法

掌握数据库连接方法 掌握数据库模块方法

与数据库交互

学会数据库操作:增加数据、删除数据、修改数据、查询数据 掌握数据库关闭方法

数据库操作:增加数据、删除数据、修改数据、查询数据 数据库模块方法

讲授演示法+上机操作



一、新课讲授 1. 数据库的连接

mysqldb解决依赖性

yum install python-devel mysql-devel zlib-devel openssl-devel a) 导入模块 b) 建立连接 c) 常见参数 2. 数据库模块方法 commit() 提交 rollback() 回滚

看一个简单的查询示例如下: 2.1 cursor方法执行与返回值

cursor方法提供两类操作:1.执行命令,2.接收返回值 cursor用来执行命令的方法


execute(self, query, args)

//执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数 executemany(self, query, args) //移动到下一个结果集

cursor用来接收返回值的方法 //接收全部的返回结果行. fetchall(self)

//接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据 fetchmany(self, size=None) //返回一条结果行 fetchone(self) 3. 数据库操作

3.1 创建database tables

3.2 如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建EMPLOYEE 代码如下:

#!/usr/bin/python # encoding: utf-8 import MySQLdb # 打开数据库连接

db = MySQLdb.connect("localhost","root","361way","test" ) # 使用cursor()方法获取操作游标 cursor = db.cursor()

# 如果数据表已经存在使用 execute() 方法删除表。 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # 创建数据表SQL语句

sql = """CREATE TABLE EMPLOYEE (

FIRST_NAME? CHAR(20) NOT NULL, LAST_NAME? CHAR(20), AGE INT,

SEX CHAR(1),

INCOME FLOAT )""" cursor.execute(sql) # 关闭数据库连接 db.close()

3.3 数据库插入操作 代码如下:

#!/usr/bin/python # encoding: utf-8 import MySQLdb # 打开数据库连接

db = MySQLdb.connect("localhost","root","361way","test" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句


sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)

VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" try:

# 执行sql语句

cursor.execute(sql) # 提交到数据库执行 db.commit() except:

# Rollback in case there is any error db.rollback() # 关闭数据库连接 db.close()

这里是一个单sql 执行的示例,cursor.executemany的用法感兴趣的读者可以参看相关的aws主机资产管理系统示例。

上例也可以写成通过占位符传参的方式进行执行,如下: 代码如下:

#!/usr/bin/python # encoding: utf-8 import MySQLdb # 打开数据库连接

db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句

sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \ LAST_NAME, AGE, SEX, INCOME) \

VALUES ('%s', '%s', '%d', '%c', '%d' )" % \ ('Mac', 'Mohan', 20, 'M', 2000) try:

# 执行sql语句

cursor.execute(sql) # 提交到数据库执行 db.commit() except:

# 发生错误时回滚 db.rollback() # 关闭数据库连接 db.close()

也可以以变量的方式传递参数,如下: 代码如下:

.................................. user_id = "test"

password = "password123"


con.execute('insert into Login values("%s", "%s")' % \ (user_id, password)) .................................. 3.3 数据库查询操作

以查询EMPLOYEE表中salary(工资)字段大于1000的所有数据为例:

代码如下:

#!/usr/bin/python # encoding: utf-8 import MySQLdb # 打开数据库连接

db = MySQLdb.connect("localhost","root","361way","test" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 查询语句

sql = "SELECT * FROM EMPLOYEE \

WHERE INCOME > '%d'" % (1000) try:

# 执行SQL语句

cursor.execute(sql) # 获取所有记录列表

results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # 打印结果

print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \ (fname, lname, age, sex, income ) except:

print "Error: unable to fecth data" # 关闭数据库连接 db.close()

以上脚本执行结果如下:

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

def input_value():

FIRST_NAME = raw_input("FIRST_NAME_DELET:") sql = """

delete from employee where FIRST_NAME = '%s' """%(FIRST_NAME) return sql

3.4 数据库更新操作


更新操作用于更新数据表的的数据,以下实例将 test表中的 SEX 字段全部修改为 'M'

AGE 字段递增1 代码如下:

# encoding: utf-8 #!/usr/bin/python import MySQLdb # 打开数据库连接

db = MySQLdb.connect("localhost","root","361way","test" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 更新语句

sql = "UPDATE EMPLOYEE SET AGE = AGE + 1

WHERE SEX = '%c'" % ('M') try:

# 执行SQL语句

cursor.execute(sql) # 提交到数据库执行 db.commit() except:

# 发生错误时回滚 db.rollback() # 关闭数据库连接 db.close()

3.5 删除记录语句

sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) try:

# 执行SQL语句

cursor.execute(sql) # 向数据库提交 db.commit() except:

# 发生错误时回滚 db.rollback()

对于支持事务的数据库, Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。 二、上机练习

学生上机完成本节python中的数据库连接、数据库操作、数据库关闭的上机编程任务,教师巡视指导。 三、本课小结

数据库连接 数据库模块方法

数据库操作:增加数据、删除数据、修改数据、查询数据


数据库关闭

课后 反思



时间:

课题

硬盘监控 cpu监控 内存监控 网卡监控 进程监控 硬盘监控 cpu监控

Python实例:监测服务器硬盘、cpu、内存使用率

完成教学任务实例:具体如下

教学重点 内存监控 网卡监控 进程监控

教学难点 主要教法

进程监控

讲授演示法+上机操作



一、学习任务

学习任务:监测服务器硬盘、cpu、内存使用率任务。要求与注意事项

完成教学任务实例:具体如下 硬盘监控 cpu监控 内存监控 网卡监控 进程监控 二、上机练习

学生上机实操: 提示:

Psutil可以获取系统运行的进程、CPU、内存、磁盘、网络等信息,主要应用于系统监控,分析和限制系统资源以及进程的管理,它实现了类似一下ps toplsofpmapwhoiotop等命令功能,并且跨平台支持3264位操作系统,还支持2.43.x版本的python版本

1 监控服务器硬盘使用率


代码如下:

#psutil memory informations 内存使用率

#磁盘使用率

disk = psutil.disk_partitions() for i in disk:

print "磁盘:%s 分区格式:%s"%(i.device,i.fstype) disk_use = psutil.disk_usage(i.device) print "使用了:%sM,空闲:%sM,总共:%sM,使用率

\033[1;31;42m%s%%\033[0m,"%(disk_use.used/1024/1024,disk_use.free/1024/1024,disk_use.total/1024/1024,disk_use.percent) #网络使用率

2 监控服务器cpu使用率

def cpu():

while True:

time.sleep(1)

cpu_liyonglv = psutil.cpu_percent()

print "当前cpu利用率:\033[1;31;42m%s%%\033[0m"%cpu_liyonglv if cpu_liyonglv >15.0: baojing()

def baojing(): i = 0

while i < 10 : i += 1

time.sleep(0.5)

winsound.PlaySound("ALARM8",winsound.SND_ALIAS) cpu()

3 监控服务器内存使用率

memory = psutil.virtual_memory() print memory.used print memory.total

ab = float(memory.used)/float(memory.total)*100 print "%.2f%%"%ab

print psutil.swap_memory() 4 监控服务器网卡使用率

#网络使用率

count = psutil.net_io_counters()

print "发送字节数:\033[1;31;42m%s\033[0mbytes,接收字节数:\033[1;31;42m%s\033[0mbytes,送包数:%s,接收包

%s"%(count.bytes_sent,count.bytes_recv,count.packets_sent,count.packets_recv)

users = psutil.users()

print "当前登录用户:",users[0].name #时间

curent_time = psutil.boot_time()


curent_time_1 = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(curent_time)) print curent_time_1

5 进程监控

脚本如下:

#读取进程pid,名称,可执行路径 pid = psutil.pids()

for k,i in enumerate(pid): try:

proc = psutil.Process(i)

print k,i,"%.2f%%"%(proc.memory_percent()),"%",proc.name(),proc.exe()

except psutil.AccessDenied : print "psutil.AccessDenied"

三、任务展示与评价

学生进行展示,完成互评与老师点评

项目

分值

评价标准

编程技巧 调试过程 搭建合理稳固

小组成员分工及配合方面





自评



得分 组评



师评

20

程序设计

30

运行结果 30 小组配合 20

总体得分

课后 反思

时间:



课题 教学重点 教学难点 主要教法

监控服务模块开发监控 apache服务实例开发制作

socket模块

Socket?类型 Socket?函数 socket编程思路

Socket编程之服务端代码 Socket编程之客户端代码

监控apache服务实例开发制作 socket模块

监控apache服务实例开发制作

监控apache服务实例开发制作

讲授演示法+上机操作




一、新课讲授

SOCKET:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket

Socket的英文原义是“孔”或“插座”。作为BSD UNIX进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信

1. socket模块

Python 提供了两个基本的 socket 模块。

第一个是 Socket,它提供了标准的 BSD Sockets API

第二个是 SocketServer 它提供了服务器中心类,可以简化网络服务器的开发。

Socket?类型

套接字格式:

socket(family,type[,protocal])?使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。

socket类型 socket.AF_UNIX socket.AF_INET socket.AF_INET6 socket.SOCK_STREAM socket.SOCK_DGRAM socket.SOCK_RAW

描述

只能够用于单一的Unix系统进程间通信 服务器之间网络通信 IPv6

流式socket , for TCP 数据报式socket , for UDP

原始套接字,普通的套接字无法处理ICMPIGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。

socket.SOCK_SEQPACKET 创建TCP Socket 创建UDP Socket

可靠的连续数据包服务

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

Socket?函数

注意点:

1TCP发送数据时,已建立好TCP连接,所以不需要指定地址。UDP是面向无连接的,每次发送要指定是发给谁。

2)服务端与客户端不能直接发送列表,元组,字典。需要字符串化repr(data) socket函数 服务端socket函数 s.bind(address) s.listen(backlog)

将套接字绑定到地址,?AF_INET,以元组(host,port)的形式表示地址.

开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。

s.accept()

客户端socket函数 s.connect(address) s.connect_ex(adddress) 公共socket函数

addressaddresshostname,port),如果连接出错,返回socket.error错误。

功能与connect(address)相同,但是成功返回0,失败返回errno的值。 接受TCP连接并返回(conn,address,其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

描述


s.recv(bufsize[,flag]) s.send(string[,flag]) s.sendall(string[,flag]) s.recvfrom(bufsize[.flag])

接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。 发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。

完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。 接受UDP套接字的数据。与recv()类似,但返回值是data,address其中data是包含接收数据的字符串,address是发送数据的套接字地址。

s.sendto(string[,flag],address) s.close() s.getpeername() s.getsockname()

s.setsockopt(level,optname,value) s.getsockopt(level,optname[.buflen]) s.settimeout(timeout)

发送UDP数据。将数据发送到套接字,address是形式为(ipaddrport)的元组,指定远程地址。返回值是发送的字节数。 关闭套接字。

返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。 返回套接字自己的地址。通常是一个元组(ipaddr,port) 设置给定套接字选项的值。 返回套接字选项的值。

设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如connect()

s.gettimeout() s.fileno() s.setblocking(flag)

返回当前超时期的值,单位是秒,如果没有设置超时期,则返回None

返回套接字的文件描述符。

如果flag0,则将套接字设为非阻塞模式,否则将套接字设为阻塞模式(默认值)。非阻塞模式下,如果调用recv()没有发现任何数据,或send()调用无法立即发送数据,那么将引起socket.error异常。

s.makefile() 创建一个与该套接字相关连的文件

二、监控apache服务实例开发制作

socket编程思路

TCP服务端:

1?创建套接字,绑定套接字到本地IP与端口

#socket.socket(socket.AF_INET,socket.SOCK_STREAM), s.bind() 2?开始监听连接?? ? ? ? ? ? ? ? ? #s.listen()

3?进入循环,不断接受客户端的连接请求?? ? ? ? ? ? ?#s.accept() 4?然后接收传来的数据,并发送给对方数据?? ? ? ? #s.recv() , s.sendall() 5?传输完毕后,关闭套接字?? ? ? ? ? ? ? ? ? ? #s.close() TCP客户端:

1?创建套接字,连接远端地址

#socket.socket(socket.AF_INET,socket.SOCK_STREAM), s.connect() 2?连接后发送数据和接收数据?? ? ? ? ?# s.sendall(), s.recv() 3?传输完毕后,关闭套接字?? ? ? ? ?#s.close()

Socket编程之服务端代码(linux)

#!/usr/bin/python

import?socket#socket模块

import?commands#执行系统命令模块 HOST='10.0.0.245' PORT=50007


s=?socket.socket(socket.AF_INET,socket.SOCK_STREAM)#定义socket类型,网络通信,TCP s.bind((HOST,PORT))#套接字绑定的IP与端口 s.listen(1)#开始TCP监听 while?1:

conn,addr=s.accept()???#接受TCP连接,并返回新的套接字与IP地址 print'Connected by',addr????#输出客户端的IP地址 while?1:

data=conn.recv(1024)????#把接收的数据实例化

cmd_status,cmd_result=commands.getstatusoutput(data)???#commands.getstatusoutput执行系统命令(即shell命令),返回两个结果,第一个是状态,成功则为0,第二个是执行成功或失败的输出信息 if?len(cmd_result.strip())?==0:???#如果输出结果长度为0,则告诉客户端完成。此用法针对于创建文件或目录,创建成功不会有输出信息 conn.sendall('Done.') else:

conn.sendall(cmd_result)???#否则就把结果发给对端(即客户端) conn.close()#关闭连接

Socket编程之服务端代码(windows)

#_*_coding:utf-8_*_

__author__ = 'Administrator'

#!/usr/bin/python

import socket #socket模块

import commands,os #执行系统命令模块 HOST='0.0.0.0' PORT=50007

s= socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定义socket类型,网络通信,TCP s.bind((HOST,PORT)) #套接字绑定的IP与端口 s.listen(1) #开始TCP监听 while 1:

conn,addr=s.accept() #接受TCP连接,并返回新的套接字与IP地址

print'Connected by',addr #输出客户端的IP地址 while 1:

data=conn.recv(1024) #把接收的数据实例化

cmd_result=os.popen(data).read()#commands.getstatusoutput(data) #commands.getstatusoutput行系统命令(即shell命令),返回两个结果,第一个是状态,成功则为0,第二个是执行成功或失败的输出信息 print cmd_result

if len(cmd_result) ==0: #如果输出结果长度为0,则告诉客户端完成。此用法针对于创建文件或目录,

创建成功不会有输出信息

conn.sendall('Done.')

else:

conn.sendall(cmd_result) #否则就把结果发给对端(即客户端) conn.close() #关闭连接

Socket编程之客户端代码

#!/usr/bin/python import?socket HOST='10.0.0.245'


PORT=50007

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#定义socket类型,网络通信,TCP s.connect((HOST,PORT))#要连接的IP与端口 while?1:

cmd=raw_input("Please input cmd:")#与人交互,输入命令 s.sendall(cmd)??????#把命令发送给对端 data=s.recv(1024)?????#把接收的数据定义为变量 print?data#输出变量 s.close()#关闭连接 监控apache服务实例: 端口扫描代码如下:

import socket def main():

sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sk.settimeout(1000)

ip=raw_input('请输入要扫描的服务器ip(default:\033[1;34;45m\033[0m)') if ip=='': ip=

s=raw_input('请输入开始端口(default:\033[1;34;45m80\033[0m)') if s=='':

startport=80 else:

startport=int(s)

s=raw_input('请输入结束端口(default:\033[1;34;45m80\033[0m)') if s=='':

endport=80 else:

endport=int(s)

for port in range(startport,endport+1):

print('扫描端口:\033[1;34;45m%d\033[0m...................' % port) try:

sk.connect((ip,port))

print('服务器 \033[1;34;45m%s\033[0m 端口 \033[1;34;45m%d\033[0m OK!' % (ip,port))

except Exception:

print('服务器 \033[1;34;45m%s\033[0m 端口 \033[1;34;45m%d\033[0m is not connected!' % (ip,port)) sk.close()

if __name__ == '__main__': main() 三、任务展示与评价

学生进行展示,完成互评与老师点评

得分

项目 分值 评价标准

自评 组评 师评 20 编程技巧

程序设计

30 调试过程


运行结果 30 小组配合 20

总体得分

搭建合理稳固

小组成员分工及配合方面







课后 反思






本文来源:https://www.dywdw.cn/9788ddb268ec0975f46527d3240c844769eaa0a3.html

相关推荐
推荐阅读