Форум сайта python.su
Всем доброго времени суток) Пытаюсь написать программу для кодирования и декодирования сообщений с помощью шифра Цезаря. При запуске выдает ошибку (UnboundLocalError: local variable ‘num’ referenced before assigment), подскажите пожалуйста как ее исправить, все уже перепробовала (global num, и т.д)?
Прикреплённый файлы:
Caesar.py (2,5 KБ)
Офлайн
Поиск по форуму! Тут етот скрипт уже в 3 вариациях есть
Офлайн
Дело в том, что код, как мне кажется, достаточно хороший, я просто хочу чтобы он заработал, а вот как исправить ошибку не могу понять (((
Офлайн
Оно вам говорит что переменная NUM используется до того как была обьявленна
То есть у вас в коде например
def Caesar_Encryption(mode, statement): if mode[0] == "e": for symbol in statement: if symbol.isalpha(): if symbol.isupper(): if num >= ord("A") and num <= ord("W"):
Офлайн
Так разве я ее не объявляю прямо в условии (после if)? ошибка появляется даже если переменную вынести в самое начало и сделать ее глобальной
Офлайн
Конечно не обьявляете!
num = 5
Вот вы объявили переменную
Теперь можно ее сравнивать то есть
if num < 10: print('OK')
if 5 < 10:
if НИЧТО >= ord("A") and num <= ord("W"):
Отредактировано ZerG (Окт. 6, 2016 16:25:28)
Офлайн
> Пытаюсь написать программу для кодирования и декодирования сообщений с помощью шифра Цезаря.
Да чего её писать?
>>> sm = 10 >>> alfavit = map(lambda x: unicode(chr(x)), xrange(ord("a"), ord("z")+1)) >>> coder = dict(zip(map(ord, alfavit), alfavit[sm:]+alfavit[:sm])) >>> decoder = dict(zip(map(ord, alfavit), alfavit[-sm:]+alfavit[:-sm])) >>> u"abc".translate(coder) u'klm' >>> u'klm'.translate(decoder) u'abc'
Офлайн
Все, разобралась, спасибо огромное)))
Офлайн