2016-09-14 100 views
-1

您好,提前致谢。了解索引超出范围Python

我可以让我的代码工作,但我需要帮助了解问题所在。

我正在做一个关于编码的测试问题,并且遇到了这个问题。

返回字符串“code”出现在给定字符串中任何位置的次数,接受'd'的任何字母,所以“cope”和“cooe”计数。

count_code( 'aaacodebbb')→1 count_code( 'codexxcode')→2 count_code( 'cozexxcope')→2

现在经过几次尝试,我得到我的代码工作

def count_code(str): 
    count =0 
    for i in range(len(str)): 
     if str[i:i+2] == 'co' and str[i+3:i+4]=='e': 
      count += 1 
    return count 
print(count_code('codecodecode')) 

^我明白这一点(我可以做正则表达式,但我无法导入)

但我的第一次尝试是这样的:

def count_code(str): 
    count =0 
    for i in range(len(str)): 
     if str[i:i+2] == 'co' and str[i+3]=='e': 
     count += 1 
    return count 
print(count_code('codecodecode')) 

浏览器(该浏览器会保存,编译并运行)给了我一个索引超出范围的错误和测试后,我明白这是为什么。当我= 9 ...我+9 = 12这比字符串更长,所以超出范围我得到它。但是我在Aptana中运行了第二个代码,它运行良好,所以第二个错误代码是不是?

但工作包含str [i + 3:i + 4] =='e'的代码不会超出范围,我不明白为什么。当我到达计数器9时,它会是比字符串长的字符[12:13]。

感谢您的帮助仍然学习基础知识,并希望确保我有一个良好的基础。

回答

0

当你说mystring[x:y],这就是所谓的切片,它有内置的边界检查。

但是一个普通的列表索引,如mystring[99]没有内置的边界检查,所以你得到一个IndexError

+0

感谢这两个答案。两人都帮助了第一名。 – Atropos

0

这只是在Python中切分字符串的一个特性。请注意,

stringvar = 'aaacodebbb' 
stringvar[10000:10001] 

返回空字符串值并且没有错误。

然而,

stringvar[10000] 

返回一个错误。

Python是一种对程序员如果有较少的项目比你问:

如在this question答案解释。例如,如果你要求一个[: - 2]并且只包含一个元素,你会得到一个空列表而不是错误。有时候你会喜欢这个错误,所以你必须意识到这可能会发生。

在这些例子中,你已经给了,有蟒蛇返回一个“索引超出范围”的错误是理想的。