Módulo de Python que da errores de formato de cadena

Estoy tratando de realizar el módulo de un valor en python, pero recibo errores al interpretar el módulo como una cadena de formato constante, por lo que sé. Mi conjetura inicial sería escribir cast esto, pero luego se cuelga.

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

Son las dos líneas de código correspondientes a esta pregunta. En este momento, cuando ejecuto esto, obtengo: TypeError: no todos los argumentos se convierten durante el formato de cadena En la segunda línea.

Si envuelvo val en un entero y lo escribo, se tarda mucho en calcular.

No soy muy hábil con Python, supongo que me estoy perdiendo algo simple, ¿pero qué?

Si yu está recibiendo este error, y1 en sí es una cadena. No puede realizar cálculos numéricos con cadenas, cuando hace “int (y1)”, no se convierte, está convirtiendo el número representado por caracteres dentro de la cadena o un valor numérico real, y esa es la única manera en que puede realizar operaciones numéricas en él.

Si está tomando el registro, es probable porque está intentando convertir “y1 * val” a int – lo cual ya es incorrecto – si y1 es una cadena, “y1 * val” le da y1 concatenado a sí mismo “val” veces – por lo que sería un número realmente enorme. Debe tener el valor en “y1” como un número antes de multiplicar, como en:

 val = int(y1) * val 

Como puede ver en este código, el operador % tiene diferentes significados con cadenas que con números.

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

Mi conjetura es que y1 es en realidad una cadena. Aquí está la diferencia que hace el tipo de y1 :

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