2.25python学习笔记 高阶编程

2.25学堂在线python学习笔记 高阶编程

高阶编程

  1. 利用二分法查找一个字符是否在某个字符串当中

基线条件:
当s=’'时,返回False
当len(s)=1 且 s==char 时返回True
当len(s)>1 且 s[mid]>char时,返回 isIn(char,s[:mid])
否则 当s[mid]<char时,返回isIn(char,s[mid+1:])
若 s[mid]==char 返回True

def isIn(char,s):
    '''
    char:a single character
    s:an alphatical ordered string    
    '''
    if s=='' or len(s)==1:
        print(s)
        return s==char
    mid=int(len(s)/2)    
    if len(s)>1:
        if s[mid]>char:
            print(s)
            return isIn(char,s[:mid])
        elif s[mid]<char:
            print(s)
            return isIn(char,s[mid+1:])
        else:
            print(s)
            return True

  1. 检测两个字符串是否相互为回文结构
    注意要检测基线条件,两个字符串不能是单字符

def semordnilap(str1,str2):
	'''
	str1:输入的第一个字符串
	str2:输入的第二个字符串
	这个函数能够比较并且判别两个字符串
	是否相互为回文结构,并且排除不满足条件的情况
	'''
    def check(str1,str2):
        if len(str1)!=len(str2) or len(str1)==1:
            return False
        else:
            return True
#在这里先对输入的字符串检测
#1.是否是单字符,不满足条件
#2.是否两字符串不等长,不满足条件
    def ss(str1,str2):
        if len(str1)==1:
            return True
        s1=str1[0]
        s2=str2[-1]
        if s1==s2:
            return ss(str1[1:],str2[:-1])
        else:
            return False
    
    
        
    if check(str1,str2)==True:
        return ss(str1,str2)
    else:
        return 'Wrong form!'
        
        
        
#In [42]: semordnilap('abcd','dbcaa')
#Out[42]: 'Wrong form!'
#不等长

#In [43]: semordnilap('a','a')
#Out[43]: 'Wrong form!'
#单字符

#In [44]: semordnilap('abc','cba')
#Out[44]: True

#成功

笔记

字典型变量

  1. 过程映射 map
    map(abs,[1,-2,3,-4])
    将abs作用到每个元素上

把函数当成一级对象对待我们就可以用的更多

  1. 相较于数据结构更加一般化
    有了字典我们就有获得字典元素的途径,元素是不可变的。
    字典就是纯纯的键和数值的集合
    monthNumbers={‘jan’:1,‘feb’:2,‘mar’:3,1:‘jan’,2:‘feb’,3:‘mar’}
    注意,放在冒号:前面的是键,冒号后面是对应的值

  2. 提取数据 monthNumber[‘jan’]

  3. monthNumebers[2]

  4. 很像列表,只不过字典可以是任何元素

  5. 字典仅能通过键来访问,因为没有次序,所以不能通过次序来访问(我们刚才看起来是123的次序,但是是人工给的键值)

  6. 例如monthNumbers[0]就会出错

  7. monthNumbers[‘Apr’]=4就将值4赋予了键’Apr’

  8. 我们可以看到,对字典进行遍历,仅仅取到了键,没有取到值

collect=[]
for e in m:
	collect.append(e)
#我们可以看到,对字典进行遍历,仅仅取到了键,没有取到值

这个例子的意义在于,字典能够被迭代

  1. 键可以相当复杂,可以是元组,但是键必须是不可变的,例如列表就是可变的不能用作键!

调试debugging

重要概念

  1. 测试方法
    以例子测试代码来判断代码是否正确运行

  2. 调试方法
    修正程序的方法

  3. 什么时候调试检错
    3.1我们设计部件的时候都要设计好一块一块的,这样方便锁定错误的发生位置
    3.2写好注释,能够帮助调试的时候理解自己当初写的代码,方便找错。
    3.3在编程序前,先想好,我的输入是什么,输出是什么,这样能够帮助我们锁定好输入输出,减少错误
    3.4良好的注释必须要提示好的假设条件

  4. 测试
    4.1消除语法错误
    4.2消除静态语义错误
    4.3设计好,我们希望的输入输出定义

  5. 测试的目标:证明bug存在
    5.1也可以证明代码没有bug,但是这样很难做,因为我们没办法检测每个输入来测试!
    5.2有些方法能够帮助我们证明没有错误,但是通常只能针对简单的代码检测完美无错!

  6. 测试集
    我们找到一组输入,这组输入很可能能够导致bug,并且很有效。如此来测试代码是否正常运行

(视频6:25)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值