2015-11-23 4 views
2

У меня возникают проблемы с функцией chr(). Мой код сначала берет вход пользователя, помещает его в массив и затем использует функцию ord, чтобы преобразовать его в соответствующее числовое значение и делает то же самое с ключевым словом. Затем он использует функцию zip, чтобы добавить оба массива вместе, чтобы получить числа, и использует функцию chr на нем, чтобы вернуть его в текст. Проблема заключается в том, что CHR функция выводит неправильноОшибка функции chr() Python

Например

значение числа с 99

количество valueof ч составляет 104

Они добавляют вместе, чтобы сделать 203

мой код выхода \ XCB

, когда я сделал отдельный код, который просто

leb = chr(203) 
print leb 

Это выводит 203 как é, который является особой характер и то, что мне нужно для декодирования его

Вот мой код

num_string = raw_input("enter what you would like to encrypt") 
num_list = [] 
for num in num_string: 
    num_list.append(ord(num)) 
    print num_list 

key_string = raw_input("enter the keyword") 
key_list = [] 
for key in key_string: 
    key_string = key_list.append(ord(key)) 
    print key_list 

end_string = [x + y for x, y in zip(num_list, key_list)] 
end_list = [] 
print end_string 
for end in end_string: 
    end_list.append(chr(end)) 
print end_list 

Когда запускается это выход

введите то, что вы хотели бы зашифровать кошку

[99]

[99, 97]

[99, 97, 116]

вводить keywordhat

[104]

[104, 97]

[104, 97, 116]

[203, 194, 232]

[ '\ XCB', '\ xc2', '\ X Е8']

Почему мой код делает это и как это исправить?

+0

ASCII коды запуска до 127 – Pynchia

+0

Я не» t знать, какую таблицу ascii вы смотрите, но даже с расширенной таблицей 203 ascii не равна Ë. http://www.asciitable.com/ – SirParselot

+0

Что вы ожидаете, это символ '\ xcb' в специальной кодовой странице. Ничего не так, просто ваше ожидание результата. –

ответ

0

Как было предложено в этом вопросе SO (python: extended ASCII codes), нет такой вещи, как «расширенный Ascii».

Выход правильный (\ xcb = 12 * 2^4 + 11 * 2^0), но, по-видимому, это не кодировка, которую вы ищете, поэтому вы можете выяснить, какая кодировка это вы ищет, а затем проконсультируется с документацией Python о встроенной функции кодирования.

+0

. Я сделал отдельный фрагмент кода и использовал chr на 203, который вывел Ë. Итак, почему он выводит/xcb в этом фрагменте кода. Почему chr дает два разных ответа при одинаковом числе? – CoolestKidAround

1

Все совершенно нормально. Это просто разница между значением строки (с кавычками) и печатью строки после ее преобразования на кодовой странице системы. На кодовой странице latin1 символ '\xcb' (код 203) эффективно печатает как Ë.

Но печать списка не то же самое, как печать его ценности, позволяет забыть символы, используя коды выше 127, и просто смотреть на это:

>>> l = [ 'a', 'b', 'c'] 
>>> print l 
['a', 'b', 'c'] 
>>> print ','.join(l) 
a,b,c 

Так что, когда печать списка строк, Python печатает каждый элемент в форме представления, заключенный в цитату. Таким образом, в вашем примере, (если ваша система кодирования является latin1), вы можете написать:

... 
print end_list 
print ''.join(end_list) 

и вы получите, как и ожидалось:

['\xcb', '\xc2', '\xe8'] 
ËÂè 
+0

upvoted. BTW, ваш пример/решение работает так же хорошо, как и в UTF-8, по умолчанию на Python 3 – Pynchia