Necesito pistas por favor. Python

Iniciado por makiro15, 21 Octubre 2015, 16:53 PM

0 Miembros y 2 Visitantes están viendo este tema.

makiro15

Pasar de un numero octal a decimal, nose como hacer que funcione con un número mayor a una cifra.

Código (python) [Seleccionar]
n=input('Ingrese un número: ')
p='01234567'

l=len(n)
q=1
z=2
n1=n
if n in p:
   while (q<=l):
       m=((n[-q]))
       m=int(m)
       o=8**z
       y=(m*o)  
       
       
       print (n,y)
       z+=1
       q+=1


kr.chacacreker

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.

engel lex

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 (python) [Seleccionar]
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 (python) [Seleccionar]
for numero in n:

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



El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

tincopasan

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

n=int(input('Ingrese un número: '))

o
Código (python) [Seleccionar]

n=input('Ingrese un número: ')
n=int(n)

y es preferible usar las funciones ya predefinidas como dice kr.chacacreker

makiro15

#4
Cita de: 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.
Si entiendo mas o menos como usar esas funciones pero mi bendito profe quiere que el procedimiento sea multiplicando y elevando :/
Gracias.




Cita de: 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 (python) [Seleccionar]
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 (python) [Seleccionar]
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.






Cita de: 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 (python) [Seleccionar]

n=int(input('Ingrese un número: '))

o
Código (python) [Seleccionar]

n=input('Ingrese un número: ')
n=int(n)

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

tincopasan

#5
¿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 (python) [Seleccionar]

#-*- coding:utf -8 -*-

numero=input('Ingrese un numero: ')
invertido= numero[::-1]
posibles='01234567'
largo = len(numero)
inicio=0
indice=0
elevado=0
convertido=0
while inicio < largo:
    cada_numero=(invertido[inicio])     
    inicio+=1
    if cada_numero in posibles:
        convertir=int(invertido[indice])*8 ** elevado
        indice+=1
        elevado+=1
        convertido+=convertir
       
    else:
        print("El numero {} no corresponde a un octal".format(cada_numero))

print ("El número {} octal es en decimal {} ".format (numero,convertido))

makiro15

Cita de: 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 (python) [Seleccionar]

#-*- coding:utf -8 -*-

numero=input('Ingrese un numero: ')
invertido= numero[::-1]
posibles='01234567'
largo = len(numero)
inicio=0
indice=0
elevado=0
convertido=0
while inicio < largo:
    cada_numero=(invertido[inicio])     
    inicio+=1
    if cada_numero in posibles:
        convertir=int(invertido[indice])*8 ** elevado
        indice+=1
        elevado+=1
        convertido+=convertir
       
    else:
        print("El numero {} no corresponde a un octal".format(cada_numero))

print ("El número {} octal es en decimal {} ".format (numero,convertido))

._. 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.