python - 反元音程序问题

标签 python

def anti_vowel(text):
    new = ''
    for char in text:
        if char in "aeiou" or char in "AEIOU":
            ala = text.replace(char, '')
    new = new + ala
    return new
print anti_vowel("Hey look Words!")

它返回“Hey lk Wrds!”这意味着该函数以某种方式完全忽略了“e”。

最佳答案

def anti_vowel(text):
    new = ''
    for char in text:
        if char in "aeiou" or char in "AEIOU":
            ala = text.replace(char, '')

让我们停在这里看看会发生什么:

对于消息中的每个字符,如果该字符是元音字母,您将复制一份删除那个元音字母 的原始文本。然后你将它分配给 ala...但是?

    new = new + ala
    return new

缩进意味着 new = new + ala 只运行一次 - 在你的 for 循环结束后。在您的示例数据“Hey look Words!”中,您看到的最后一个元音是“o”,因此 ala 包含一个没有“o”的字符串(但所有其他元音保持不变):

print anti_vowel("Hey look Words!")   # => "Hey lk Wrds!"
print anti_vowel("aeiouAEIOU!")       # => "aeiouAEIO!"

(您的测试字符串只有两个元音字符,'e' 和 'o',这意味着您看不出“为什么没有删除 e?”和“为什么 只有 o 被移除了?”,这本来可以更明显地指示问题!)

直接修复你的代码看起来像

def anti_vowel(text):
    result = text
    for char in text:
        if char in "aeiouAEIOU":
            result = result.replace(char, '')
    return result

但更 Pythonic 的方法是:

# a set allows very fast look-ups
VOWELS = set("aeiouAEIOU")

def no_vowels(s):
    # keep every character that is not a vowel
    return "".join(ch for ch in s if ch not in VOWELS)

print(no_vowels("Look Ma, no vowels!"))  # => "Lk M, n vwls!"

关于python - 反元音程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22550653/

相关文章:

Python:使用 zip() 将列表的 super 列表解压缩为单独的列表

python - 计算多个唯一行的结果

python - 如何在多个 github 存储库之间共享 Sphinx 文档主题?

python - 有什么办法可以对本地 Appengine 开发服务器实现 30 秒限制?

python - 使用 numpy 获取二维索引的子集

python - 我需要如何配置 Keras 模型来预测图像?

python - 使用索引和列作为 X、Y 和值作为 Z,将 pandas DataFrame 转换为 3d 图形?

python - 为什么求和和整合给出不同的结果?

python - 从python运行另一个程序时如何在最新的spyder中关闭 'new command window spawning'

python - 使用openpyxl Python读取具有unicode名称的excel文件