Es verdad, debe dar error, porque para 38 se tiene
resta=-13
Y. -13%10=7 por lo que para el primer bloque if la condición propuesta es verdadera. Cuando deseamos que sea falsa.
Gracias, Ingmarov; todavía tengo que pensar del todo cómo funciona la línea del if resta%100!=resta, pero lo dejo para mañana, que ahora estoy un poco dormido (y, si no, ya me lo explicas un poco).
En mi código, sí, el error que manda está relacionado con el int y no sé qué más de la base 10, según informa. Pero éste error se produce por una razón entendible: el valor “n” en el bucle interno de la función va siendo cada vez menor hasta que llega a un primer número que ya tiene una sola cifra (un carácter en la cadena); si ese número no es 0,7 ó -7, el bucle no se para, sigue y al llegar aquí ( s[:-1]) no extrae el carácter de la izquierda, porque no existe, no está definido; de ahí que produzca el fallo al intentar convertirlo en int. El que está definido, en caso de un sólo carácter en la cadena, es el de la derecha s[-1:]. En caso de que el número fuera negativo, la cadena tiene dos caracteres, con lo cual intenta convertir a entero el signo “-” y entonces da error también; concretamente indica el signo menos al final:
ValueError: invalid literal for int() with base 10: '-'
Saludos.