Модуль Python, дающий ошибки форматирования строки - PullRequest
6 голосов
/ 20 марта 2012

Я пытаюсь выполнить модуль значения в python, но я получаю ошибки, поскольку он интерпретирует модуль как константу форматирования строки, насколько я знаю. Моим первоначальным предположением было бы набрать cast, но потом зависло.

    val = pow(a,n,p)
    val = y1*val
    val = val % p

Две строки кода, соответствующие этому вопросу. Прямо сейчас, когда я запускаю это, я получаю: Ошибка типа: не все аргументы, преобразованные во время форматирования строки На второй строке.

Если я заключу val в целое число и наберу приведение ... это займет очень много времени.

Я не слишком разбираюсь в python, я думаю, мне не хватает чего-то простого, но что?

Ответы [ 2 ]

5 голосов
/ 20 марта 2012

Если yu получает эту ошибку, y1 сама является строкой.Вы не можете выполнять числовые вычисления со строками - когда вы делаете «int (y1)» - это не приведение, это преобразование числа, представленного символами внутри строки, в фактическое числовое значение - и это единственный способ, которым вы можетевыполнить над ним числовые операции.

Если это так, то это вероятно потому, что вы пытаетесь преобразовать "y1 * val" в int - что уже неправильно - если y1 - строка, "y1 * val"дает вам y1 сцепленный с собой" val "раз - так что это будет действительно огромное количество.Вы должны иметь значение в "y1" как число перед умножением - как в:

val  = int(y1) * val
2 голосов
/ 20 марта 2012

Как видно из этого кода, оператор % имеет другое значение для строк, чем для чисел.

>>> 1 % 2
1
>>> '1' % 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

Я предполагаю, что y1 на самом деле является строкой.Вот разница, которую составляет тип y1:

>>> val = 10
>>> y1 = '2'
>>> val * y1
'2222222222'
>>> y1 = 2
>>> val * y1
20
...