Цезарь Шифр в 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.)