Найти - Пользователи
Полная версия: Вызов функции
Начало » Python для новичков » Вызов функции
1
_Evg_
Здравствуйте.
В питоне я еще новичок, и решил попрактиковаться, реализовав упрощенный 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]
_Evg_
или как передать со стандартного потока stdout в переменную, т.е. передать принтованное значение в переменную
agalen
В коде куча ошибок:
1. Вызов main, хотя такой функции нет.
2. Строка 62: Если длина perm не меньше 8, то w не инициализируется.
3. Строка 66: Закрывающая скобка похоже не там.
4. Строка 66: Первый аргумент int, а товй func ожидает строку.
_Evg_
agalen
В коде куча ошибок:1. Вызов main, хотя такой функции нет.2. Строка 62: Если длина perm не меньше 8, то w не инициализируется.3. Строка 66: Закрывающая скобка похоже не там.4. Строка 66: Первый аргумент int, а товй func ожидает строку.
Насчет main и w согласен ) а вот в 66-й строке таких проблем не обнаружил …
agalen
Здесь вообще 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'
_Evg_
спасибо за совет ) прошу прощение за конец кода, он просто напросто даже не доходил до этой части ) 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 и передать значение в переменную - напишите )
agalen
Всё, что выводится в stdout - уходит из программы, оттуда уже не достать.
Почему бы просто не присвоить значение переменной, а уже потом её выводить.
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