admin 管理员组文章数量: 1087826
2025年1月1日发(作者:sm圈里switch是什么)
第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}".format(()))
[5.11]: 答案不限。举一个例子,输出美式日期格式:
print("{0:%I}:{0:%M} {0:%b} {0:%d} {0:%Y}".format(()))
[5.12]: datetime对象可以直接做加减运算,所以可以用这样的方式给程序计时:
1 Start = ()
2 ... # 要计时的代码
第 28 页/共 79 页
3 ...
4 End = ()
5 Cost = End – Start
6 Print(Cost)
5.4 实例7:七段数码管绘制
[5.13]: 相当于C语言中的三目运算符。
[5.14]: 隐藏画笔的turtle形状。
[5.15]: 对应相应的年月日文字输出。
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]: 改变()中的参数值。
[5.23]: 修改koch()函数,其他部分不变。
第 29 页/共 79 页
1 ...
2 def Koch(size, n)
3 if n ==0:
4 (size)
5 else:
6 for angle in [0, -60, 120, -60]:
7 (angle)
8 koch(size/3, n-1)
9 ...
[5.24]: 在设置画笔时加一行or(颜色名称)。
5.8 Python内置函数
[5.25]: 整数type(123), 浮点数type(1E10),字符串type(
'
str
'
)。
[5.26]: 字符串可以使用len()得到长度,而整数和浮点数不能得到长度,因为它们都是动态
的,没有长度。
[5.27]: 0x400,0x3200, 0x10000。
程序练习题
[5.1]:
1 def drawsq(n):
2 line=3*n+1
3 for i in range(1,line+1):
4 if i%3 ==1:
5 print(n*"+----",end="")
6 print("+")
7 else:
8 print ("| "*n,end="")
9 print("|")
10
11 def main():
第 30 页/共 79 页
12 n=eval(input("请输入您要的阶数:"))
13 drawsq(n)
14
15 main()
[5.2]:
1 def isOdd(num):
2
3
4
5
6
7
8
9
10
11
12 print(isOdd(4))
13 print(isOdd(3))
14 print(isOdd(-1))
15 print(isOdd('str'))
16 print(isOdd(3.))
17
try:
if type(num) == type(0.):
raise TypeError
if num%2 == 0:
return False
else:
return True
except TypeError:
print('这不是一个有效的整数!')
[5.3]:
1 # python 中合法的数字有十进制整数,浮点数,十六进制整数,复数
2 # --------------------------3 也是合法数字
3 def isNum(num):
4
5
6
7
8
9
np = '+-'
numbers = '.'
numbersE = '.+-jJEe'
x16 = 'abcdefABCDEF'
if num[0] in np:
第 31 页/共 79 页
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 '':
numaftere = 1
第 32 页/共 79 页
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
continue
if ele == 1 and numaftere == 1 and i in '+-':
# 针对复数的特例
ele = 0
numaftere = 0
continue
if last =='.' and i in '+-':
return False
elif (point == 1 or last in 'EeJj') and i ==
'.':
# 测试集
print(isNum('Hello'))
print(isNum('+++++++++++++++++++++++++++++++++++++'))
print(isNum('+-+-+-+-+-+-3'))
print(isNum('100'))
return False
elif i in 'Jj' and last in '+-':
return False
elif ele == 1 and i in 'Ee.':
return False
last = i
if last == '.' and i in '+-':
return False
elif (point == 1 or last in 'EeJj') and i == '.':
return False
elif i in 'Jj' and last in '+-.':
return False
elif ele == 1 and i in 'Ee.':
return False
else:
return True
else:
return False
第 33 页/共 79 页
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
print(isNum('10e10'))
print(isNum('10e+10'))
print(isNum('10e10.'))
print(isNum('10e10e'))
print(isNum('10e10+4E10'))
print(isNum('10e'))
print(isNum('10e+1j'))
print(isNum('10e10+1.j'))
print(isNum('1.0e+10-j'))
print(isNum('1.0e+1j-3.e'))
print(isNum('1.0e10+1j-3.e10'))
print(isNum('1.3333'))
print(isNum('.3333'))
print(isNum('.333.3'))
print(isNum('.3333e5'))
print(isNum('12345678'))
print(isNum('0abddf'))
95 print(isNum('0xabddf'))
[5.4]:
1 def multi(*args):
2
3
4
5
6
7
8
9
10
11
12
sum = 1;
count = 1;
for i in args:
if type(i) is type(1) or type(i) is type(1.):
sum *= i
else:
print('第{}项不是一个有效的整数!'.format(count))
return;
count += 1
return sum;
13 print(multi(2,3,1.0,5,4.99))
14 print(multi(2,1,'str'))
第 34 页/共 79 页
15 print(multi())
[5.5]:
1 def isPrime(num):
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import math
try:
if type(num) == type(0.):
raise TypeError
r = int(((num)))
except TypeError:
print('不是一个有效的整数')
return None
if num == 1:
return False
for i in range(2, r+1):
if num % i == 0:
return False
return True
17 print(isPrime(2))
18 print(isPrime(44))
19 print(isPrime('str'))
20 print(isPrime(1))
21 print(isPrime(3.3))
22 print(isPrime(0x18))
[5.6]:
1 from datetime import datetime
2
3 birthday = datetime(1995,1,1,23,00)
4 print(birthday)
5 print('%s年%s月%s日
6 '%(,,))
第 35 页/共 79 页
7 print('{0:%Y}-{0:%m}-{0:%d} {0:%a}'.format(birthday))
8 print('{0:%b}.{0:%d} {0:%Y}'.format(birthday))
9 print('{0:%d}{1:} {0:%b} {0:%Y}'.format(birthday,
10 ['st','nd','rd','th'][%10-1 if %10<=3
11 else 3]))
第 36 页/共 79 页
版权声明:本文标题:Python语言程序设计基础(第2版)第五章答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1735818798a1691673.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论