首页 > 解决方案 > “字符串索引超出范围”Python 错误

问题描述

我搜索了其他“字符串索引超出范围”的情况,但它们对我没有用,所以我想在这里寻求帮助。

程序必须这样做:“写一个函数 kth_word(s, k),给定一个字符串 s 和一个整数 k≥ 1,返回字符串 s 中的第 k 个单词。如果 s 少于 k 个单词,它返回空字符串。我们假设 s 的所有字符都是字母和空格。警告:不要使用拆分字符串方法。”

这是我的代码:

def kth_word(s, k):
    new =""
     word_count = 0
     for i in range(0, len(s)):
         if s[i] == " " and s[i+1] != " ":
             word_count+=1
             #try to find how many characters to print until the space
         if word_count == k-1:
             while i!= " " and i<=len(s): #if it is changed to i<len(s), the output is strange and wrong
                 new+=s[i]
                 i=i+1
                 print(new) #check how new is doing, normally works good         
     return new



 print(kth_word('Alea iacta est', 2))

(我尽力以正确的方式实现代码,但我不知道如何)

并且取决于您居住的地方,return new它给出或错误或只是一个空答案

标签: pythonstringindexingrange

解决方案


您在第一个循环中从0to迭代,但在最后一次迭代中,您正在解决哪个是.len(s)-1fori+1len(s)

s[len(s)]是一个 IndexError - 它超出了范围。


此外,您的while循环是一对一的。

while i!= " " and i<=len(s):
    # do something referencing s[i]

你的第一个条件没有意义(i是一个数字,它怎么可能" "?),你的第二个条件引入了与上面相同的错误,其中i最大len(s)并且s[len(s)]是错误。


您的逻辑在这里也有点偏离,因为您将它包装在for已经引用的循环中i。这似乎是一个takewhile循环,但实际上并没有这样做。


推荐阅读