Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解密输入?_Python_Input_Decode_Encode - Fatal编程技术网

Python 解密输入?

Python 解密输入?,python,input,decode,encode,Python,Input,Decode,Encode,这是我的任务: 写一个解密秘密消息的程序 它应该首先提示用户输入加扰的字母表。然后它应该询问秘密信息。最后,它输出解译后的版本 请注意,对于加扰的字母表,正好输入了26个字符。所有字母字符都将被翻译成它们的解码等价物(这将需要一段时间的循环),所有其他非字母字符的输出应该与没有翻译时完全相同 这是我目前的代码: decrypt = ["*"] * 26 scram_alphabet = input("Please input the scrambled alphabet in order: "

这是我的任务:

写一个解密秘密消息的程序

它应该首先提示用户输入加扰的字母表。然后它应该询问秘密信息。最后,它输出解译后的版本

请注意,对于加扰的字母表,正好输入了26个字符。所有字母字符都将被翻译成它们的解码等价物(这将需要一段时间的循环),所有其他非字母字符的输出应该与没有翻译时完全相同

这是我目前的代码:

decrypt = ["*"] * 26

scram_alphabet = input("Please input the scrambled alphabet in order: ")

while len(scram_alphabet) != 26:
    scram_alphabet = input("Please input the scrambled alphabet in order. The alphabet must have 26 characters: ")

num = 0

for each_letter in scram_alphabet:
    decrypt[num] = ord(each_letter)
    num = num + 1

print()

print("Your scrambled alphabet is: ", end = "")

for num in range (26):
    print(chr(decrypt[num]), end = "")

print()
print()

msg = input("Now input your scrambled message: ")

print()
print()

alphabet = 65

for s in range (26):
    decrypt[s] = (alphabet)
    alphabet = alphabet + 1

print("The unscrambled alphabet is: ", end = "")


for num in range (26):
    print(chr(decrypt[num]), end = "")

print()
print()

print("Your unscrambled message reads: ")

for alpha in msg.upper():
    if alpha < "A" or alpha > "Z":
        print(alpha, end="")
    else:
        ord_alpha = ord(alpha)
        print (chr(decrypt[ord_alpha - 65]), end = "")
decrypt=[“*”]*26
scram_alphabet=输入(“请按顺序输入加扰的字母:”)
而len(紧急停车字母表)!=26:
scram_alphabet=输入(“请按顺序输入加扰的字母表。字母表必须有26个字符:”)
num=0
对于紧急停堆字母表中的每个字母:
解密[num]=ord(每个字母)
num=num+1
打印()
打印(“您的加扰字母是:”,end=“”)
对于范围(26)中的num:
打印(chr(decrypt[num]),end=“”)
打印()
打印()
msg=input(“现在输入您的加扰消息:”)
打印()
打印()
字母表=65
对于范围(26)内的s:
解密[s]=(字母表)
字母表=字母表+1
打印(“未解读的字母表为:”,end=“”)
对于范围(26)中的num:
打印(chr(decrypt[num]),end=“”)
打印()
打印()
打印(“您未解读的消息内容为:”)
对于msg.upper()中的alpha:
如果α<“A”或α>“Z”:
打印(alpha,end=“”)
其他:
ord_α=ord(α)
打印(chr(解密[ord_alpha-65]),end=“”)
例如:加扰字母=XQHAJDENKLTCBZGUYFWVMIPSOR,加扰消息=VNKW KW BO 1WV WJHFJV BJWWXEJ

在我看到最后一个print语句之前,一切都很正常,它说未解读的消息与加扰的消息相同。我知道指令需要一段时间的循环,但我不知道如何使用循环来解码字母表


有帮手吗

在将所有加扰的字母写入解密后,您正在对其进行重击解密:

crypt = ["*"] * 26
for s in range (26):
    val = decrypt[s] - 65
    crypt[val] = (s + 65)

如前所述,您正在删除
decrypt
变量。 但是,您也没有正确/根本没有建立从“混乱”字母表到常规字母表的映射

在不使用列表和简单列表函数(
index()
)的基本迭代的情况下进行解密可能如下所示:

cleartext = ""
for c in msg:
    if c in alphabet:
        pos = alphabet.index(c)
        cleartext += string.ascii_uppercase[pos]
    else:
        cleartext += c
它可以从一些改进中获益,而不仅仅是修补代码。我想这可能是家庭作业,你可能不希望走这么远,但无论如何,在我看来,学习它并没有什么错

    <>你没有检查输入字母表只包含你认为是“强>法律值< /强>(例如,在这种情况下可能是-Z)),也不检查<强>重复> <强>。用户可以输入任何旧的垃圾,否则会破坏你的程序
  • 你的打印和循环不是很好
  • 函数有助于将代码分解为更易于阅读和维护的部分
  • 这可能给人的印象是老派或迂腐,但Python不推荐使用长度超过80个字符的行。相邻的字符串文字(例如“一”“二”)将被连接(甚至跨换行)
如果我必须在没有
翻译的情况下做你正在做的事情(见下文),我可能会做类似的事情(只是一个简单的例子,可能需要做一些工作来改进):

最后,您还可以使用Python的内置字符串转换来实现这一点,如下所示:

import string
# read and validate alphabet
# read message
print(str.translate(message, str.maketrans(alphabet, string.ascii_uppercase)))

这是一个有点长的2行程序(如果你不算导入的话):
str.translate('VNKW-KW-BO 1WV-WJHFJV-bjwxej!',string.maketrans('XQHAJDENKLTCBZGUYFWVMIPSOR',string.ascii_大写))
提示:在第三个
For
循环中,您完全覆盖了
decrypt[]
数组的内容,忽略了先前输入的加扰字母表…@Stobor:您介意详细说明一下吗?我不确定你的意思,我再次设置为decrypt=[0]*26,它打印了所有空格-->“1!”你可能需要另一个数组,它是用我注释掉的循环构建的。@user2680935我很抱歉你这么想-如果我的答案太复杂,请让我知道,我会尝试更清楚地解释。这是打印的“IZTP TP QG 1PI PLNDLI QLPSPJL!,它应该按照“这是我的第一条秘密信息“注释该部分将为您提供加密代码,其中包含字符串
,这是我的第一条秘密消息并将其转换为
VNW KW BO 1WV WJHFJV BJWWXEJ-缺少的魔法是反转解密内容的代码。@Stobor是对的,我想。newarr[decrypt[alphbet]]或类似的东西,然后使用newarr来解密消息。@Jim:我以前从未使用过它?我很确定我的赋值范围应该限制在while/for循环、基本列表和下标……你只是在用一个数组的值来索引另一个数组。
import string
# read and validate alphabet
# read message
print(str.translate(message, str.maketrans(alphabet, string.ascii_uppercase)))