Определите количество входных символов в python и используйте его в цикле для шифрования

#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?