Python Modulus Giving String Formatting Errors

女生的网名这么多〃 提交于 2019-12-01 16:20:51

问题


I'm trying to perform the modulus of a value in python, but I'm getting errors as it's interpretting the modulus as a string formatting constant, from my knowledge. My initial guess would be to type cast this, but then it hangs.

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

Are the two lines of code corresponding to this question. Right now, when I run this, I get: TypeError: not all arguments converted during string formatting At the second line.

If I wrap val into an integer and type cast it...it takes extremely long to calculate.

I'm not too skilled with python, my guess is I'm missing something simple, but what?


回答1:


If yu are getting this error, y1 itself is a string. You can't perform numeric calculations with strings - when you do "int(y1) " - it is not casting, it is converting the number represented by characters inside the string o an actual numeric value - and that is the only way you can perform numeric operations on it.

If it is takin thta log, it is probable because you are trying convert "y1 * val" to int - which is wrong already - if y1 is a string, "y1 * val" gives you y1 concatenated to itself "val" times - so it would be a really huge number. You need to have the value i n "y1" as a number before multiplying - as in:

val  = int(y1) * val



回答2:


As you can see from this code, the % operator has different meanings with strings than with numbers.

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

My guess is that y1 is actually a string. Here's the difference the type of y1 makes:

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


来源:https://stackoverflow.com/questions/9792387/python-modulus-giving-string-formatting-errors

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!