我正在尝试创建一个函数,它接受一个单词(大写字母和小写字母)并将每个字符映射到一个新字符。模式是每个元音(AEIOU)依次成为下一个元音(A->;E,E->;I)。对于常量字母,则变为三分之一字母(B->;F,C->;G)
>>>'hello'
'lippu'
>>> 'today'
'xuhec'
>>> 'yesterday'
'ciwxivhec'
我知道我必须创建两个列表:
vowels = ['a', 'e', 'i', 'o', 'u']
constants = ['b', 'c','d','f','g','h','j','k','l','m','n','p', 'q','r', 's','t','v','w','x','y', 'z']
并使用index()函数,检查当前索引并向其中添加3,但之后我就卡住了。你知道吗
对于超出清单范围的案件,信件会循环出现。(x-z和u)
我们可以使用
itertools.cycle
。首先检查哪个类别i
属于vowel
或consonants
(不是常量)。然后从相应的列表中创建一个cycle
,使用while
和next
,直到找到相应的字母。如果是avowel
,我们简单地附加next
值,如果是aconsonant
,我们前进2个位置,然后附加next
值。使用.join()
转换回字符串之后。你知道吗适用于包含边缘字母的单词,
zumba
产生daqfe
要计算映射,可以使用enumerate(获取当前的索引)和模(对于大于列表长度的索引),如下所示:
输出
请注意,词典没有顺序,也就是说您可以按以下方式使用它们:
输出(从dict使用replace\u)
我为edge case定义了两个字典,元音字典和一个字母x/y/z字典来实现包装。我遍历了字符串,如果这个字符是一个特殊的字符,我就使用适当的字典来查找这个单词。但是,如果字符在“w”以下,而不是元音,我只需在其
ord
值(ASCII值)中添加4,并将其转换为char。你知道吗我已经用上面的代码运行了一些测试:
测试
相关问题 更多 >
编程相关推荐