如何用Python交换元音和辅音

时间:2012-12-11 06:16:35

标签: python exchange-server decode

我想创建一个函数,它将按照以下方式解码一个单词:第一个元音与最后一个元音交换,第二个元素与倒数第二个交换等。我想用辅音做同样的事情。最后它将返回解码的单词。

这是我的元音代码的开头:

def decode(w):
    for i in range(len(w)):
        for j in range(len(w[::-1])):
            if (i[0] in 'aeiouy' and j[0] in 'aeiouy'):
                s[i],s[j]=s[j],s[i]
    return w

问题是我不知道如何交换这封信。

例如: 我有一句话:'星期六' 我的功能给了'dyratsua'回来

2 个答案:

答案 0 :(得分:5)

word = 'aerodynamic'

vowels = 'aeiouy'

is_vowel = [x in vowels for x in word]
word_vowels = [x for x in word if x in vowels]
word_consonants = [x for x in word if x not in vowels]

word_vowels.reverse()
word_consonants.reverse()

new_word = [word_vowels.pop(0) if x else word_consonants.pop(0) for x in is_vowel]

答案 1 :(得分:1)

这是你用元音实现你想要的一种方式(虽然它有点复杂 - 其他人会有更好的方式)。它的作用是首先从您的单词(w)创建一个列表,原因是列表是可变的,因此可以在迭代期间进行修改。 vowels列表保存所有元音的索引位置。 cutoff是一个奇怪的部分 - 我们将zip vowel列表与其自身相反,这看起来像这样:

In [28]: zip(vowels, vowels[::-1])
Out[28]: [(1, 7), (3, 6), (6, 3), (7, 1)]

所以我们有我们想要切换的索引位置,但正如您在中间元组之后所看到的那样,我们只需将这些字母交换回来。因此,我们必须指出我们不想使用整个zip ped列表,所以我们在中间切断它(因为奇数个元音只是意味着中间的元音本身会替换它自己) 。从那里开始,你就像以前一样 - 交换字母,但这次你正在使用一个可变列表。最后,将所有内容组合成一个字符串。

In [29]: word = 'saturday'

In [30]: vowels = [index for index, c in enumerate(word) if c in 'aeiouy']

In [31]: w = [c for c in word]

In [32]: cutoff = int(round(len(vowels)/2.0))

In [33]: for i1, i2 in zip(vowels, vowels[::-1])[:cutoff]:
   ....:     w[i1], w[i2] = w[i2], w[i1]
   ....:     
   ....:     

In [34]: ''.join(w)
Out[34]: 'sytardua'