Py学习  »  Python

字符串索引超出范围-基于Python逻辑的错误?

OlaJ • 2 年前 • 1104 次点击  
def double_chars(word):
    for j in range(len(word)):
        if word[j] == word[j:j+1]:
            chars_count = chars_count + 1
    return chars_count

test_word = "Hello..world!"
print(double_chars(test_word))


Error: if word[j] == word[j+1]:
IndexError: string index out of range

我总是让这个函数的字符串索引超出范围。我尝试了不同的索引和切片方法。

我试图返回具有两个字符的字符串中的字符计数,例如: bell--rung --> "ll" = 1 ,和“-”=1。因此数到2。

我在代码中做错什么了吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131359
 
1104 次点击  
文章 [ 1 ]  |  最新文章 2 年前
azro
Reply   •   1 楼
azro    2 年前

问题是这个范围是从 0 (包含)到字符串的长度(独占),这对于索引来说是可以的,因为字符串是基于0的索引,但您不仅访问当前索引,还访问下一个索引,所以当达到 j 这个 [j+1] 是不是太远了

def double_chars(word):
    chars_count = 0
    for j in range(len(word) - 1):
        if word[j] == word[j + 1]:
            chars_count += 1
    return chars_count
0 1. 2. 3. 4. 5. 6. 7. 8. 9 10 11
x[j] H E L L o . W o R L D
x[j+1] E L L o . . W o R L D !

一个班轮提案,另一个有 zip

def double_chars(word):
    return sum(1 for j in range(len(word) - 1) if word[j] == word[j + 1])

def double_chars(word):
    return sum(1 for ch_curr, ch_next in zip(word, word[1:]) if ch_curr == ch_next)