Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 6, 2016 15:23:41

MashaAnon
Зарегистрирован: 2016-10-06
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифр Цезаря. Как исправить ошибку?

Всем доброго времени суток) Пытаюсь написать программу для кодирования и декодирования сообщений с помощью шифра Цезаря. При запуске выдает ошибку (UnboundLocalError: local variable ‘num’ referenced before assigment), подскажите пожалуйста как ее исправить, все уже перепробовала (global num, и т.д)?

Прикреплённый файлы:
attachment Caesar.py (2,5 KБ)

Офлайн

#2 Окт. 6, 2016 15:35:14

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2584
Репутация: +  60  -
Профиль   Отправить e-mail  

Шифр Цезаря. Как исправить ошибку?

Поиск по форуму! Тут етот скрипт уже в 3 вариациях есть



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Окт. 6, 2016 15:43:43

MashaAnon
Зарегистрирован: 2016-10-06
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифр Цезаря. Как исправить ошибку?

Дело в том, что код, как мне кажется, достаточно хороший, я просто хочу чтобы он заработал, а вот как исправить ошибку не могу понять (((

Офлайн

#4 Окт. 6, 2016 16:01:26

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2584
Репутация: +  60  -
Профиль   Отправить e-mail  

Шифр Цезаря. Как исправить ошибку?

Оно вам говорит что переменная 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? Где он береться?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Окт. 6, 2016 16:15:55

MashaAnon
Зарегистрирован: 2016-10-06
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифр Цезаря. Как исправить ошибку?

Так разве я ее не объявляю прямо в условии (после if)? ошибка появляется даже если переменную вынести в самое начало и сделать ее глобальной

Офлайн

#6 Окт. 6, 2016 16:24:40

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2584
Репутация: +  60  -
Профиль   Отправить e-mail  

Шифр Цезаря. Как исправить ошибку?

Конечно не обьявляете!
num = 5
Вот вы объявили переменную

Теперь можно ее сравнивать то есть

 if num < 10:
    print('OK')

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


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



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Отредактировано ZerG (Окт. 6, 2016 16:25:28)

Офлайн

#7 Окт. 6, 2016 16:57:32

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Шифр Цезаря. Как исправить ошибку?

> Пытаюсь написать программу для кодирования и декодирования сообщений с помощью шифра Цезаря.

Да чего её писать?

 >>> 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'



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Окт. 6, 2016 17:18:37

MashaAnon
Зарегистрирован: 2016-10-06
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифр Цезаря. Как исправить ошибку?

Все, разобралась, спасибо огромное)))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version