Функция 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))