python编程(第5课)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#计算该月份的天数 def days(y,m): month_days=[31,28,31,30,31,30,31,31,30,31,30,31] d=month_days[m] if (m==1)and(y%4==0 and (y%100!=0 or y%400==0)): d=d+1 return d
25
layout()函数定义
#将每一个日期填入日历框架 def layout(first,d): frame=[""]*42 if first==0: first=7 j=first-1 for i in range(1,d+1): frame[j]=i j=j+1 return frame
26
printMonth()函数定义
模块的特征
标准化—模块是具有标准尺寸和标准接口的独立功能单

可组装—多个模块可以灵活组合、配置
可替换—更换模块,不影响整个系统 可维护—可以对模块的局部修改、配置,以满足新的要
求,或增加新模块实现新功能
3
模块化程序设计思想
模块化编程
将软件分解为若干独立的、可替换的、具有预定功能的模块, 每个模块实现一个功能,各模块通过接口组合在一起,形成最终程 序。
19
firstDay()函数定义
#计算year年的1月1日是星期几
def firstDay(year): k=leapYear(year) n=(year-1900)*365+k return (n+1)%7
20
printCalendar()函数定义
#打印日历 def printCalendar(year,w): print("\n") print("====================",year,"=============== ======") first=w for month in range(12): heading(month) first=oneMonth(year,month,first)
13
例:打印公元某年的年历(1900年后至今)。
自顶而下的程序设计--顶层设计
自 顶 向 下 , 逐 步 求 精
Main()
year year w year w
getyear()
firstday()
printCalender()
输入年份
计算year年1 月1日是星期几
输出年历
14
自顶而下的程序设计—第二层设计
Python编程(第5课)
焦福菊 2014
程序设计方法
结构化程序设计
代码 程序 函数 模块
面向对象程序设计
对象的概念 类 继承
2
复杂系统设计方法—关注点分离
模块化设计
模块化设计与建造就是在对产品功能分析的基础上,将 产品分解成若干个功能模块,预制好的模块再进行组装,形 成最终产品。如:建筑、船舶制造、现代电子产品
思考:
如果 想用任意 字符作为 树冠。怎 么修改呢?
8
函数的数据传递—参数
形式参数
– 函数定义时指定 – 形式参数是一组用逗号分隔的变量
实际参数
– 函数调用时传递给函数的值
– 可以是值、变量或表达式
– 必须与形式参数的个数相同
9
修改前面的例子
def treetop(ch,width): for i in range(1,width+1,2): print(int(((width-i)/2))*" "+i*ch) def tree(): n=input("输入组成树冠的字符:") m=int(input("输入树的宽度(奇数):")) treetop(n,m) treetop(n,m) treetrunk(m) def treetrunk(width): for i in range(1,width,2): print(int((width/2))*" "+"#") tree()
显然,打印 上下两部分 树冠的代码 是完全相同 的。如何
简化呢?
5
函数
函数是一个子程序 函数是一个名字代表的程序序列 在程序中引用函数名就可以执行函数中的 代码 函数要先定义,再调用。在调用函数时, 可以将函数看做一个变量与其他的变量或 常量组成表达式 函数可以返回值或返回none
6
函数的定义
11
全局变量
用于多个函数共同操作 一个变量的情况
函数的返回值
def leapyear(y): leap="不是" if y%400==0: leap="是" elif y%100==0: leap="不是" elif y%4==0: leap="是" else: leap="不是" return(leap) def main(): sum=0 for i in range(2000,2015): year=leapyear(i) if year=="是": sum=sum+1 print(i ,year,"闰年!\n") print("2000-2014总共",sum,"个闰年!") main()
23
Biblioteka Baidu
oneMonth()函数定义
#计算2月-12月的1日是星期几 def oneMonth(year,month,first): d=days(year,month) frame=layout(first,d) printMonth(frame) return (first+d)%7
24
days()函数定义
#打印框架 def printMonth(frame): for i in range(42): print(" %3s"%frame[i],end="") if(i+1)%7==0: print("\n")
27
模块化编程的优点
– 易设计—复杂问题简单化,便于从抽象的模块功能角度
而非具体实现角度去理解软件系统
– 易实现—适合团队开发
– 易测试—每个模块开发、独立测试,然后组装整体测试
– 易维护—需要修改系统或扩展功能时,只需修改或添加
模块
– 可重用—不用修改就可以用于其他程序的开发
4
代码->程序
例:用字符画树的程序
22
heading()函数定义
#打印每个月的标题部分 def heading(m): months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug", "Sept","Oct","Nov","Dec"] print("\n") print(" "),(months[m]) print(" Mon Tue Wed Thu Fri Sat Sun")
21
leapYear()函数定义
#计算1900到year年的闰年个数 def leapYear(year): count=0 for y in range(1900,year): if y%4==0 and (y%100!=0 or y%400==0): count=count+1 return int(count)
自 顶 向 下 , 逐 步 求 精
leapyears
heading
oneMonth
判断是否为闰年
打印日历框架
打印每月日历
15
自顶而下的程序设计—第三层设计
自 顶 向 下 , 逐 步 求 精
leapyears
heading
oneMonth
days
layout
printMonth
计算该月份的天数
不知该月每一天在 框架中的位置
print(' *') print(' ***') print(' *****') print(' *******') print(' *') print(' ***') print(' *****') print(' *******') print(' #') print(' #') print(' #')
输出日历
16
自顶而下的程序设计—第四层设计
自 顶 向 下 , 逐 步 求 精
leapyears
heading
oneMonth
days
layout
printMonth
计算该月份的天数
不知该月每一天在 框架中的位置
输出日历
17
main()函数定义
#主函数
def main(): year=getYear() w=firstDay(year) printCalendar(year,w)
函数名 形式参数
def function_name(arg1,arg2[,…]): statement [return value]
函数中的 语句序列
return语句可选, 返回函数值
7
举例
例:修改打印字符树的程序
def treetop(): print(‘ *’) print(‘ ***’) print(‘ *****’) print(‘ ******’) def tree() treetop() treetop() print(‘ #’) print(‘ #’) print(‘ #’) tree()
18
getYear()函数定义
#得到键盘上输入的年份
def getYear(): print("This program prints the calendar of a given year.") year=input("Please enter a year(after 1900):") return int(year)
判断是否为闰年的函数
主函数: 计算有多少个闰年并打印
执行主函数
12
自顶向下的程序设计
输入:公元年份year 输出:year年的年历 输入与输出的关联:根据year可以计算出相对 于1900年1月1日(星期一)的过去了多少天, 按7天循环就可以得知year年1月1日是星期几, 从而得到年历。 显然有些复杂。如何设计呢?
函数定义,形式参数
函数调用,实际参数
函数定义,形式参数
10
局部变量与全局变量
局部变量
局部变量只作用于函数 内部
可以与外部变量同名, 不会影响外部变量的值 def f(): y=0 global x x=x+1 y=y+100 print("in 'f()' x is ",x,"\n","the y is ",y) def g(): y=100 global x x=x-1 y=y-1 print("in 'g()' x is : ",x,"\n","the y is ",y) x=0 f() g()
相关文档
最新文档