alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "XPMGTDHLYONZBWEARKJUFSCIQV"
def encode():
alpha[""] = key["x"]
def decode():
key[""] = alpha[""]
def menu():
response = raw_input("""Crypto Menu
quit(0)
encode(1)
decode(2)""")
return response
def main():
keepGoing = True
while keepGoing:
response = menu()
if response == "1":
plain = raw_input("text to be encoded: ")
print encode()
elif response == "2":
coded = raw_input("code to be decyphered: ")
print decode()
elif response == "0":
print "Thanks for doing secret spy stuff with me."
keepGoing = False
else:
print "I don't know what you want to do..."
print main()
我一直得到一个TypeError,说字符串索引必须是整数,而不是类型。不知道如何纠正这一点,它突出了解码和编码变量。
答案 0 :(得分:0)
我认为你的问题在这里:
alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "XPMGTDHLYONZBWEARKJUFSCIQV"
def encode():
alpha[""] = key["x"]
def decode():
key[""] = alpha[""]
我认为你误解了字符串中的索引是如何工作的。所以让我试着纠正这个:
取一个字符串,例如x = "hello"
。参考x["h"]
毫无意义。 Python无法解释这一点。另一方面,x[0]
是有意义的。它在索引x
返回0
元素。在我们的例子中,这是"h"
。
同样,alpha[""]
并不意味着什么。使用方括号时,您尝试在字符串alpha
中指定索引。但alpha
的索引是整数。 alpha[0]
返回"A"
。 alpha[1]
返回“B
”。 alpha[25]
会返回“Z
”。
所以你需要为你的指数使用整数。像key["x"]
这样的表示法没有任何意义,这会引发错误。
答案 1 :(得分:0)
这里有很多内容,但您的encode
和decode
函数确实存在问题。如果我理解你要做什么,你可以按如下方式重写它们:
def encode(string):
alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
key = 'XPMGTDHLYONZBWEARKJUFSCIQV'
encoded = []
for character in string:
character_index = alpha.index(character)
encoded.append(key[character_index])
return ''.join(encoded)
def decode(string):
alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
key = 'XPMGTDHLYONZBWEARKJUFSCIQV'
decoded = []
for character in string:
character_index = key.index(character)
decoded.append(alpha[character_index])
return ''.join(decoded)
每个函数基本上都做同样的事情(这是encode
正在做的事情:
alpha
中找到它的索引。key
中的字符,并将该字符附加到列表encoded
注意:如果在string
字符串中找不到alpha
参数中的字符,则会失败。您可以添加一些错误检查。
如果您想要允许不同的密钥,可以使这更加通用。您可以像这样写一个translate
函数:
def translate(string, from_language_string, to_language_string):
translated = []
for character in string:
character_index = from_language_string.index(character)
translated.append(to_language_string[character_index])
return ''.join(translated)
然后您的encode
和decode
函数可以这样写:
def encode(string):
return translate(string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'XPMGTDHLYONZBWEARKJUFSCIQV')
def decode(string):
return translate(string, 'XPMGTDHLYONZBWEARKJUFSCIQV', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
要解决代码其余部分的问题,对于main
函数中的条件,您只需要确保将从raw_input
读入的字符串传递给{ {1}}和encode
根据需要运行。像这样:
decode
祝你好运。