我已经搜索过其他“字符串索引超出范围”的情况,但它们对我没有帮助,所以我想在这里搜索帮助。在
程序必须这样做:“编写一个函数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
它给出了一个错误或者一个空答案
因此
groupby
/islice
中的itertools
应该可以工作:我们通过将
StopIteration
中的可选参数设置为''
来处理StopIteration
错误。在不允许使用
str.split
。如果可以的话,答案就是:但是如果你能写一个函数来做
str.split
所做的事情,你可以改为调用它。当然,这也说明您理解了任务测试的所有内容,如何在字符串上循环,执行逐字符操作,等等。在您可以编写一个只包含Python特性的版本,这些特性通常在第一周就已经教授过了:
^{pr2}$如果您了解其他Python功能,可以通过以下几种方式改进:
current
构建为list
,而不是str
和{append
调用改为yield
,这样它就可以懒洋洋地拆分字符串(甚至比str.split
更好)。在str.find
或str.index
或re.search
查找下一个空格,而不是逐个字符搜索。在itertools
中找到该函数。在str.split
中缺少的所有功能,例如传递自定义分隔符而不是打断任何空白的功能。在但我认为即使是基本版本,假设你理解它并能解释它的工作原理,也足以让你的作业得个A。在
而且,更重要的是,你在练习解决问题的最佳方法:把它们简化成更简单的问题。
split
实际上比kth_word
更容易写,但是一旦你写了split
,kth_word
就变得微不足道了。在在第一个},在最后一次迭代中,它是
for
循环中,从0
迭代到len(s)-1
,但是您正在寻址{len(s)
。在s[len(s)]
是一个索引器——它超出了界限。在另外,您的
while
循环将被关闭一个。在你的第一个条件没有意义(}是一个错误。在
i
是一个数字,怎么可能是" "
?)你的第二个错误与上述相同,其中i
最大值为len(s)
,而{您的逻辑在这里也有点偏离,因为您将它包装在
for
循环中,该循环已经在引用i
。这看起来是一个takewhile
循环,但实际上并不是这样。在相关问题 更多 >
编程相关推荐