我正在尝试在python中执行值的模数,但是我得到错误,因为它将模数解释为字符串格式化常量,据我所知。我最初的猜测是输入这个,但它会挂起。
val = pow(a,n,p)
val = y1*val
val = val % p
这两行代码是否与此问题相对应。现在,当我运行这个时,我得到: TypeError:并非在字符串格式化期间转换所有参数 在第二行。
如果我将val包装成一个整数并输入它...它需要很长的时间来计算。
我对python不太熟练,我的猜测是我错过了一些简单的东西,但是什么?
答案 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