找出一个单词中是否有一半的字母是元音

2024-10-01 15:37:04 发布

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

就像书名说的,我想知道元音是否至少是单词中字母数量的一半。在

这是我的代码:

def mostlyVowels(words):
    vowel = 'aAeEiIoOuU'
    words.split()
    ans =  []
    for word in words:
        for letter in word:
            isvowel = 0
            if letter in vowel:
                isvowel += 1
        if isvowel > ((len(word))/2):
            ans.append(word)
    return ans

# call mostlyvowels
words = 'Our lives begin to end the day we become silent about things that matter'
print(mostlyVowels(words))

所以我应该得到的是['我们的','关于'],但我得到的是:

^{pr2}$

谢谢你抽出时间来帮忙


Tags: infor数量if字母单词wordwords
3条回答

实际上,我建议不要使用除法来做这件事,如果只是为了向我不得不参加的自动机理论课致敬,我不得不用磁带来跟踪符号:

def mostlyVowels(words):
  acc = []
  for word in words.split():
    i = 0
    for char in word.lower():
      if char in 'aeiou': i += 1
      else:               i -= 1
    if i > 0: acc.append(word)
  return acc

非元音只是简单地减少了单词的“主要元音”,并且阈值为1或更高:p

为了好玩,以下是Darren Ringer使用列表(in)理解将算法转换为一行代码:

#! /usr/bin/env python

def mostlyVowels(words):
    return [w for w in words.split() if sum((-1, 1)[c in 'aeiou'] for c in w.lower()) >= 0]


def main():
    words = 'Our lives begin to end the day we become silent about things that matter'
    print(mostlyVowels(words))


if __name__ == '__main__':
    main()

输出

^{pr2}$

我修改了测试,让它包括了单词,至少有一半字母是元音。在

您自己的代码正在将单词中每个字母的is元音重置为零,在第二个for循环之前而不是之后设置isvowel = 0,或者可以使用sum来缩短代码:

def mostlyVowels(words):
    vowel = {"A","e","E","i","I","o","O","u","U"}
    final = []
    for word in words.split():
        if sum(x in vowel for x in word) >= len(word)/2:
            final.append(word)
    return final

相关问题 更多 >

    热门问题