Python入门笔记 (二)

bg.jpg

def定义函数

1
2
3
4
5
6
7
def fact(n):                    #定义求阶乘函数
if n == 1:
return 1
return n * fact(n - 1)

result = fact(5) #计算结果
print(result) #输出计算结果

递归函数 – 尾递归优化

用递归函数需要注意防止栈溢出。
解决递归调用栈溢出的方法是通过尾递归优化,

1
2
3
4
5
6
7
8
9
10
11
12
def fact(n):                                #尾递归优化
return fact_iter(n, 1) #函数返回值是之前定义的递归函数

def fact_iter(num, product):
if num == 1:
return product
return fact_iter(num - 1, num * product)
print(num, product)


result = fact(1000)
print(result)

迷之递归 – 汉诺塔 (没懂)

1
2
3
4
5
6
7
8
9
def move(n, a, b, c):
if n == 1: #只有一个盘子,所以从a到c
print(a, '-->', c)
else:
move(n-1, a, c, b) #有N个盘子,移动N-1个盘子,a-b
move(1, a, b, c) #将最大的盘子从a--c
move(n-1, b, a, c) #剩下的N-1从b--c

move(3, 'A', 'B', 'C') # 总共三个盘子,ABC三个柱子

高级特性

切片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
L = ['aaa', 'bbb', 'ccc']

# 取出前两个元素

# Method 1
[L[0],L[1]]

# Method 2 -- For
r = []
n = 2
for i in range(n):
r.append(L[i])

print(r)

# Method 3 -- Slice
print(L[0:2]) #取出 0--2

print(L[:2]) #取出 0--2

print(L[-2:]) #取出倒数两个元素

print(L[-2:-1]) #取出倒数第二个

L[a:b:c] #a----索引开始序号
#b----索引结束序号
#c----步长

切片练习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def trim(s):
if not len(s): #非空
return s
if s[0] == ' ': #起始位置位置为空
s = s[1:]
return trim(s) #返回处理后的字符串
elif s[-1] == ' ': #末尾为空
s = s[:-1]
return trim(s)
return s #返回s

if trim('hello ') != 'hello':
print('测试失败!')
elif trim(' hello') != 'hello':
print('测试失败!')
elif trim(' hello ') != 'hello':
print('测试失败!')
elif trim(' hello world ') != 'hello world':
print('测试失败!')
elif trim('') != '':
print('测试失败!')
elif trim(' ') != '':
print('测试失败!')
else:
print('测试成功!')

For循环迭代 练习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def findMinAndMax(L):
if 0 == len(L):
return None, None

min = L[0]
max = L[0]
i = 0
for i in L:
if i > max:
max = i
if i < min:
min = i
return min, max

# 测试
if findMinAndMax([]) != (None, None):
print('测试失败!')
elif findMinAndMax([7]) != (7, 7):
print('测试失败!')
elif findMinAndMax([7, 1]) != (1, 7):
print('测试失败!')
elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):
print('测试失败!')
else:
print('测试成功!')

列表生成式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
list(range(1,11))

M = [x * x for x in range(1, 11)] #列表生成式
print(M)

list = [s.lower() for s in L1]

# 练习
L1 = ['Hello','World', 18, 'Apple', None]
test = isinstance(L1, str)
print(test)

L2 = [s.lower() for s in L1 if isinstance(s, str) == True]


# 测试:
print(L2)
if L2 == ['hello', 'world', 'apple']:
print('测试通过!')
else:
print('测试失败!')
文章目录
  1. 1. def定义函数
  2. 2. 递归函数 – 尾递归优化
  3. 3. 迷之递归 – 汉诺塔 (没懂)
  4. 4. 高级特性
    1. 4.1. 切片
    2. 4.2. 切片练习
    3. 4.3. For循环迭代 练习
    4. 4.4. 列表生成式