功能:返回一串非元音字母

Function: Returning a string of nonvowels

所以假设我已经定义了一个名为 vowel_call 的函数,它只从字符串中提取元音,我如何将这个函数集成到另一个名为 nonvowels 的函数中以 return 一串只有一般字符串中的非元音字母?

def nonvowels (word: str) -> str:
   result = ''
   for x in word:
    if vowel_call(x) == False:
        result = result + x
        return result
assert nonvowels('book') == 'bk'
assert nonvowels('giraffe') == 'grff'

我尝试了没有断言语句的代码,Python 只返回短语的第一个非元音字母:(nonvowels('genie') = 'g'),但不返回 'gn'。使用 assert 语句,会产生错误。我应该怎么做才能修复代码?

你的函数 returns 太早了。将 return 语句的缩进减少到循环

之外

您的 return 语句是否包含在您的 if 语句中?如果是,那么 return 只有第一个非元音字母会不会是你的问题? vowel_call 方法 return 仅当字母不是元音时才为假吗?查看第一个建议,如果这不是您的问题,请告诉我。

第一次 if vowel_call(x) == False 计算结果为 True 时,您 return 在循环内,在检查完循环中的每个字符后,您需要将 return 移出循环字符串。

def nonvowels (word: str) -> str:
   result = ''
   for x in word:
       if vowel_call(x) == False:
           result = result + x
   return result # outside loop

但最简单的方法是 return 列表理解str.join:

def nonvowels (word: str) -> str:
   return "".join([x for x in word if not vowel_call(x)])
You can also with set operations find what you need.

sentence = 'It is a nice day!'

def find_vowels(s,):
import re
s = s.lower()
return set(re.findall(r'[aoiue]',s))

>>>find_vowels(sentence)
{'a', 'e', 'i'}

s_sentence = set(sentence.lower())

>>>non_vowels = s_sentence - find_vowels(sentence) - set(string.punctuation) - set(string.whitespace)

{'c', 'y', 'n', 't', 's', 'd'}