【发布时间】:2021-02-21 14:59:19
【问题描述】:
我正在尝试解决有关 Python 中字符串的练习。练习说:编写一个函数,它接受一个字符串单词并返回一个包含给定单词的声音元素的字符串列表。
声音元素是 1 个或多个辅音后跟 1 个或多个元音的最大序列。换句话说,我应该遍历一串字符并在每次元音后跟辅音时将其拆分。
例子:
输入中给出的以下字符串:
S = 'unconditionally'
应该返回以下列表
L = ['u','nco','ndi','tio','na','lly']
为了解题,我写了如下函数:
def split_words(S):
string = ''
syllables = []
vowels = ['a','e','i','o','u','j','y']
for i in range(len(S)):
if S[i] not in vowels:
string += S[i]
elif S[i] in vowels and S[i+1] not in vowels:
string += S[i]
syllables.append(string)
string = ''
return syllables
应该可以解决。问题是每次运行程序时都会出现索引超出范围的错误。我知道问题出在我不知道如何摆脱的 elif 语句中。
有没有什么方法可以在不导入任何外部库的情况下解决这个问题?
任何帮助将不胜感激
【问题讨论】:
-
当
i到达列表的最后一个索引时,S[i+1]将索引一个超出列表末尾S的额外值。那是你的问题。在检查该索引之前,您需要首先确保您不在列表的最后。 -
是的,我知道。事实上,我尝试使用 S[i-1] 但我无法解决它
-
好的,那么您应该在帖子中提到这一点,因为现在您有一个评论和一个答案指出了这一点,这意味着我们都在浪费时间,因为您没有包含您的信息已经知道了。
-
不是最好但很简单:最初将“x”附加到 S 并让我遍历“range(len(S) - 1)”。
-
@RandomDavis 我知道。对不起
标签: python