“无法使用”;chr";用python
我以前在我的代码中有错误,现在我已经排序了,但是现在我运行我的代码,一个新的错误出现了 字符串=(chr(加法)) TypeError:需要一个整数(获取类型str) 我不知道为什么会出现这种情况,如果有人有解决方案或如何修复此代码的想法,我将不胜感激 它遇到问题的行是“无法使用”;chr";用python,python,Python,我以前在我的代码中有错误,现在我已经排序了,但是现在我运行我的代码,一个新的错误出现了 字符串=(chr(加法)) TypeError:需要一个整数(获取类型str) 我不知道为什么会出现这种情况,如果有人有解决方案或如何修复此代码的想法,我将不胜感激 它遇到问题的行是string=(chr(addition)) 完整代码发布在下面 alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFHIJKLMNOPQRSTUVWXYZ0123456789" choice
string=(chr(addition))
完整代码发布在下面
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFHIJKLMNOPQRSTUVWXYZ0123456789"
choice = input("Would you like to encrypt or decrypt? [e/d]: ")
string = ''
key1 = ''
message1 = ''
if choice == "e":
message = input("Please insert the message you would like to use: ")
keyword = input("Please insert the keyword you would like to use: ")
for A in message:
if message in alphabet:
message1 = (ord(message)) - 96
for A in keyword:
if keyword in alphabet:
key1 = (ord(keyword)) - 96
addition = key1 + message1
string = (chr(addition))
print (string)
将
key1
和message1
初始化为字符串
key1 = ''
message1 = ''
如果这些值未被覆盖,addition=key1+message1
也将是一个字符串,因此chr(addition)
将获取一个字符串作为参数,如错误消息所述。您可以通过以下方式轻松找到这些bug:
热修复程序可能会将它们初始化为零,例如:
key1 = 0
message1 = 0
这是否更像您正在寻找的内容?
每次它对一个字母进行加密时,都会循环使用关键字中的一个字母。一旦它用完了所有关键字字母,它就会返回到开头(最后一个if语句)
我没有在message1中添加任何值,也没有在key1值中添加任何值,因为应该由您来决定什么符合您的加密标准。由于Python3编码为Unicode而不是ASCII,因此可以传递255以上的chr()函数值。但是,值得注意的是,您不能低于0,因为在之前的代码中,当您两次减去96(从关键字字母和消息字母中)时,会发生这种情况。使用下面的0将使解释器吐出一个ValueError,它精确地表示
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFHIJKLMNOPQRSTUVWXYZ0123456789"
choice = input("Would you like to encrypt or decrypt? [e/d]: ")
if choice == "e":
message = input("Please insert the message you would like to use: ")
keyword = input("Please insert the keyword you would like to use: ")
ik = len(keyword)
i = 0
string = ''
for A in message:
message1 = (ord(A))
key1 = (ord(keyword[i]))
addition = message1 + key1
string += (chr(addition))
if i >= ik:
i = 0
else:
i += 1
print (string)
如果要解密消息,则只需减去密钥值:
elif choice == "d":
message = input("Please insert the message you would like to use: ")
keyword = input("Please insert the keyword you would like to use: ")
ik = len(keyword)
i = 0
string = ''
for A in message:
message1 = (ord(A))
key1 = (ord(keyword[i]))
addition = message1 - key1
string += (chr(addition))
if i >= ik:
i = 0
else:
i += 1
print (string)
错误的确切含义是:
chr
需要一个整数,但您给了它一个字符串。你想在那一行做什么?我想把之前由“加法”行创建的数字返回到相应的字母中-例如,“1”是“a”,而“2”是“b”等等…难道(ord(message))
不应该是ord(a)
?你想做什么,维格纳密码?你的逻辑有点缺陷,除了你报告的错误之外。更具体地说,in关键字的:
块。除了在那里要求ord(A)
之外,您还需要遍历整个关键字,最终得到的结果总是相当于key1=ord(关键字[-1])-96
。你不应该只是周期性地取一个字母吗?我该如何覆盖这些值?@BigTommyVernon:你已经在加法
赋值上方的循环中有条件地这样做了。“覆盖”只是指“分配一个新值”。显然,您的循环没有达到预期的测试,因此key1
和message
永远不会设置为新值(令人困惑的是,您在内部循环和外部循环中循环设置A
,这会因为名称筛选而变得不好,但您从未使用A
,因此不会导致问题;当然,不使用A
可能表示逻辑错误)。我已经尝试了您的代码,它正在按照我的预期工作(我已经在纸上加密了,字母的组合是正确的)。但是,它不是从字母表中打印字母,而是打印符号。(“ÞÞÒ”)。有人对如何解决这个问题有什么想法吗?我们将不胜感激。