Как мне собрать строку после ее повторения? - PullRequest
1 голос
/ 05 августа 2020

Как сказано в заголовке, я не понимаю, как вернуть строку в строку после итерации по ней. Прямо сейчас у меня есть это:

for element in want_cyphered:
    element = ord(element)
    element = element + 13
    element = chr(element)
    print(element)

Это выполняет итерацию по строке want_cyphered и печатает ее. Это функция, которую я использую для шифрования и дешифратора. Мне было интересно, как снова скомпилировать итерацию в реальную строку? Прямо сейчас я печатаю по одному символу в строке, но я хочу, чтобы все было в одной строке. Любая помощь будет оценена по достоинству! Используя python.

Ответы [ 5 ]

2 голосов
/ 05 августа 2020

Другие ответы не ошибочны, но поскольку вы используете Python, вы также можете использовать то, в чем он хорош (и ваш код, вероятно, также будет быстрее):

want_cyphered = 'Some text'
cyphered = ''.join(chr(ord(ch) + 13) for ch in want_cyphered)
print(cyphered)

decyphered = ''.join(chr(ord(ch) - 13) for ch in cyphered)
print(decyphered )

Чтобы разбить это на части (при условии, что вы новичок в Python): ''.join(list_of_parts) берет список частей строки (символов или строк) и объединяет их в одну строку, используя любую строку в начале - в данном случае пустая строка.

Вы можете сгенерировать этот список частей, используя выражение генератора (очень эффективный способ перебора чего-то итерируемого), например [ch for ch in some_str], что даст вам список символов в строка.

Я только что заключил генератор в квадратные скобки, чтобы он стал фактическим списком, но когда вы пишете только генератор для использования в качестве входных данных какой-либо функции, вы можете просто передать сам генератор, без скобок типа ''.join(ch for ch in some_str) - который в принципе ничего не делает. Он разделяет строку и снова объединяет ее.

Но вы также можете применять операции к элементам этого генератора, поэтому вместо ch вы можете заполнить список chr(ord(ch) + 13), который - это шифр, который вы хотели применить.

Сложите все это вместе, и вы получите:

cyphered = ''.join(chr(ord(ch) + 13) for ch in want_cyphered)
1 голос
/ 05 августа 2020

Просто создайте пустую строку и на каждой итерации добавляйте к ней элемент!

want_cyphered = "Hello, World!"
cyphered = ""

for element in want_cyphered:
    element = ord(element)
    element = element + 13
    element = chr(element)
    # Add the element to string
    cyphered += element
1 голос
/ 05 августа 2020

Создайте переменную и добавьте свой элемент к переменной внутри l oop. Когда l oop закончится, напечатайте результат.

result = ""
for element in want_cyphered:
    element = ord(element)
    element = element + 13
    element = chr(element)
    result += element
print(result)

Или, если вы хотите получить действительно необычный ...

print("".join([chr(ord(e) + 13) for e in want_cyphered]))
1 голос
/ 05 августа 2020

просто введите

for element in want_cyphered:
    element = ord(element)
    element = element + 13
    element = chr(element)
    print(element,end="")

часть end = "" указывает Python добавить пустую строку в конец. Конечный параметр по умолчанию означает новую строку, поэтому каждый символ печатается в одной строке. Установка end = "" позволяет печатать все в одной строке.

0 голосов
/ 05 августа 2020

Вот подход, который использует функции translate, make_trans.

from string import ascii_lowercase as lc, ascii_uppercase as uc

def rot_13(s):
    return s.translate(str.maketrans(lc+uc, lc[13:]+lc[:13]+uc[13:]+uc[:13]))

s = 'Hello World!'

print(rot_13(s))

Выводит

Uryyb Jbeyq!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...