【问题标题】:how to i change the positions of elements in a list to the actual elements (keyword cipher)?如何将列表中元素的位置更改为实际元素(关键字密码)?
【发布时间】:2016-12-30 19:23:29
【问题描述】:

此密码使用关键字并将其重复到输入消息的长度,然后将两者都转换为数字(关键字和消息的每个字母在字母列表中的位置),然后将它们加在一起并假设为转换回字母列表中的字母。

alpha =         ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
keyword = input("Please enter a keyword: ")

sentence = input("Enter message: ")

new_keyword = []
while len(keyword) < len(sentence):
    keyword = keyword + keyword
keyword = (keyword.lower())


for letters in keyword:
    pos1 = alpha.index(letters) + 1
    new_keyword.append(pos1)
print (new_keyword)

new_sentence = []   

for letters in sentence:
    pos2 = alpha.index(letters) + 1
    new_sentence.append(pos2)
print (new_sentence)

joined = [x + y for x, y in zip(new_keyword, new_sentence)]
print (joined)

这是我的代码

我需要找到一种方法将加入的列表再次变成字母,也就是加密消息

请帮忙

【问题讨论】:

  • " ".join(joined) ?
  • 不,我正在尝试将连接列表的元素更改回 alpha 列表中的字母
  • edit 解释您的输入和期望。目前还不清楚。
  • 我已经在问题中解释了

标签: python list encryption keyword


【解决方案1】:

到目前为止,您已将字母移动了适当的量,但仍存储了序数(或数字)值。

问题 1 是处理超过 26 的字母(例如 z (26) + a (1) = 27)。

问题 2 是使用 alpha 数组将值转换回数字。

我已将打印语句留在其中,以便您查看发生了什么。

# Original code - unedited
alpha = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
keyword = input("Please enter a keyword: ")

sentence = input("Enter message: ")

new_keyword = []
while len(keyword) < len(sentence):
    keyword = keyword + keyword
keyword = (keyword.lower())


for letters in keyword:
    pos1 = alpha.index(letters) + 1
    new_keyword.append(pos1)
print (new_keyword)

new_sentence = []   

for letters in sentence:
    pos2 = alpha.index(letters) + 1
    new_sentence.append(pos2)
print (new_sentence)

joined = [x + y for x, y in zip(new_keyword, new_sentence)]
print (joined)

# Take any value over 26 and wrap it back round (so z + 1 = a)

for i in range(len(joined)):
    if joined[i] > 26:
        joined[i] -= 26

print (joined)

# Convert each numeric value back into its character, using the alpha list

ciphertext = []

for letters in joined:
    char = alpha[letters - 1]
    ciphertext.append(char)

print(ciphertext)

一个稍微简单的方法是使用 ord() 和 chr() 函数。它们分别将字符转换为其 ASCII 值并返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多