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 页


本文标签: 函数 参数 可变