PY4E练习6.1问题:反向遍历字符串代码为何触发索引越界?
反向遍历字符串的while循环索引越界问题解析
错误原因
你的代码里循环条件index < len(fruit)逻辑有误。以fruit = "apple"为例,len(fruit)等于5,你从index = -1开始,每次循环索引减1,依次变成-2、-3、-4、-5——这时候还满足index < 5的条件,循环会继续执行,当index变成-6时,fruit[-6]超出了字符串的负索引范围(Python字符串负索引的最小值是-len(fruit),也就是-5),所以触发了string index out of range错误。
你之前尝试的index > len(fruit)之所以没有输出,是因为初始索引-1远小于5,循环条件从一开始就不成立,循环根本没执行。
解决方法
有两种简单的修复方式:
方法一:修正负索引的循环条件
让索引不小于字符串的最小负索引值:
fruit = "apple" index = -1 while index >= -len(fruit): letter = fruit[index] print(letter) index = index - 1
当index等于-len(fruit)(也就是-5)时,刚好取到第一个字符'a',执行后索引变成-6,不满足>= -5的条件,循环终止,不会触发越界。
方法二:改用正索引反向遍历
从最后一个正索引(len(fruit)-1)开始,遍历到索引0:
fruit = "apple" index = len(fruit) - 1 while index >= 0: letter = fruit[index] print(letter) index = index - 1
正索引的有效范围是0到len(fruit)-1,当索引减到-1时,循环条件不成立,自然终止,不会访问无效索引。
内容的提问来源于stack exchange,提问作者getuser.name
相关产品推荐
相关产品推荐

