Autor Tema: Un par de programas en python

0 Usuarios y 1 Visitante están viendo este tema.

30 Enero, 2015, 03:18 pm
Leído 2879 veces

energy

  • Experto
  • Mensajes: 561
  • Karma: +0/-0
  • Sexo: Masculino
Estaba practicando para mi parcial en python del lunes y vi un ejercicio que decia implementa un programa para ver si un número es multiplo de 11 o no, yo cojo, le doy la vuelta al número, hago una lista con sus cifras y luego voy recorriendo sus posiciones pares de la lista e impares luego hago la diferencia y veo si es múltiplo de 11 pero ahí me he quedado:
def multiplo11(n):

    L=[]
    count=1
    copia=n
    inv=0
    while copia>=10:
        copia=inv*10+copia%10
        copia=copia//10
    inv=inv*10+copia
    print inv
    copia=inv
    print copia
    while copia>=10:
        copia=copia/10
        count+=1
    c=count
    while n>=1 and c>=0:
        l=inv//(10**(c-1))
        L.append(l)
        inv=inv%10**(c-1)
        c-=1
    sumapares=0
    sumaimpares=0
    len(L)=k
    print L
    for i in xrange(len(L)):
        sumapares=sumapares+L
        sumaimpares=sumaimpares+L

Me quede atascado y no se mas...

30 Enero, 2015, 08:18 pm
Respuesta #1

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,292
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)
No entiendo por qué hacer todo ese procedimiento.
Bastaría hacer esto:


def multiplo11(n):
    return (n % 11) == 0

n = 43
if multiplo11(n) == 1:
    text = "es"
else:
    text = "no es"
   
print("El numero ", n, text,  " multiplo de 11.\n")



Me resultó más complicado mostrar la frase informativa que hacer el cálculo.

A menos que el enunciado del ejercicio explícitamente te pida que trabajes con los dígitos del número, cosa que no veo que esté especificada.


31 Enero, 2015, 12:01 am
Respuesta #2

luis

  • Aprendiz
  • Mensajes: 304
  • Karma: +1/-0
  • Sexo: Masculino

comparto lo de argentinator, aunque supongo que la propuesta sería aplicar el criterio de divisibilidad. en esa dirección, intentaría escribir el programa a alto nivel como un primer avance (no entiendo por qué propones dar vuelta el número original).

supongamos que en lst está la lista de todos los dígitos. luego, realizo esta iteración:
fct = 1
suma = 0
for d in lst:
   suma = suma + fct * d
   fct = - fct

si la suma es menor de diez y es cero, ya está; si tiene más de un dígito, debería chequear que es divisible entre once. usar % sería hacer trampa, porque estoy jugando a que no puedo usarlo. luego,

def programa (entrada):
   lst = transformarNumeroEnLista (entrada)
   suma = 10
   while suma >= 10:
      fct = 1
      suma = 0
      for d in lst:
         suma = suma + fct * d
         fct = - fct
      lst = transformarNumeroEnLista (suma)
   return suma == 0

supongo que transformarNumeroEnLista deberá usar %. así que, a fin de cuentas, sería interesante que para entender realmente el problema quede claro el formato de la entrada, y el uso del módulo.

en fin, no se si sirve para algo lo que acabo de comentar.

saludos

luis

ps. no ejecuté el código.

31 Enero, 2015, 12:59 am
Respuesta #3

energy

  • Experto
  • Mensajes: 561
  • Karma: +0/-0
  • Sexo: Masculino
Siento no haber podido contestar antes, entrenamiento. Mm si te pide utilizar una funcion iterativa, yo ahi cree el numero lo pase a una lista ordenada. Lo inverti solamente porque la regla de divisibilidad empieza a contar por atras.

No entiendo el bucle for que haces restando uno a fct...Puedes explicarme eso con mas detenimiento?

02 Febrero, 2015, 06:45 pm
Respuesta #4

luis

  • Aprendiz
  • Mensajes: 304
  • Karma: +1/-0
  • Sexo: Masculino

hasta donde recuerdo, la idea es sumar los dígitos de las posiciones pares y los de las impares por separado, y luego tomar su diferencia. da lo mismo empezar por la izquierda que por la derecha, así que dar vuelta el número no parece aportar mucho.

mi código no resta uno a nada; cambia el signo de fct. fct vale 1 en las pares y -1 en las impares (o al revés). es decir
fct =  - fct
hace que si fct valía uno, ahora valga menos uno, y si valía menos unos, ahora valga uno.

saludos

luis