数据结构 python语言描述 读书笔记
第1章 Python基础
模式匹配
# coding:utf-8
# 对集合使用模式匹配
rgbTuple = ((255, 0, 0), '#FF0000')
((r, g, b), hexString) = rgbTuple # 模式匹配
递归
可以跟踪递归的过程,用来调试递归。
# coding:utf-8
def ourSum(lower, upper, margin=0):
"""
page 18: 一种跟踪递归的办法.
:param lower:
:param upper:
:param margin:
:return:
"""
blanks = ' ' * margin
print(blanks+str(lower)+str(upper))
if lower > upper:
print(blanks+str(0))
return 0
else:
result = lower + ourSum(lower + 1, upper,margin+4)
print(blanks+str(result))
return result
print(ourSum(1, 4))
# 14
# 24
# 34
# 44
# 54
# 0
# 4
# 7
# 9
# 10
# 10
嵌套
# coding:utf-8
# page 19
def factorial(n, product=1):
if n == 1:
return product
else:
return factorial(n-1, n * product)
# 递归求阶乘,输入n输出n!。函数不应该有参数product。
# 采用函数嵌套,将参数product隐藏在内部函数中。
def factorial_2(n):
def recurse(n, product=1):
if n == 1:
return product
else:
return factorial(n - 1, n * product)
return recurse(n)
# 书中该例子不恰当,阶乘可以很便捷的实现。书中是为了讲嵌套。
def factorial_3(n):
if n == 1:
return 1
else:
return n*factorial_3(n-1)
print(factorial(4))
print(factorial_2(4))
print(factorial_3(4))
但是这种嵌套,在某些地方很有用。(隐藏参数)
这种将返回值作为参数的递归,也很有用。
# coding:utf-8
# 实现十进制转二进制(r <= 10)并将二进制翻转;
# 比如: 6(110),输出,011
# 递归,将要返回的值作为参数;
# 函数嵌套,隐藏参数;
def dec2bin(dec_num):
def recurse(dec_num, bin_num=''):
if dec_num == 0:
return bin_num
else:
return recurse(dec_num // 2, bin_num + str(dec_num%2))
return recurse(dec_num)
print(dec2bin(6))
# 011
推广到r进制:
# coding:utf-8
# 实现十进制转r进制(r <= 10)并将r进制翻转;
# 比如: 6(二进制为110),输出,011
# 递归,将要返回的值作为参数;
# 函数嵌套,隐藏参数;
def dec2rBase(dec_num, base):
def recurse(dec_num, base, bin_num=''):
if dec_num == 0:
return bin_num
else:
return recurse(dec_num // base, base, bin_num + str(dec_num%base))
return recurse(dec_num, base)
print(dec2rBase(6, 3))
# 02