2.25python笔记 高阶编程

@[TOC](2.25学堂在线python学习笔记 高阶编程)

# 高阶编程

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

基线条件:

当s=''时,返回False

当len(s)=1 且 s==char 时返回True

当len(s)>1 且 s[mid]>char时,返回 isIn(char,s[:mid])

否则 当s[mid]

若 s[mid]==char 返回True

```py

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]

            print(s)

            return isIn(char,s[mid+1:])

        else:

            print(s)

            return True

```

2. 检测两个字符串是否相互为回文结构

注意要检测基线条件,两个字符串不能是单字符

```py

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作用到每个元素上

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

2. 相较于数据结构更加一般化

有了字典我们就有获得字典元素的途径,元素是不可变的。

字典就是纯纯的键和数值的集合

monthNumbers={'jan':1,'feb':2,'mar':3,1:'jan',2:'feb',3:'mar'}

注意,放在冒号:前面的是键,冒号后面是对应的值


3. 提取数据 monthNumber['jan']

4. monthNumebers[2]

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

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

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

8. monthNumbers['Apr']=4就将值4赋予了键'Apr'

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

```py

collect=[]

for e in m:

collect.append(e)

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

```

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

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

# 调试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)

你可能感兴趣的:(2.25python笔记 高阶编程)