Найти - Пользователи
Полная версия: Шифр Цезаря. Как исправить ошибку?
Начало » Python для новичков » Шифр Цезаря. Как исправить ошибку?
1
MashaAnon
Всем доброго времени суток) Пытаюсь написать программу для кодирования и декодирования сообщений с помощью шифра Цезаря. При запуске выдает ошибку (UnboundLocalError: local variable ‘num’ referenced before assigment), подскажите пожалуйста как ее исправить, все уже перепробовала (global num, и т.д)?
ZerG
Поиск по форуму! Тут етот скрипт уже в 3 вариациях есть
MashaAnon
Дело в том, что код, как мне кажется, достаточно хороший, я просто хочу чтобы он заработал, а вот как исправить ошибку не могу понять (((
ZerG
Оно вам говорит что переменная 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"):

Вот программа и не понимает. Что такое NUM? Где он береться?
MashaAnon
Так разве я ее не объявляю прямо в условии (после if)? ошибка появляется даже если переменную вынести в самое начало и сделать ее глобальной
ZerG
Конечно не обьявляете!
num = 5
Вот вы объявили переменную

Теперь можно ее сравнивать то есть
 if num < 10:
    print('OK')

Что в данном случае переводиться как
 if 5 < 10:
Другими словами вы сравниваете значение переменной а не ее имя! (почитайте про переменные в питоне)


В вашем же случае переменная num до попытки ее сравнить не существует в принцыпе и ничему не равна
В сильно примитивном виде у вас получаеться условие
 if НИЧТО >= ord("A") and num <= ord("W"):
Как мы понимаем “на ноль делить нельзя” - то есть нельзя сравнить ничто с чем то!!!
Rodegast
> Пытаюсь написать программу для кодирования и декодирования сообщений с помощью шифра Цезаря.

Да чего её писать?
 >>> 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'
MashaAnon
Все, разобралась, спасибо огромное)))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB