python - “字符串索引超出范围”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
它给出或错误或只是一个空答案
解决方案
您在第一个循环中从0
to迭代,但在最后一次迭代中,您正在解决哪个是.len(s)-1
for
i+1
len(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
循环,但实际上并没有这样做。
推荐阅读
- javascript - jest.mock(中间值)....不是函数
- shell - 更新后立即验证 SSL 证书
- git - 为什么我的 git user.name 和 user.email 被神秘地删除了?
- python - 训练和测试中的 Json 数据拆分
- java - Log4J2 JdbcAppender 没有编写正确的 INSERT 语句
- c++ - 关于c++中运算符+=重载的问题
- java - Java 中带有扫描仪的 Map 和 Hashmap。如何删除条目
- python - For 循环不适用于 driver.find_element_by_xpath 中的 XPATH
- javascript - 子扩展css时父扩展-反应
- cmd - cmd - 仅复制 Windows 上的新文件/文件夹