如何将输入中的元素匹配到列表?

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

我是Python新手,我只是想问如何将用户输入中的一个元素匹配到列表。我目前正在开发凯撒密码程序,我基本上输入了字母表列表:

alphabet = ['a','b','c','d',...]

然后要求用户输入一个要加密的单词,

text = input('Enter your message')
和移位量,我想我可以设置一个空字符串变量,然后循环(for循环)每个字母来移位它。

但这就是我陷入困境的地方,如何使用列表将输入中的每个字母移动移动量?

我尝试使用列表字母表的索引循环输入,但由于不知道我在做什么,所以它不起作用。

python list caesar-cipher
1个回答
0
投票

这是 caesar-cipher 的通用实现,它应该适用于任何 shift 数量和任何 charset

如果您觉得类型提示妨碍了可读性,请随意删除它。但我个人更愿意拥有它。

import string
from typing import Hashable, Iterable, Sequence, TypeVar

T = Hashable
def caesar_ciper(message: Iterable[T], k: int, charset: Sequence[T] = string.ascii_lowercase) -> Iterable[T]:
    n = len(charset)
    char_idx = dict(zip(charset, range(n)))
    shift = lambda x: charset[(char_idx[x] + k) % n]
    return map(shift, message)
    
message = 'abcxyz' # read from user
k = 3 # read from user

encoded = ''.join(caesar_ciper(message, k))
assert encoded == 'defabc'
© www.soinside.com 2019 - 2024. All rights reserved.