Как исправить ошибку «ord() ожидал символ, но найдена строка длины 0» в Python

Моя программа должна кодировать входные сообщения, используя шифр Цезаря. Я попытался разбить строку на множество букв, поставив между ними «/». Тогда все, собственно, и заработало (как я думаю). В конце концов, когда сообщение приближается к chr(ord(ch)+ 2), появляется ошибка. Как я могу исправить это?

def main():

    print("This program will encode your messages using a Caesar Cipher")

    message = input("Enter the message: ")

    load = ("")

    codedMessage = ("")

    for i in message:

        load = load + i + "/"

        ''.join(load)

    for ch in load.split("/"):

        codedMessage = codedMessage + chr(ord(ch)+ 2)

    print("The coded message is:", codedMessage)

main()
load = ''.join(load); строка load не изменяется на месте. (Действительно, это не можем может быть изменено; значения str неизменяемы.)
chepner 28.05.2019 23:45

Вставка косой черты, а затем разделение этого символа совершенно бессмысленно; вы можете напрямую перебирать символы через for ch in message:. На самом деле, ты сделал именно это, в процессе генерации строки с косой чертой!

jasonharper 28.05.2019 23:50

см. ул.макетранс и ул.перевод для более простого способа перевода строк.

Mark Tolonen 28.05.2019 23:56

Что за ошибка выскакивает?

Chi 29.05.2019 00:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
473
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы должны сделать это:

print("This program will encode your messages using a Caesar Cipher")

message = input("Enter the message: ")

codedMessage = ""

for ch in message:
    codedMessage = codedMessage + chr(ord(ch) + 2)


print("The coded message is:", codedMessage)

Вам не нужно load и разделение на '/'. Вы добавили лишние символы только для того, чтобы разделить и удалить их. Хуже того, в этом случае после того, как вы добавили /, у вас теперь остается завершающий /, и поэтому, когда вы выполняете split(), последняя часть является символом пробела.

Итак, удалите первую петлю for и сразу же перейдите к следующей. Если вы все еще видите проблему, возможно, input() дает вам завершающие символы, поэтому ошибка, которую вы видите, имеет смысл.

Просто запустите input("The message").trimspace(), чтобы удалить конечные пробельные символы, и код должен работать. Вы можете работать над оптимизацией своего кода отдельно, но проблема должна заключаться в этом.

В вашем первом цикле for вы всегда добавляете символ / в конец строки, что означает, что у вас есть конечный / в конце вашей последней строки. Когда вы делаете load.split('/'), строка в конце разделяется вправо, оставляя вас с пустой строкой в ​​конце, которая выдает ошибку, поскольку вы пытаетесь получить ord из ничего:

Вот пример кода того, о чем я говорю:

>>> "o/".split('/')
['o', '']

Последнее '' - это то, что дает вам ошибку. Есть множество способов исправить это, но я думаю, что лучше всего пропустить разделители / и просто использовать входную строку, как говорят некоторые другие люди.

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