[Python] Pasar de decimal a Octal.

Iniciado por Meta, 2 Noviembre 2010, 18:15 PM

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

Meta

Debo lograr con for in pasar un número que me pide en raw_input de entrada numeros decimales y a su salida números octales.

Por ahora hice esto pero no me sale, es para dar ideas.

Código (python) [Seleccionar]
decimal = int(raw_input('Introduce un número decimal: '))

valor = 0
for bit in decimal:
    valor += valor + int(bit)

print 'Su valor Octal es', valor


# Se que el valor Octal se representa así \000

Hay que hacerlo con for in y cadenas, no como intenté hacer algo sin sentido.

Código (python) [Seleccionar]
decimal = int(raw_input('Introduce un número decimal: '))

print decimal \000
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Shell Root

CitarLa conversión de un número decimal a octal se hace mediante divisiones sucesivas por 8 y colocando los restos obtenidos en orden inverso. Por ejemplo, para escribir en octal el número decimal 12210 tendremos que hacer las siguientes divisiones:

122 : 8 = 15   Resto: 2
15 : 8 = 1       Resto: 7
1 : 8 = 0         Resto: 1
Lo sabías?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

VirajeCR

Respecto a tu código. Es importante recordar que en python los valores de tipo int no son iterables. Al menos ese código da ese error.

Personalmente creo que la mejor forma de atacar el problema es en la forma que propone Shell Root.

O habrá otra.

Saludos.

Meta

Cita de: Shell Root en  2 Noviembre 2010, 19:19 PM
CitarLa conversión de un número decimal a octal se hace mediante divisiones sucesivas por 8 y colocando los restos obtenidos en orden inverso. Por ejemplo, para escribir en octal el número decimal 12210 tendremos que hacer las siguientes divisiones:

122 : 8 = 15   Resto: 2
15 : 8 = 1       Resto: 7
1 : 8 = 0         Resto: 1
Lo sabías?

Haciendo pruebas he estado comprobando si el resultado que hay que hacer o el Octal que busco está en el resto por lo que interpreto.

Código (python) [Seleccionar]
d = 945698965
D = 567376

resultado = d / D



print resultado # Cociente.
print d % D # ¿Este resto te refieres que en realidad es Octal?


Citar1666
450549 Supuestamente es el resto y no da Octal.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

VirajeCR

Esto está como querer jugar ajedrez sin saberlo.

Acá una ayudita para que aclares tus dudas.

Citarhttp://platea.pntic.mec.es/~lgonzale/tic/binarios/numeracion.html

Meta

#5
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?

Código (python) [Seleccionar]
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

Citar15 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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

Insisto en que tienes serios problemas de lógica :xD
Código (python) [Seleccionar]
n = input('Ingresa un valor: ')
octal = ''
while n!=0:
    octal = str(n%8) + octal
    n /= 8
print(octal)


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

Parece que tengo más problemas más allá de lo que pueda imaginar.

Sin for in ni nada se puede hacer así.
Código (python) [Seleccionar]
n = int(raw_input("Dame un numero: "))
print "%o" % n
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

Pero esa no vale :xD También así:
Código (python) [Seleccionar]
n = input('Ingresa un valor: ')
print(oct(n))


Por otra parte, antes de que en python 3000 se instaurara el input como función única, en python 2.x se usa raw_input para cadenas, e input para números, de este modo te evitas la conversión :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

No lo sabía.

Nota:
Estoy con la versión 2.6 el Python y no me quiero meter en el 3.x todavía. Deja ver si acabo el libro. Esto de aprender desde cero Python, veo que tarda mucho, en mi caso. No soy muy distro con él todavía, pero me engancha horas aquí.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/