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).
Te explico, la intensión de esa línea es terminar la sucesión de restas, y nos garantiza que está resta sea menor que cien, valores para los cuales creo es fácil saber si son múltiplos de siete o no. Mientras resta sea distinta (mayor) que resta%100 se repetirá el llamado a la función.
Por desgracia, el programa no funciona para todos los casos.Quizás si cambiamos, en esa línea, != por <, se corrija el error.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: '-'
Sí, me costó un poco darme cuenta.
También había pensado utilizar str() e int() como lo has hecho... Me pregunto si la máquina trabaja más o menos usando texto. Aunque para un programa tan pequeño, esa diferencia de trabajo no es perceptible, ni creo tenga mucha importancia.
Saludos sempai