Как правильно печатать с железнодорожным шифром - PullRequest
0 голосов
/ 18 марта 2019

У меня есть некоторый код, использующий что-то, называемое железнодорожным шифром (если вы не знаете, что это такое, Google). Всякий раз, когда я вхожу: Encrypt (2, «Это тест».) Я хочу, чтобы он вводил: hsi etTi sats.

Однако мой код заставляет его печатать его в обратном порядке: Ti sats.hsi et.

Ты знаешь, как я могу это исправить.

Мой код:

def Encrypt(numRails, plainText):
    cipherText = ""
    railDict = {}
    rail = 0

    for rail in range(numRails):
        railDict["rail"+str(rail)] = ""
        rail += 1

    for i in range(len(plainText)):
        mod = i%numRails
        railDict["rail" + str(mod)] += plainText[i]

    for i in range(numRails):
        cipherText += railDict["rail" + str(i)]

    print (cipherText)

    return cipherText

Encrypt(2, "This is a test.")

1 Ответ

0 голосов
/ 18 марта 2019

При назначении вы должны двигаться вперед и назад по рельсам, но вы просто идете в одном направлении и затем возвращаетесь к началу, используя i % numRails.

Нет необходимости использовать словарь для рельсов. Просто используйте список, проиндексированный по номеру рельса.

def Encrypt(numRails, plainText):
    rails = [""] * numRails
    rail = 0
    direction = 1

    for c in plainText:
        rails[rail] += c
        rail += direction
        # check if we need to change directions
        if direction == 1 and rail >= numRails:
            direction = -1
            rail = numRails - 2
        elif direction == -1 and rail < 0:
            direction = 1
            rail = 1

    cipherText = "".join(rails)

    print (cipherText)

    return cipherText

Получает тот же результат, что и страница Википедия .

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