我需要创建一个函数来翻译成 Pig Latin。条件:如果一个单词包含2个不同的元音,我们添加'way',否则我们需要将第一个字母移到单词的末尾并添加'ay'。例如:酒> wineway,风> indway。这是任务的复杂版本;简单版本不会造成任何问题。以下是解决任务的代码(这是我用于解决简单(第一个)任务的代码的版本,通过chatGPT传递,以解决任务的第二部分:
def to_pig_latin(word):
vowels = {'a', 'e', 'i', 'o', 'u'}
unique_vowels = set(filter(lambda x: x in vowels, word))
print(unique_vowels)
if len(unique_vowels) >= 2: # Если есть две или более различные гласные
return word + 'way' # Добавляем 'way' в конце
else:
return word[1:] + word[0] + 'ay' # Переносим первую букву в конец и добавляем 'ay'
print(to_pig_latin('apple'))
我不得不求助于 chatGPT,因为精确计算唯一的元音很困难,现在我知道这可以通过数组来完成。
问题如下:代码使用lambda x: x in vowels, word
,我根本不明白它是如何工作的,通过 pythontutor.com 运行代码显示检查单词 word 的每个字母,如果是元音,则返回 True 并它最终出现在数组中。但我不太明白它是如何工作的以及 lambda 函数中的循环是如何工作的。例如,如果你写
vowels = {'a', 'e', 'i', 'o', 'u'}
word = 'apple'
for x in vowels, word:
print(x)
>>{'i', 'a', 'o', 'u', 'e'}
>>apple
x只会取2个值,并且不会遍历每个字母。请帮我弄清楚。
过滤器函数有两个参数:1 - 一个应该返回布尔值(True/False)的函数,2 - 我们迭代该对象。它返回一个 <class 'filter'> 类型的对象,可以对其进行迭代。此迭代器仅包含传递的可迭代对象(第二个参数)中由函数(第一个参数)测试的那些元素,即为它们返回 True。<class 'filter'> 类型的对象变成集合后,因为该对象具有 __iter __ 和 __next __ 属性。在这种情况下,lambda 不用于创建单独的函数,而只是立即描述它,作为过滤器函数的参数。下面的代码与您的类似,但不使用 lambda: