我正在尝试根据元组列表检查字符串中的字符。然后将该字符与元组中的另一个字符交换

问题描述 投票:0回答:2

我正在尝试创建一个密码,使用元组列表中的第二项交换字符串“cab”中的每个字符。我计划添加所有字母表,但这是我的测试代码。我不确定如何检查输入字符串,在本例中是“cab”针对

tup_list
中的第一项,然后获取该检查列表并使用下面的转换
flip_method
flip_return
打印出“加密”字符串。

 def encrypted_list(input= 'cab'):
     tup_list = [('a', '#'),('b', '!'),('c', '@')]
     
     
     '''NEED CODE HERE CHECKING INDIVIDUAL CHARACTERS IN A STING AGAINST tup_list. I THEN NEED TAKE THAT INFORMATION AND UPDATE EACH CHARACTER, USING THE CONVERSTION METHODS BELOW, TO PRINT OUT MY 'ENCRYPTED' STRING.'''
     flip_method = [(sub[1], sub[0]) for sub in input] 
     flip_return = [x[0] for x in flip_method]
     print (flip_return)

我尝试使用:

x = INPUT
Output = []
for i in Input:
    if x in i:
        Output.append(i)

它只是不断地返回为无

python string tuples
2个回答
0
投票

您需要的只是从输入字母表到“加密”字母表的映射

  1. 您可以使用字典手动完成

    MAPPING = {'a': '#', 'b': '!', 'c': '@'}    
    
    def encrypted_list(value: str):
        return "".join(MAPPING[letter] for letter in value)
    
    if __name__ == '__main__':
        print(encrypted_list("abc"))  # '#!@'
        print(encrypted_list("cab"))  # '@#!'
    
  2. 你可以用 str.translate 来完成

    MAPPING = str.maketrans({'a': '#', 'b': '!', 'c': '@'})
    
    def encrypted_list(value: str):
        return value.translate(MAPPING)
    

0
投票

如果您使用字典而不是元组列表,您将获得效率以及非常简单的解码和编码机制。

类似这样的:

ENCODE = {
    'a': '#',
    'b': '!',
    'c': '@'
}

DECODE = {v: k for k, v in ENCODE.items()}

def encode(word):
    return ''.join([ENCODE[c] for c in word])

def decode(word):
    return ''.join([DECODE[c] for c in word])


ew = encode('cab')
print(ew)
dw = decode(ew)
print(dw)

输出:

@#!
cab

注:

这可能不稳健,因为没有检查来确保输入字符串中的字符在任一字典中具有相应的键

© www.soinside.com 2019 - 2024. All rights reserved.