<p>以下几点可能会有所帮助:</p>
<p><code>string</code>模块中的<code>ascii_lowercase</code>是一个预定义字符串,包含所有小写字母字符:</p>
<pre><code>>>> from string import ascii_lowercase
>>> ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>>
</code></pre>
<p>我们可以通过创建一组元音并计算元音与所有字符之间的差异来生成所有辅音的集合:</p>
<pre><code>from string import ascii_lowercase as alphabet
vowels = set("aeiou")
consonants = set(alphabet) ^ vowels
print(consonants)
</code></pre>
<p>输出:</p>
<pre><code>{'c', 's', 'q', 'm', 'g', 'd', 'y', 'l', 'b', 'k', 't', 'j', 'r', 'p', 'h', 'v', 'n', 'w', 'z', 'f', 'x'}
>>>
</code></pre>
<p>因为这是一个集合,所以没有内在的顺序,但这并不重要。如果我们想知道给定的字符是辅音还是元音,我们只需检查对应集合的成员身份(可以对列表执行相同的操作,但集合将是首选的数据结构)</p>
<p>无论是否为<code>vowels</code>和<code>consonants</code>使用列表或集合,都可以通过简单地检查成员身份(检查字符是否在集合中)来简化代码:</p>
<pre><code>if word[0] in vowels:
# The first letter is a vowel
elif word[0] in consonants:
# The first letter is a consonant
</code></pre>
<p>如果您事先知道<code>word</code>只包含小写字母(没有特殊符号、数字、大写字母等),则可以进一步简化:</p>
<pre><code>if word[0] in vowels:
# The first letter is a vowel
else:
# If it's not a vowel, it must be a consonant
</code></pre>
<p>然而,如果你仔细想想,你根本不需要检查第一个字母是否是元音。您已经知道将在最后一个字符串的末尾添加<code>"ay"</code>,不管第一个字母是元音还是辅音-因此,您只需要检查第一个字母是否是辅音</p>
<p>使用到目前为止的一切,我将得到以下伪代码:</p>
<pre><code>def to_pig_latin(word):
from string import ascii_lowercase as alphabet
vowels = set("aeiou")
consonants = set(alphabet) ^ vowels
if word[0] in consonants:
# Do something
return ... + "ay"
</code></pre>
<p>我已经重命名了函数<code>to_pig_latin</code>,因为蛇壳是首选的,并且在函数名前面加上<code>to</code>表示您正在翻译/转换某些内容。我还将<code>vowels</code>和<code>consonants</code>的创建移到了函数中,只是因为没有理由将它放在函数之外,这样做更有趣</p>