第5章函数和代码复用
5.1 函数的基本使用
[5.1]: A
[5.2]: D
[5.3]: 错误。
[5.4]: 合法,因为Python语言是解释执行,即只要在真正调用函数之前定义函数,都可以进行合法调用。
5.2 函数的参数传递
[5.5]: 在函数定义时,直接为可选参数指定默认值。可选参数必须定义在非可选参数后面,可选参数可以有多个。
[5.6]: 在函数定义时,可变参数通过在参数前增加星号(*)实现。可变数量参数只能在参数列表最后,即它只能有一个。
[5.7]: 返回值是元组类型。
[5.8]: 位置传递:支持可变数量参数,但容易忘记实参的含义;
名称传递:不易忘记实参的含义,但不支持可变数量参数。
[5.9]: 如果函数里没有创建同名变量,则可以直接使用,不需global声明。
5.3 模块3:datetime库的使用
[5.10]:
print( "现在是{0:%Y}年{0:%m}月{0:%d}日{0:%I}:{0:%M}".w()))
[5.11]: 答案不限。举一个例子,输出美式日期格式:
print("{0:%I}:{0:%M} {0:%b} {0:%d} {0:%Y}".w()))
[5.12]: datetime对象可以直接做加减运算,所以可以用这样的方式给程序计时:
1 2 Start = w() ... # 要计时的代码
4 5 6 End = w() Cost = End – Start Print(Cost)
5.4 实例7:七段数码管绘制
[5.13]: 相当于C语言中的三目运算符。
[5.14]: 隐藏画笔的turtle形状。
[5.15]: 对应相应的年月日文字输出。python基础程序设计
5.5 代码复用和模块化设计
[5.16]: 错误,因为”使用函数“是“模块化设计“的必要条件。
[5.17]: 错误,过量使用函数会造成运行时频繁出入栈,浪费系统资源。
[5.18]: 可以出很多,以例子7.1中的情况为例进行阐述。(1) DrawLine与DrawDigit属于紧耦合的关系,DrawLine一旦改变,DrawDigit内部就要做大幅度更改。(2) DrawData与turtle中的penup,pendown方法则属于松耦合的关系,无论起笔落笔的方式如何变化,DrawData 一定是在落笔之后的操作,它与起笔落笔没有关系。
5.6 函数的递归
[5.19]: C
[5.20]: 数学归纳法,递推式等。
[5.21]: 循环由已知推未知,不断向后;递归由未知寻已知,不断向前,递归的实质是出入栈,效率较低。
5.7 实例8:科赫曲线绘制
[5.22]: 改变turtle.speed()中的参数值。
[5.23]: 修改koch()函数,其他部分不变。
2 3 4 5 6 7 8 9 def Koch(size, n)
if n ==0:
turtle.fd(size)
else:
for angle in [0, -60, 120, -60]:            turtle.left(angle)
koch(size/3, n-1)
...
[5.24]: 在设置画笔时加一行turtle.pencolor(颜名称)。
5.8 Python内置函数
[5.25]: 整数type(123),浮点数type(1E10),字符串type('str')。
[5.26]: 字符串可以使用len()得到长度,而整数和浮点数不能得到长度,因为它们都是动态的,没有长度。
[5.27]: 0x400,0x3200, 0x10000。
程序练习题
[5.1]:
1 2 3 4 5 6 7 8 9
10
11 def drawsq(n):
line=3*n+1
for i in range(1,line+1):
if i%3 ==1:
print(n*"+----",end="")            print("+")
else:
print  ("|    "*n,end="")            print("|")
def main():
12
13
14
15    n=eval(input("请输入您要的阶数:"))    drawsq(n)
main()
[5.2]:
1 2 3 4 5 6 7 8 9
10
11
12
13
14
15
16
17 def isOdd(num):
try:
if type(num) == type(0.):
raise TypeError
if num%2 == 0:
return False
else:
return True
except TypeError:
print('这不是一个有效的整数!')
print(isOdd(4))
print(isOdd(3))
print(isOdd(-1))
print(isOdd('str'))
print(isOdd(3.))
[5.3]:
1 2 3 4 5 6 7 8 9 # python 中合法的数字有十进制整数,浮点数,十六进制整数,复数# --------------------------3 也是合法数字
def isNum(num):
np = '+-'
numbers = '.0123456789'
numbersE = '.0123456789+-jJEe'
x16 = '0123456789abcdefABCDEF'
if num[0] in np:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
try:
return isNum(num[1:])
except:
return False
elif num[0] in numbers:
if num[:2] == '0x': # 16进制分支
for i in num[2:]:
if i not in x16:
return False
return True
else:
ele = 0
point = 0
last = ''
numaftere = 0
q = 0
for i in num:
q = q+1
if i not in numbersE:
return False
else:
if point == 0 and i == '.':
point = 1
continue
if point == 1 and (numaftere == 1 or ele == 0) and i in '+-': # 一个数字结束,进入了第二个数字(一般是复数)
point = 0
continue
if ele == 0 and i in 'Ee': # 出现了第一个E,一个浮点数中只能出现一个E
ele = 1
continue
if ele == 1 and i in '0123456789':
numaftere = 1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。