Функция ord не работает

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 доказано, что все целые числа

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))
Другие вопросы по тегам