ord() 期望一个字符

ord () expected a character

我想通过txt文件解密代码。但是报错ord() expected a character, but a string of length 586 was found。有什么修复建议吗? (我使用 python 3.9)

def decrypt(string, shift):
    cipher = ''
    for char in string:
        if char == ' ':
            cipher = cipher + char
        elif char.isupper():
            cipher = cipher + chr((ord(char) - shift - 65) % 26 + 65)
        else:
            cipher = cipher + chr((ord(char) - shift - 97) % 26 + 97)

    return cipher


text = open(input("enter string: "))
s = int(input("enter shift number: "))
print("original string: ", text)
print("after decryption: ", decrypt(text, s))

text 是一个可迭代对象,它生成一系列字符串,文件中每行一个。因此,char 是文件的整行,而不是给定行的单个字符。

decrypt 很好(尽管您应该使用 join 方法而不是重复将字符附加到不断增长的字符串);您对 text 的使用需要修正。

text = open(input("enter string: "))
s = int(input("enter shift number: "))
for line in text:
    print("original string: ", line)
    print("after decryption: ", decrypt(line, s))

如果你想把整个文件作为一个字符串,直接调用它的read方法:

text = open(input("enter string: "))<b>.read()</b>
s = int(input("enter shift number: "))
print("original string: ", text)
print("after decryption: ", decrypt(text, s))

(我故意忽略任何 str-vs-bytes 关于使用从 text 读取的数据的问题。)