Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 17, 2013 09:03:27

_Evg_
Зарегистрирован: 2013-04-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызов функции

Здравствуйте.
В питоне я еще новичок, и решил попрактиковаться, реализовав упрощенный des. Написал код, но при отладке возникла следующая проблема:

def alg (word):
    perem = bin(int(word,16))[2::]
    if len(perem) < 8:
        w = (8-len(perem))*'0' + perem
    message = w[1]+w[5]+w[2]+w[0]+w[3]+w[7]+w[4]+w[6]
    L0,R0 = message[0:4], message[4:8]
    R1 = operator.xor(int(L0,2),int(func(R0,el=0),2))
с присваиванием переменной функция вроде как вызывается два раза
если отпринтовать print (operator.xor(int(L0,2),int(func(R0,el=0),2))) все нормально ) Уже несколько часов бьюсь и никак не могу добиться результата .
Помогите разобраться с проблемой …


Юзай теги!

[code python][/code]

Отредактировано FishHook (Апрель 17, 2013 11:07:11)

Прикреплённый файлы:
attachment des_simple_new.py (3,0 KБ)

Офлайн

#2 Апрель 17, 2013 10:32:59

_Evg_
Зарегистрирован: 2013-04-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызов функции

или как передать со стандартного потока stdout в переменную, т.е. передать принтованное значение в переменную

Офлайн

#3 Апрель 17, 2013 15:16:51

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Вызов функции

В коде куча ошибок:
1. Вызов main, хотя такой функции нет.
2. Строка 62: Если длина perm не меньше 8, то w не инициализируется.
3. Строка 66: Закрывающая скобка похоже не там.
4. Строка 66: Первый аргумент int, а товй func ожидает строку.



Офлайн

#4 Апрель 17, 2013 18:02:14

_Evg_
Зарегистрирован: 2013-04-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызов функции

agalen
В коде куча ошибок:1. Вызов main, хотя такой функции нет.2. Строка 62: Если длина perm не меньше 8, то w не инициализируется.3. Строка 66: Закрывающая скобка похоже не там.4. Строка 66: Первый аргумент int, а товй func ожидает строку.
Насчет main и w согласен ) а вот в 66-й строке таких проблем не обнаружил …

Офлайн

#5 Апрель 18, 2013 10:53:11

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Вызов функции

Здесь вообще python ругается на синтаксическую ошибку.

  File "des_simple_new1.py", line 66
l = operator.xor(int(L1,2),int(func(R1,el=1,2)))
SyntaxError: non-keyword arg after keyword arg
R1 имеет тип int, поэтому в func вылетает исключение.

И еще совет: преобразовать int в двоичную строку с заданной минимальной длиной удобно так:
>>> "{0:08b}".format( 45 )
'00101101'



Офлайн

#6 Апрель 22, 2013 16:12:15

_Evg_
Зарегистрирован: 2013-04-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызов функции

спасибо за совет ) прошу прощение за конец кода, он просто напросто даже не доходил до этой части ) el=1 скорее всего ) проблема в том, что как видите у меня стоит print в func

print (left_block, right_block)
и когда запускаешь
print (operator.xor(int(L0,2),int(func(R0,el=0),2)))
все действительно работает , но стоит присвоить это значение переменной скажем L0, то функция вызывается дважды: просит ввести дважды ключевое слово (при 1-ом вводе уже принтует блоки
print (left_block, right_block)
) потом просит ввести еще раз и уже ругается на рабочую часть кода EP … В этом проблема (
если знаете как можно получить с printf , т.е. с stdout и передать значение в переменную - напишите )

Офлайн

#7 Апрель 23, 2013 13:21:17

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Вызов функции

Всё, что выводится в stdout - уходит из программы, оттуда уже не достать.
Почему бы просто не присвоить значение переменной, а уже потом её выводить.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version