Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: makiro15 en 21 Octubre 2015, 16:53 pm



Título: Necesito pistas por favor. Python
Publicado por: makiro15 en 21 Octubre 2015, 16:53 pm
Pasar de un numero octal a decimal, nose como hacer que funcione con un número mayor a una cifra.

Código
  1. n=input('Ingrese un número: ')
  2. p='01234567'
  3.  
  4. l=len(n)
  5. q=1
  6. z=2
  7. n1=n
  8. if n in p:
  9.    while (q<=l):
  10.        m=((n[-q]))
  11.        m=int(m)
  12.        o=8**z
  13.        y=(m*o)  
  14.  
  15.  
  16.        print (n,y)
  17.        z+=1
  18.        q+=1


Título: Re: Necesito pistas por favor. Python
Publicado por: kr.chacacreker en 21 Octubre 2015, 19:12 pm
mira las opciones que tienes con las funciones oct() e int(), son las que sirven para pasar de octal a decimal y viceversa. checa tambien hex() y bin().... En el interprete de python help(oct) por ejemplo.


Título: Re: Necesito pistas por favor. Python
Publicado por: engel lex en 21 Octubre 2015, 19:29 pm
con tu código hay un montón de errores... fuera de la solución de kr.chacacreker que es la más practica

en tú código usas "input" pero eso captura un numero, no un string como tú esperas, para eso tienes que usar raw_input

el p es medio absurdo

if n in p tambien carece de sentido, no discutamos el while...


como sería lo más "practico"

n captura por raw input... luego inviertes n usando [::-1]

es decir
Código
  1. n = n[::-1]

asignas a la potencia que vas a usar inicialmente 0 no 2, a demás necesitas una variable que vaya acumulando el resultado

con todo esto simplemente usando un for puedes iterar entre los elementos de n

Código
  1. for numero in n:

"numero" contendrá el numero trabajado... de allí en más es que hagas el cálculo





Título: Re: Necesito pistas por favor. Python
Publicado por: tincopasan en 22 Octubre 2015, 03:57 am
coincido con ambos comentarios, salvo lo del raw input(por suerte ya no se usa más en las versiones de 3x), que por el print supongo es el que estas usando, pero es cierto que input toma strings, para que sea integer sería asi:
Código
  1. n=int(input('Ingrese un número: '))
  2.  
o
Código
  1. n=input('Ingrese un número: ')
  2. n=int(n)
  3.  
y es preferible usar las funciones ya predefinidas como dice kr.chacacreker


Título: Re: Necesito pistas por favor. Python
Publicado por: makiro15 en 23 Octubre 2015, 17:06 pm
mira las opciones que tienes con las funciones oct() e int(), son las que sirven para pasar de octal a decimal y viceversa. checa tambien hex() y bin().... En el interprete de python help(oct) por ejemplo.
Si entiendo mas o menos como usar esas funciones pero mi bendito profe quiere que el procedimiento sea multiplicando y elevando :/
Gracias.



con tu código hay un montón de errores... fuera de la solución de kr.chacacreker que es la más practica

en tú código usas "input" pero eso captura un numero, no un string como tú esperas, para eso tienes que usar raw_input

el p es medio absurdo

if n in p tambien carece de sentido, no discutamos el while...


como sería lo más "practico"

n captura por raw input... luego inviertes n usando [::-1]

es decir
Código
  1. n = n[::-1]

asignas a la potencia que vas a usar inicialmente 0 no 2, a demás necesitas una variable que vaya acumulando el resultado

con todo esto simplemente usando un for puedes iterar entre los elementos de n

Código
  1. for numero in n:

"numero" contendrá el numero trabajado... de allí en más es que hagas el cálculo




Lanzada la pregunta le dije al profe que hay un "for" necesario y me dijo que NO, que con un if bastaba :(
Pero con la ayuda que ya me has brindado, volveré a intentarlo.
Gracias.





coincido con ambos comentarios, salvo lo del raw input(por suerte ya no se usa más en las versiones de 3x), que por el print supongo es el que estas usando, pero es cierto que input toma strings, para que sea integer sería asi:
Código
  1. n=int(input('Ingrese un número: '))
  2.  
o
Código
  1. n=input('Ingrese un número: ')
  2. n=int(n)
  3.  
y es preferible usar las funciones ya predefinidas como dice kr.chacacreker
Efectivamente, ahora usamos python 3.5 XD
Pero diferencia es mínima :)
Gracias.

Mod: No hagas doble post, usa el botón modificar


Título: Re: Necesito pistas por favor. Python
Publicado por: tincopasan en 24 Octubre 2015, 09:26 am
¿es de matemáticas o de python el "profesor"? porque si es de matemáticas que mal método usa para la conversión, lo más normal o fácil es solo dividir y si es de python ponele que no quiera que uses la función oct(), pero podés usar el modulo math y alguna de sus funciones o salvo el int() ¿quiere todo a base de lógica? tipo antigua escuela que no había tantos modulos


Edito: ni siquiera leí bien el tipo de conversión! Error mío!

por perro que soy (y porque me aburre leer los post) al poner mal la info que conteste recién, hice un código más que simple, con un while y un if y variables indicativas.
Código
  1. #-*- coding:utf -8 -*-
  2.  
  3. numero=input('Ingrese un numero: ')
  4. invertido= numero[::-1]
  5. posibles='01234567'
  6. largo = len(numero)
  7. inicio=0
  8. indice=0
  9. elevado=0
  10. convertido=0
  11. while inicio < largo:
  12.    cada_numero=(invertido[inicio])    
  13.    inicio+=1
  14.    if cada_numero in posibles:
  15.        convertir=int(invertido[indice])*8 ** elevado
  16.        indice+=1
  17.        elevado+=1
  18.        convertido+=convertir
  19.  
  20.    else:
  21.        print("El numero {} no corresponde a un octal".format(cada_numero))
  22.  
  23. print ("El número {} octal es en decimal {} ".format (numero,convertido))
  24.  


Título: Re: Necesito pistas por favor. Python
Publicado por: makiro15 en 24 Octubre 2015, 16:48 pm
¿es de matemáticas o de python el "profesor"? porque si es de matemáticas que mal método usa para la conversión, lo más normal o fácil es solo dividir y si es de python ponele que no quiera que uses la función oct(), pero podés usar el modulo math y alguna de sus funciones o salvo el int() ¿quiere todo a base de lógica? tipo antigua escuela que no había tantos modulos


Edito: ni siquiera leí bien el tipo de conversión! Error mío!

por perro que soy (y porque me aburre leer los post) al poner mal la info que conteste recién, hice un código más que simple, con un while y un if y variables indicativas.
Código
  1. #-*- coding:utf -8 -*-
  2.  
  3. numero=input('Ingrese un numero: ')
  4. invertido= numero[::-1]
  5. posibles='01234567'
  6. largo = len(numero)
  7. inicio=0
  8. indice=0
  9. elevado=0
  10. convertido=0
  11. while inicio < largo:
  12.    cada_numero=(invertido[inicio])    
  13.    inicio+=1
  14.    if cada_numero in posibles:
  15.        convertir=int(invertido[indice])*8 ** elevado
  16.        indice+=1
  17.        elevado+=1
  18.        convertido+=convertir
  19.  
  20.    else:
  21.        print("El numero {} no corresponde a un octal".format(cada_numero))
  22.  
  23. print ("El número {} octal es en decimal {} ".format (numero,convertido))
  24.  
._. El profesor es de python y quería que el programa resuelva a la antigua tal como lo acaba de hacer usted. Agradezco su ayuda y sería tonto yo, si no aprovecho lo que me acaba de regalar  :laugh:, no obstante, veo para mi una fuente de conocimientos que aun no había podido aplicar correctamente.
Gracias nuevamente.