Цезарь Шифр ​​в Python 3.4.3

Вывод, который я должен получить, если наберу "eat", должен быть "hdw", если я сдвину его на 3. Однако конечный результат - только "w". Я почти уверен, что у меня есть все, что мне нужно, но, возможно, это форматирование?

def shifter():  
    phrase = input("Please enter a message: ")  
    key = eval(input("Please enter the number of places to be shifted: "))  
    list = phrase.split()  
    for word in list:  
        for ch in word:  
           conversion = (chr)((ord(ch) - ord("a") + key) % 26 + ord("a"))  
        newPhrase = " "  
        newPhrase = newPhrase + conversion  
    print(newPhrase)  
shifter()  

2 ответа

Решение

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

Вы должны добавлять конверсию, а не устанавливать ее.

Кроме того, вы должны инициализировать newPhrase вне цикла, а затем добавить к нему внутри.

Пример -

def shifter():  
    phrase = input("Please enter a message: ")  
    key = eval(input("Please enter the number of places to be shifted: "))  
    list = phrase.split()
    newPhrase = ""
    for word in list:
        conversion = '' 
        for ch in word:  
           conversion += (chr)((ord(ch) - ord("a") + key) % 26 + ord("a"))  
        newPhrase = newPhrase + conversion + " " 
    print(newPhrase)  
shifter()

Я думаю, что это с твоим отступом! Прямо сейчас, прежде чем что-то делать с преобразованием переменных, вы уже перебрали все ch в слове, поэтому вы застряли на последнем ch.

Попробуйте выполнить преобразование += ... Вместо преобразования = ... (Возможно, вам придется инициализировать преобразование до этого, но idts.)

Другие вопросы по тегам