我需要帮助将第二部分写入这个程序,这几乎已经完成了。我写完了加密字母表的部分,但现在我发现自己陷入了尝试使用新加密作为一种解码器环的问题,以解密某人可能输入该程序的随机加扰消息。
所以为了让这更容易理解,让我们说这个程序的加密部分为您提供: NHPWJXEYOZMAFUSCIGLVTDBKRQ
现在有人会输入一些使用新的加扰字母加密的随机消息。所以,请说出某人的类型: VYOL OL FR 1LV LJPGJV FJLLNEJ!
现在我需要编写的程序必须使用乱码字母来解码消息并打印:这是我的第1个秘密消息!
如果有人可以提供帮助,我将非常感激。如果它仍然听起来令人困惑,请问。我的程序如下:
# ENCODE a secret message
# Scramble the alphabet, read a secret message, encode it, print scrambled
import random
def main():
encryption()
decryption()
def encryption():
encrypt=["*"]*26 # all letters available
print(encrypt)
print("Alphabet: ", end="")
for numbah in range(26):
#converts numbah into a letter
letter = chr(numbah+65) # converts 0-25 --> 'A' = 'Z'
print(letter, end="")
#Reminder: find an empty position for that letter to be placed
notfound = True
while notfound:
possible_position = random.randint(0,25)
if encrypt[possible_position] == "*":
notfound = False
encrypt[possible_position] = letter
print("\nScrambled: " , end="")
for numbah in range(26):
print(encrypt[numbah], end="")
print("\n\n")
msg=input("Now, please type your secret message to encode: ")
print("Your secret message: " + msg)
print("Your message encoded: ", end="")
# reminder non alphabetic characters should 'float thru' unchanged!
for alpha in msg.upper():
if alpha < "A" or alpha > "Z":
print(alpha, end="")
else:
print( encrypt[ ord(alpha) - 65], end="")
print("\n")
def decryption():
scram_alph = input("Input the scrambled alphabet from the early prog: ")
scram_mess = input("Input the scrambled messgae you want decoded: ")
main()
答案 0 :(得分:2)
Python标准库中有一些功能可以使这项任务变得非常简单。请查看str.translate()
和string.maketrans()
:
>>> import string
>>> t = string.maketrans("NHPWJXEYOZMAFUSCIGLVTDBKRQ",
string.ascii_uppercase)
>>> "DRSA SA XG 1AD AZCEZD XZAAUJZ!".translate(t)
'THIS IS MY 1ST SECRET MESSAGE!'
答案 1 :(得分:1)
你太过于复杂了。使用Python为您提供的内置迭代工具。
>>> alphabet = "NHPWJXEYOZMAFUSCIGLVTDBKRQ".lower()
>>> message = "VYOL OL FR 1LV LJPGJV FJLLNEJ!".lower()
>>>
>>> table = dict(zip(alphabet, string.ascii_lowercase))
>>> "".join(table.get(char, char) for char in message)
'this is my 1st secret message!'
该行
table = dict(zip(alphabet, string.ascii_lowercase))
制作明文字母的密文字典。为什么?两个字符串中的zip
为您提供了一对列表:(第一个字母,第一个字母),(第二个字母,第二个字母)等。然后dict
生成一个字典。这一行
"".join(table.get(char, char) for char in message)
说要在字典中查找消息中的每个字符(如果它不存在,例如它是空格或者!则不要更改它)并将它们粘合回字符串。
顺便说一句,要制作一个加扰字母,你需要做的就是
>>> alphabet = list(string.ascii_lowercase)
>>> random.shuffle(alphabet)
>>> alphabet = "".join(alphabet)
>>> alphabet
'emxcqgzvkruisjtlydbhafopnw'