-2
file_ascii = [(ord(c)) for c in contents]
f_file = []
for x in range (0, len(file_ascii)): 
    if file_ascii[x] != 32:
        file_ascii2 = (file_ascii[x])
        file_ascii2 = (offset) + (file_ascii2)
        if file_ascii2 > 126:
            file_ascii2 = (file_ascii2) - 94
    print (file_ascii2)
    file_ascii2 = [(chr(i)) for i in file_ascii2]
    f_file.append(file_ascii2)

列表“内容”中的所有内容都应该转换为其等效的 ascii 代码。然而,当 'file_ascii2' 变回普通字母时,其中一些已经是普通字母,即使它已经被添加和减去。当代码运行时

file_ascii2 = [(chr(i)) for i in file_ascii2]

作为评论,“file_ascii2”被证明是所有整数

4

1 回答 1

1

您从未更改file_ascii列表中的元素。您只更改了变量file_ascii2。您需要分配回列表以使更改反映在该列表中:

if file_ascii[x] != 32:
    file_ascii2 = (file_ascii[x])
    file_ascii2 = (offset) + (file_ascii2)
    if file_ascii2 > 126:
        file_ascii2 = (file_ascii2) - 94
    file_ascii[x] = file_ascii2

或者直接chr()将该数字的结果附加到f_file列表中。

你真的应该为你的变量使用更好的名字;file_ascii是代表字符的数字列表,file_ascii2就是这样一个数字,因此您尝试for在该数字上使用循环的列表理解将失败。

在不改变技术的情况下稍微清理代码会导致:

file_ascii = [ord(c) for c in contents]
f_file = []
for index in range(0, len(file_ascii)): 
    codepoint = file_ascii[index]
    if codepoint != 32:
        codepoint += offset
        if codepoint > 126:
            codepoint -= 94
    f_file.append(chr(codepoint))

contents在循环中循环并将每个字符转换为整数会更容易:

f_file = []
for character in contents:
    codepoint = ord(character)
    if codepoint != 32:
        codepoint += offset
        if codepoint > 126:
            codepoint -= 94
    f_file.append(chr(codepoint))
于 2016-02-06T18:45:30.013 回答