“无法使用”;chr";用python

“无法使用”;chr";用python,python,Python,我以前在我的代码中有错误,现在我已经排序了,但是现在我运行我的代码,一个新的错误出现了 字符串=(chr(加法)) TypeError:需要一个整数(获取类型str) 我不知道为什么会出现这种情况,如果有人有解决方案或如何修复此代码的想法,我将不胜感激 它遇到问题的行是string=(chr(addition)) 完整代码发布在下面 alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFHIJKLMNOPQRSTUVWXYZ0123456789" choice

我以前在我的代码中有错误,现在我已经排序了,但是现在我运行我的代码,一个新的错误出现了

字符串=(chr(加法)) TypeError:需要一个整数(获取类型str)

我不知道为什么会出现这种情况,如果有人有解决方案或如何修复此代码的想法,我将不胜感激

它遇到问题的行是
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
可能表示逻辑错误)。我已经尝试了您的代码,它正在按照我的预期工作(我已经在纸上加密了,字母的组合是正确的)。但是,它不是从字母表中打印字母,而是打印符号。(“ÞÞÒ”)。有人对如何解决这个问题有什么想法吗?我们将不胜感激。