删除元音的递归函数

2024-04-20 12:25:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个递归程序,从非元音单词返回一个字母串。我的代码现在打印出“University”的所有非元音,但永远不会结束。有什么想法吗?在

def removeVowels9(aString):
    if len(aString) == 0:
        return newString
    else:
        newString = aString[1:len(aString) + 1]
        firstLetter = aString[0]
        #print(firstLetter)
        if firstLetter in "aeiouAEIOU":

            return removeVowels9(newString)
        else:
            newString = newString + firstLetter
            print(newString)

            return removeVowels9(newString)

Tags: 代码程序lenreturnif字母单词else
1条回答
网友
1楼 · 发布于 2024-04-20 12:25:34

显然,您永远不会碰到基本情况,因为您将得到一个NameErrornewString尚未定义)。在

为什么?让我们看看你的第三个案例:

else: # starts with consonant
    newString = newString + firstLetter # add first letter to the end?
    return removeVowels9(newString) # repeat

一旦你删除了所有的元音,这只是继续循环辅音,正如你应该从你的输出中看到的:

^{pr2}$

以下是最小的修复:

>>> def removeVowels9(aString):
    if len(aString) == 0:
        return aString # aString, not newString
    else:
        newString = aString[1:len(aString) + 1]
        firstLetter = aString[0]
        #print(firstLetter)
        if firstLetter in "aeiouAEIOU":

            return removeVowels9(newString)
        else:
            return firstLetter + removeVowels9(newString) # add first letter back at start, after processing rest


>>> removeVowels9("University")
'nvrsty'

但这可能要整洁得多:

def remove_vowels(s):
    """Recursively remove vowels from the input."""
    if not s: # empty string
        return s
    elif s[0] in "aeiouAEIOU": # first character is vowel
        return remove_vowels(s[1:]) # skip first character and process rest
    return s[0] + remove_vowels(s[1:]) # return first character and process rest

它可以:

>>> remove_vowels("University")
'nvrsty'

注意变量名等与the style guide的兼容性。。在

相关问题 更多 >