Foros del Web » Programando para Internet » Python »

Pasar de decimal a Octal.

Estas en el tema de Pasar de decimal a Octal. en el foro de Python en Foros del Web. La verdad no caigo. Se hacerlo a mano pero con Python como que no. Ver imagen. Por lo que he entendido, el resultado si me ...
  #1 (permalink)  
Antiguo 02/11/2010, 19:55
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Pasar de decimal a Octal.

La verdad no caigo. Se hacerlo a mano pero con Python como que no.



Ver imagen.

Por lo que he entendido, el resultado si me funciona, claro que lo he hecho en plan chapuza a domicilio y no es cuestión. ¿Hay de una manera de ahcerlo con un simle for in?

[code=python]n1 = 122 / 8
resto1 = 122 % 8
n2 = n1 / 8
resto2 = n1 % 8
n3 = n2 / 8
resto3 = n2 % 8

print n1, n2, n3
print resto3, resto2, resto1[/code]
Cita:
15 1 0
1 7 2
Deba haber otra forma mejor de hacerlo. Puse los datos directamente. Debe ser que te pida una entrada decimal con raw_input con cualquier cifra corta o larga y después un resultado Octal.

Por ejemplo:
- Si introduzco en decimal 145 su Octal es 221.
- Si su valor decimal es 487653276, Octal es 3504177634.

Es la diea principal que me viene bien para hacer estas conversiones, no a la manera que hice porque me estaba buscando la vida de resolver el problema pero es específico y muy incómodo.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #2 (permalink)  
Antiguo 02/11/2010, 23:19
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Pasar de decimal a Octal.

Hay muchas maneras de hacer esto. La mas obvia sería.

Código Python:
Ver original
  1. n = int(raw_input("Dame un numero: "))
  2. print "%o" % n

La segunda mejor manera sería hacer una conversión de base. Y si hay manera de hacerlo con un for in, pero no es la mejor manera. Lo mejor sería hacer un while.
  #3 (permalink)  
Antiguo 03/11/2010, 03:32
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Pasar de decimal a Octal.

Este código de línea está muy bien. Estaba complicándome la vida de la manera que lo hice arriba como pude.

Muchísimas gracias.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #4 (permalink)  
Antiguo 09/11/2010, 09:20
 
Fecha de Ingreso: marzo-2010
Mensajes: 34
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Pasar de decimal a Octal.

La mejor manera de hacerlo es con recursividad
  #5 (permalink)  
Antiguo 09/11/2010, 10:00
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar de decimal a Octal.

Primera idea (lo que quiere decir que se me acaba de ocurrir y debe ser ineficiente...)
La idea es ir dividiendo el cociente y conservando el resto, luego tomar los restos en orden inverso.
La reconstrucción puede ser con join o sumando cada dígito * una potencia adecuada de 10

%

Código Python:
Ver original
  1. def dec_a_oct(n):
  2.     resultado = []
  3.     while n:
  4.         resultado.append(str(n%8))
  5.         n = int(n/8)
  6.  
  7.     resultado.reverse()
  8.     return int(''.join(resultado))

Última edición por AlvaroG; 09/11/2010 a las 10:06
  #6 (permalink)  
Antiguo 09/11/2010, 14:45
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Pasar de decimal a Octal.

@Alvaro posteo una solución sin strings.
Código:
def dec_a_oct(n):
    ans = 0
    i = 0
    while n:
        ans += (n % 8) * (10 ** i)
        n = n / 8
        i += 1
    return ans

print dec_a_oct(122)
  #7 (permalink)  
Antiguo 09/11/2010, 17:53
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Pasar de decimal a Octal.

Muchas gracias.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar

Etiquetas: decimal, pasar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:03.