我想做一个函数,它将解码一个单词的方式如下:第一个元音交换与最后一个,第二个与倒数第二等。我想做同样的辅音。最后,它将返回解码后的单词。
这是我的元音代码的开头:
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‘
发布于 2012-12-11 15:01:13
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]发布于 2012-12-11 14:47:40
这里有一种方法,你可以用元音实现你想要的(尽管这有点复杂--别人会有更好的方法)。它所做的是首先从单词(w)创建一个列表,原因是列表是可变的,因此可以在迭代期间修改。vowels列表保存所有元音的索引位置。cutoff是奇怪的一部分--我们将zip vowel列表,它的反面是它自己,它看起来像这样:
In [28]: zip(vowels, vowels[::-1])
Out[28]: [(1, 7), (3, 6), (6, 3), (7, 1)]所以我们有了我们想要切换的索引位置,但正如你所看到的,在中间的元组之后,我们只需将字母交换回来。因此,我们必须指出我们不想使用整个zip列表,所以我们在中间把它去掉(因为奇数个元音只意味着中间的元音用它自己代替自己)。在此基础上,您可以像以前一样交换字母,但这次您使用的是一个可变列表。最后,将所有内容连接成一个字符串。
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'https://stackoverflow.com/questions/13814699
复制相似问题