-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)

リスト 'contents' 内のすべてが、同等の 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は文字を表す数字のリストであり、そのような数字の1 つ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 に答える