Python小白学习-03【抽象】

目录

1 抽象和结构

2 例子

3 升华


 


1 抽象和结构

抽象可以节省很多工作,实际上它的作用还要更大。它是使得计算机程序可以让人读懂的关键(这也是最基本的要求,不管是读还是写程序)

自己的理解:抽象,就是将实现一个功能的一系列的操作先简明的说出来,之后具体的实现,再用具体的函数去表达。

书中的小结:抽象是隐藏多余细节的艺术。定义处理细节的函数可以让程序更抽象。

2 例子

编写一个存储名字并且能用名字、中间名或者姓查找联系人的程序:

(1)考虑采用什么数据结构;

(2)抽象为几个函数:初始化函数+获得名字+存储名字。

知识点:

(1)数据结构中,字典中的字典,如下所示:

data = {'first':{'Li':[Li Jing Yi]},
        'middle':{'Jing':[Li Jing Yi]},
        'last':{'Yi':[Li Jing yi]}
}

(2)字符串的split()函数:字符串分隔为列表;

代码:

#初始化
def init(data):
    data['first']={}
    data['middle']={}
    data['last']={}

#获得名字
def GetName(data,label,name):
    return data[label].get(name)

#存储名字
def storage(data,Full_name):
    labels = 'first','middle','last'
    #labels =['first','middle','last']也是ok的
    names = Full_name.split()#将字符串切片为列表
    for label,name in zip(labels,names):
        people=GetName(data,label,name)
        if people:
            pass
            # people.append(Full_name)#Python简明教程上用的是这样一句话,
            # 但我觉得这句话没用
        else:
            data[label][name]=[Full_name]
            #data[label][name]=Full_name#也是ok的,相当于value是string类型

while True:
    Myname={}
    init(Myname)
    try:
        Full_name=input("请输入名字\n")
        storage(Myname,Full_name)
        print(GetName(Myname,'last','Yi'))
    finally:
        break

3 升华

上面的例子中,参数可以实现一次多输入。实现如下:

#初始化
def init(data):
     data['first']={}
     data['middle']={}
     data['last']={}

#查找名字
def lookup(data,label,name):
    return data[label].get(name)

#存储名字
def store(data,*full_names):
    for full_name in full_names:
        names=full_name.split()
        labels=['first','middle','last']
        for label,name in zip(labels,names):
            people=lookup(data,label,name)
            if people:
                people.append(full_name)
            else:
                data[label][name]=[full_name]#使用list可以进行data的append
    print(data)


Myname={}
init(Myname)
store(Myname,'Li Jing Yi','Li hao yuan')
print(lookup(Myname,'first','Li'))

4 递归

递归的关键:将问题分解为小部分,递归不能永远继续下去,因为其总是以最小可能性问题结束,而这些问题有存储在基本上实例中。

4.1 阶乘的实现

#阶乘的普通实现
def factorial(n):
    result = n
    for i in range(1,n):
        print(i)
        result *= i
    return result

#阶乘的递归实现
def factorial(n):
    if n==1:
        return 1
    else:
        return n*factorial(n-1)
print(factorial(5))

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值