#python
#python
Вопрос:
Я пишу очень простую программу шифрования. Я просто сдвигаю порядковый номер знака ASCII с помощью ключа. Мой код выглядит следующим образом:
#Type in sign or text and key
clear_text = input("Text? ")
key = int(input("Key? "))
# saves ASCII order number of the sign
ord_number = ord(clear_text)
#shift ASCII odernumber with the key -> encryption
shift_ord_number = ord_number key
key_ord_number = chr(shift_ord_number)
print(key_ord_number)
Я хочу продвинуть этот код, имея возможность вводить целое предложение. Для этого я каким-то образом должен определить, сколько знаков ввел пользователь. Как это было бы возможно? И какие циклы вы бы порекомендовали?
Комментарии:
1. Что вы подразумеваете под «знаком» и «знаками»?
2. Я имею в виду один символ (символ), как в одном символе ASCII, например
A
, или>
.3. Добавлен ответ в соответствии с моим пониманием проблемы. Это то, чего вы хотите?
4. @anonymous Вы хорошо поняли. Вы и Скотт Хантер приходите к одному и тому же решению с другим подходом. Спасибо за вашу помощь.
Ответ №1:
Выполните итерацию по строке с for
помощью цикла и используйте свою логику шифрования с помощью цикла.
Внесение минимальных изменений в исходный код, ниже приведен пример кода для его достижения:
clear_text = input("Text? ")
key = int(input("Key? "))
new_list = []
for c in clear_text:
# saves ASCII order number of the sign
ord_number = ord(c)
#shift ASCII odernumber with the key -> encryption
shift_ord_number = ord_number key
key_ord_number = chr(shift_ord_number)
new_list.append(key_ord_number)
new_string = ''.join(new_list)
где new_string
зашифрованная строка.
Вместо for
цикла вы также можете выполнять понимание списка как:
new_string = ''.join(chr(ord(c) key) for c in clear_text)
Примерный пример:
>>> clear_text = 'This is the sample code'
>>> key = 3
>>> ''.join(chr(ord(c) key) for c in clear_text)
'Wklv#lv#wkh#vdpsoh#frgh' # <- value of "my_string"
Ответ №2:
Вы хотите использовать строку для своего предложения, из которой вы можете извлекать отдельные символы для шифрования. Фактически, clear_text
это уже строка, но (предположительно), поскольку вы ввели только один символ, он имеет длину всего 1 символ.
Чтобы получить длину строки, вы можете использовать len(clear_text)
. Вы также можете перебирать символы строки с помощью
for char in clear_text:
ord_number = ord(char)
shift_ord_number = ord_number key
key_ord_number = chr(shift_ord_number)
print(key_ord_number)
Комментарии:
1. Точно, я хочу использовать
clear_text[0], clear_text[1], ... , clear_text[n]
. Хотя, что такое n?