Python字符串_调试_术语列表

一,调试

使用索引来遍历一个序列中的值的时候,弄清楚遍历的开头和结尾很不容易。下面这个函数用来对比两个单词,如果一个是另一个的倒序就返回真,但这个函数代码中有两处错误:

$ cat c.py

#!/bin/python

def is_reverse(word1, word2):

    if len(word1) != len(word2):

       return False

    i = 0

    j = len(word2)

    while j > 0:

          if word1[i] != word2[j]:

             return False

          i = i + 1

          j = j - 1

    return True  

print(is_reverse('pots', 'stop'))

第一个 if 语句是检查两个词的长度是否一样。如果不一样长,当场就返回假。对函数其余部分,我们假设两个单词一样长,这里用到了守卫模式。

i 和 j 都是索引: i从头到尾遍历单词 word1,而j逆向遍历单词word2,如果我们发现两个字母不匹配,就可以立即返回假。如果经过整个循环,所有字母都匹配,就返回真。

如果我们用这个函数来处理单词『pots』和『stop』,打印结果,希望函数返回真,但得到的却是索引超出范围的错误:

$ python3 c.py

Traceback (most recent call last):

  File "c.py", line 13, in <module>

    print(is_reverse('pots', 'stop'))

  File "c.py", line 8, in is_reverse

    if word1[i] != word2[j]:

IndexError: string index out of range

为了改正这个错误,第一步就是在出错的那行之前先输出索引的值:

$ cat c.py

#!/bin/python

def is_reverse(word1, word2):

    if len(word1) != len(word2):

       return False

    i = 0

    j = len(word2)

    while j > 0:

          print(i, j)        #增加这一行,打印索引值

          if word1[i] != word2[j]:

             return False

          i = i + 1

          j = j - 1

    return True  

print(is_reverse('pots', 'stop'))

然后我再次运行函数:

$ python3 c.py

0 4

。。。。。。

IndexError: string index out of range

索引值打印出来了,是0和4,但程序仍然报错索引值超出范围。

第一次循环完毕的时候,j 的值是4,这超出了『pots』这个字符串的范围了(索引值是0-3)。最后一个索引应该是3,但现在打印出的索引值是4,所以报错。而j的初始值应该是 len(word2)-1才对。

$ cat c.py

#!/bin/python

def is_reverse(word1, word2):

    if len(word1) != len(word2):

       return False

    i = 0

    j = len(word2)-1         #增加-1

    while j > 0:

          print(i, j)

          if word1[i] != word2[j]:

             return False

          i = i + 1

          j = j - 1

    return True  

print(is_reverse('pots', 'stop'))

打印:

$ python3 c.py

0 3

1 2

2 1

True

二,术语列表

对象: 一个值能够指代的东西。目前为止,你可以把对象和值暂且作为一码事来理解。

序列: 一系列值的有序排列,每一个值都有一个唯一的整数序号。

元素: 一列数值序列当中的一个值。

索引: 一个整数值,用来指代一个序列中的特定一个元素,比如在字符串里面就指代一个字符。在 Python 里面索引从0开始计数。

切片: 字符串的一部分,通过一个索引区间来取得。

空字符串: 没有字符的字符串,长度为0,用两个单引号表示。

不可更改: 一个序列中所有元素不能被改变的性质。

遍历: 在一个序列中依次对每一个元素进行某种相似运算的过程。

搜索: 一种遍历的模式,找到要找的内容的时候就停止。

计数: 一种用来统计某种东西数量的变量,一般初始化为0,然后逐次递增。也可以使用len函数统计字符串长度作为初始值,而后递减。

方法调用: 调用方法的语句。

可选参数: 一个函数或者方法中有一些参数是可选的,非必需的。
结束。

posted @ 2020-06-21 17:32  巴州夜雨  阅读(152)  评论(0编辑  收藏  举报