Python шифр и вложенные циклы - PullRequest
0 голосов
/ 26 августа 2018

Я очень плохо знаком с Python, и у меня возникли проблемы с шифровальной проблемой.Мне нужно отобразить 3 столбца, относящиеся к двум операторам ввода.пользовательские входы - «сообщение» и «текстовый ключ».Первый столбец просто выводит «сообщение» по одной букве за раз.Во втором столбце отображается числовое значение для ввода «ключевой текст».В третьем столбце отображается новый текст, который создается путем перемещения букв в «сообщении» на соответствующее значение, указанное в «ключевом тексте» (извините, это немного сложно описать)

Message? HELLO
Keytext? AAAA
H 0 H
E 0 E
L 0 L
L 0 L
O 0 O

Message? HELLO
Keytext? ABBCD
H 0 H
E 1 F
L 1 M
L 2 N
O 3 R

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

Это мой код на данный момент, и в этом варианте я не могу заставить средний столбец итерировать правильно.

keytext = str(input("Keytext? ").upper())
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for i in message:
    place = alphabet.find(i)
    for j in keytext:
        place2 = alphabet.find(j)
        newplace = (place + place2)% 26
        code = alphabet[newplace]
    print(i,place2,code)

если message = hello и keytext = abcde, то ожидаемый результат будет

H 0 H
E 1 F
L 2 N
L 3 O
O 4 S

Однако в настоящее время он равен:

H 4 L
E 4 I
L 4 P
L 4 P
O 4 S

Так что просто выясним, какправильно разместить столбец 2 в петлях ... У кого-нибудь есть предложения, как мне это исправить?Любая помощь будет очень признательна.

Спасибо!

1 Ответ

0 голосов
/ 26 августа 2018

Вы выяснили, как это сделать - кроме небольшого отклонения.Во внутреннем цикле for, j перебирает keytext, а code перезаписывается.Отсюда и отклонение от ожидаемого выхода.Все, что вам нужно сделать, это удалить внутреннюю петлю for.

message = str(input("Message? ")).upper()
keytext = str(input("Keytext? ")).upper()

# Length of keytext and message should be same.
assert len(message) == len(keytext)

alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in range(len(message)):
    place = alphabet.find(message[i])
    place2 = alphabet.find(keytext[i])
    newplace = (place + place2) % len(alphabet)
    code = alphabet[newplace]
    print(message[i], place2, code)

Вывод:

Message? hello
Keytext? abcde
H 0 H
E 1 F
L 2 N
L 3 O
O 4 S
...