6

我正在尝试在 python 中执行一个值的模数,但我得到了错误,因为它将模数解释为一个字符串格式常量,据我所知。我最初的猜测是键入 cast this,但随后它挂起。

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

这两行代码是否对应这个问题。现在,当我运行它时,我得到: TypeError: not all arguments convert during string formatting 在第二行。

如果我将 val 包装成一个整数并进行类型转换……计算需要很长时间。

我对python不太熟练,我猜我错过了一些简单的东西,但是什么?

4

2 回答 2

5

如果 yu 收到此错误,则 y1 本身就是一个字符串。您不能使用字符串执行数字计算-当您执行“int(y1)”时-它不是强制转换,而是将字符串中的字符表示的数字转换为实际数值-这是您可以做到的唯一方法对其进行数值运算。

如果它是 takin thta 日志,很可能是因为您正在尝试将“y1 * val”转换为 int - 这已经是错误的 - 如果 y1 是一个字符串,“y1 * val”会给你 y1 连接到自身的“val”次 -所以这将是一个非常大的数字。在相乘之前,您需要将“y1”中的值作为数字 - 如:

val  = int(y1) * val
于 2012-03-20T18:13:27.603 回答
2

从这段代码可以看出,%操作符对字符串的含义与对数字的含义不同。

>>> 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
于 2012-03-20T18:22:09.103 回答