Python模数给出字符串格式错误

时间:2012-03-20 18:00:32

标签: python modulus

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

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

这两行代码是否与此问题相对应。现在,当我运行这个时,我得到: TypeError:并非在字符串格式化期间转换所有参数 在第二行。

如果我将val包装成一个整数并输入它...它需要很长的时间来计算。

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

2 个答案:

答案 0 :(得分:4)

如果你得到这个错误,y1本身就是一个字符串。您不能使用字符串执行数值计算 - 当您执行“int(y1)”时 - 它不是强制转换,它将字符串中字符所代表的数字转换为实际数值 - 这是您可以使用的唯一方法对它执行数字操作。

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

val  = int(y1) * val

答案 1 :(得分: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