本帖最后由 sunrise085 于 2019-1-10 11:25 编辑
先解答你的疑问,然后在说一下你的这段程序的问题。
要弄明白这段程序的意思,首先理解find()函数,find()函数返回值是key在字符串中的位置,若没有找到,则返回-1。函数的第二个参数是查询的起点位置,默认为0 。所以在while循环外的时候find函数没写第二个参数,吃为了从字符串的第一个字符开始查询。在while循环中,find函数从查找到key字符的下一个字符开始继续查询,查询一次输出一个位置数a,查到最后肯定会有一次find返回值为-1,那时while循环结束。
再来说说你的程序的问题,这段程序的意思应该是照吃key在字符串中的各个位置,而你的这段程序输出结果是7,19,-1 。正常输出结果应该是3,7,19 。程序的问题是第一次查询的时候没有输出位置近开始了第二次查询,而且最后查询不到的时候仍然进行了位置输出,所以最后输出了一个-1
我帮你改了一下程序,实际上就懂了一下print的位置。
- line='这是一行字,一行用来测试的字,共有3个行字'
- key='行'
- storage=[]
- a=line.find(key)
- while a != -1:
- print(a)
- storage.append(a+1)
- a=line.find(key,a+1)
复制代码
修改后的程序中,在while循环之前先查询一次,若是查到关键字,则会进入循环,先输出第一次查询的结果(3),之后进行第二次查询,每次循环都是先输出上一次查询的结果,然后在进行查询,这样的好处就是最后一次查询无果的时候不会进行输出