在python中将字母移动一定值

时间:2018-01-30 05:47:47

标签: python

我有一个编码文本文件,通过简单的字母移位编码。我现在已将其中的信息分为两个列表。采用以下格式:

list_1 =['fjsir', 'vnjk', 'eioafnvjf', 'einbvfbj']
list_2 =[3,4,7,1]

第二个列表是字母表中应该移动多少个位置。例如。如果列表1中的索引0具有'fjsir'并且它在list_2中的对应索引是3,那么它将解码为'cfpeo'。我不确定如何在python中匹配这些。

3 个答案:

答案 0 :(得分:2)

将元素移到左侧:

chr(ord(char) - n)

使用ord()获取char的整数表示,并从此数字中减去n。然后使用chr()将其转换回字符。

该功能可能如下所示:

def shift(s, n):
    return ''.join(chr(ord(char) - n) for char in s)

使用zip()可以很好地调用哪个:

list_1 =['fjsir', 'vnjk', 'eioafnvjf', 'einbvfbj']
list_2 =[3,4,7,1]

for x, y in zip(list_1, list_2):
    print(shift(x, y))

并给出了解码:

cgpfo
rjfg
^bhZ_goc_
dhmaueai

此外,如果您只希望解码只包含英文字母中的字母,则可以使用模数函数%代替:

 def shift(s, n):
     return ''.join(chr((ord(char) - 97 - n) % 26 + 97) for char in s)

只返回字母的解码:

cgpfo
rjfg
xbhtygocy
dhmaueai

答案 1 :(得分:2)

这是一个简单的解决方案:

alphabets = 'abcdefghijklmnopqrstuvwxyz'
list_1 = ['fjsir', 'vnjk', 'eioafnvjf', 'einbvfbj']
list_2 = [3,4,7,1]
final_list = []
for index,original_word in enumerate(list_1):
    new_word = ''
    for letter in original_word:
        if letter in alphabets:
            index_val = alphabets.index(letter) - list_2[index]
            new_word += alphabets[index_val]
    final_list.append(new_word)
print final_list

输出: [' cgpfo',' rjfg',' xbhtygocy',' dhmaueai']

答案 2 :(得分:1)

您可以使用ord()将字符转换为数字,并将数字转换为chr()的字符。移位功能可能如下所示:

def shift_string(inString, inOffset):
    return "".join([chr(ord(x) + inOffset) for x in inString])

从列表中访问数组元素留给读者。 ;)

注意:这个简单的版本可能会产生不需要的字符。您可以简单地使用模数函数来保持ASCII范围。

def shift_string(inString, inOffset):
    return "".join([chr(((ord(x) - ord(' ') + inOffset) % 95) + ord(' ')) for x in inString])

如果您的有效字符集更复杂(例如字母),您应该为字符转换编写一个特殊函数。