【问题标题】:struggling with string characters与字符串字符作斗争
【发布时间】: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


【解决方案1】:

你迭代直到最后一个字符的索引:

for i in range(len(S)):

你有这行:

elif S[i] in vowels and S[i+1] not in vowels:

如果iS的最后一个索引,那么它会在S[i+1]上抛出错误

编辑:你可以使用这个:

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:
            if len(string) == 0 or not string[-1] in vowels: #here I check if length of string is 0 
#in this case I can append letter to it. And also if last letter (`string[-1]`) isn't a vowel,
#then also I can add this letter to string 
                string += S[i]
            else: # if last letter was vowel then we reset string.
                syllables.append(string)
                string = ''
                string += S[i]

        else: 
                string += S[i]
    syllables.append(string)
    return syllables

我们可以进一步简化代码,因为我们在 if-else 的每个块中都有string += S[i]

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 and len(string) > 0 and string[-1] in vowels:
            syllables.append(string)
            string = ''
        string += S[i] 
     syllables.append(string)           
    return syllables

【讨论】:

  • 解决这个问题的方法太多了。你想让我写其中任何一个吗?
  • @alex108,好久没有你的消息了
  • 我知道这听起来很粗鲁,但我认为我应该得到你的认可。
猜你喜欢
  • 2015-05-07
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多