Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: RodrigoGuitar en 16 Febrero 2014, 21:19 pm



Título: Error en iniciación a Python.
Publicado por: RodrigoGuitar en 16 Febrero 2014, 21:19 pm

[MOD]: Usa las etiquetas de código.



Hola, hace un par de días empecé a mirar algo de Python. Mi contacto previo con la programación fue corto, en Java, y hace un año, así que se podría decir que estoy de cero. Empecé a familiarizarme con la IDLE de python, y algunas cosas básicas como comparaciones, loops y cadenas, y después de crear el primer "programa"(una copia de la idle funcionando sólo como calculadora) estaba probando a hacer uno para calcular ecuaciones de segundo grado. El caso es que me tira error, y aunque seguro que es una cosa muy básica no consigo apreciarlo ni nada, a ver si me podéis ayudar:

Código
  1. while True: #Loop
  2.  
  3. print("A partir de la forma: a*x^2+b*x+c=0")
  4.  
  5. a=input("Introduce \"a\"")
  6.  
  7. b=input("Introduce \"b\"")
  8.  
  9. c=input("Introduce \"c\"")
  10.  
  11. d=((b**2)-(4*a*c))
  12.  
  13. if d<0:
  14. print("No tiene solución")
  15.  
  16. if d==0:
  17. x=(-b/(2*a))
  18. print("Solucion unica, x=",x)
  19.  
  20. if d>0:
  21. x1=((-b+((b**2 - 4*a*c))**0.5)/(2*a))
  22. x2=((-b-((b**2 - 4*a*c))**0.5)/(2*a))
  23. print("Las soluciones son las siguientes: ",x1," ",x2)



El error aparece después de introducir las tres variables, en la línea en la que se determina "d", y es el siguiente:

Código
  1. Traceback (most recent call last):
  2.  File "<pyshell#21>", line 6, in <module>
  3.    d=((b**2)-(4*a*c))
  4. TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'


Gracias de antemano  ;)



Título: Re: Error en iniciación a Python.
Publicado por: Sainshaca en 17 Febrero 2014, 07:32 am
Tambien soy nuevo y creo que tu error esta en que no estas declarando tus input como INT ya que por defecto un raw_input viene como tipo string deberias declararlo tipo int es decir

a = int(raw_input("Introduce \a\"))


Título: Re: Error en iniciación a Python.
Publicado por: WaAYa HaCK en 17 Febrero 2014, 08:13 am
La función raw_input() recoge los datos en forma de cadena, aunque entres un número. Por eso no puede elevar un texto al cuadrado. Siguiendo el consejo de Sainshaca, con poner int() y dentro el raw_input() lo reconocerá como un entero.

Saludos!


Título: Re: Error en iniciación a Python.
Publicado por: RodrigoGuitar en 17 Febrero 2014, 14:41 pm
Gracias pero con ese código no me reconoce la función raw_input()  :huh:

Anoche estuve probando y al final sí caí en lo que decís, que está declarado como cadena, por lo que añadí a todos los input() un float(input()), con lo que se me resolvió(aunque también tuve que arreglar que cuando la ecuación era en realidad de 1º grado dividía entre cero y daba error).

Aun así, ¿me podéis explicar por favor qué pasa con el raw_input()?

Edito: la versión "final" de lo que terminé anoche fue esta:

Código:
while True:
print("A partir de la forma: a*x^2+b*x+c=0")
a=float(input("Introduce \"a\": "))
b=float(input("Introduce \"b\": "))
c=float(input("Introduce \"c\": "))
d=float((b**2)-(4*a*c))

if a==0:
x=float(-c/b)
print("Solucion unica, x=",x)
else:
if d<0:
print("No tiene solucion.")
if d==0:
x=(-b/(2*a))
print("Solucion unica, x=",x)
if d>0:
x1=float((-b+((b**2 - 4*a*c))**0.5)/(2*a))
x2=float((-b-((b**2 - 4*a*c))**0.5)/(2*a))
print("Las soluciones son las siguientes: ","x1=",x1," x2=",x2)




Título: Re: Error en iniciación a Python.
Publicado por: WaAYa HaCK en 17 Febrero 2014, 17:29 pm
¿Dónde te salta el error esta vez?


Título: Re: Error en iniciación a Python.
Publicado por: RodrigoGuitar en 17 Febrero 2014, 21:12 pm
En el código que he puesto no me salta error, funciona bien pero la duda era cómo usar el raw_input() que me comentasteis. Al utilizarlo, ni siquiera me lo reconoce como algo más que una cadena de texto. No se si tendrá algo que ver, pero estoy usando la shell IDLE 3.3.4.


Título: Re: Error en iniciación a Python.
Publicado por: tmb90 en 18 Febrero 2014, 00:44 am

[MOD]: Usa las etiquetas de código.



No entiendo bien cual es el problema. Simplemente podrias hacer eso, que no seria mas que agregar "raw_" a los "input"


Código
  1. while True:
  2. print("A partir de la forma: a*x^2+b*x+c=0")
  3. a=float(raw_input("Introduce \"a\": "))
  4. b=float(raw_input("Introduce \"b\": "))
  5. c=float(raw_input("Introduce \"c\": "))
  6. d=((b**2)-(4*a*c))
  7.  
  8. if a==0:
  9. x=float(-c/b)
  10. print("Solucion unica, x=",x)
  11. else:
  12. if d<0:
  13. print("No tiene solucion.")
  14. if d==0:
  15. x=(-b/(2*a))
  16. print("Solucion unica, x=",x)
  17. if d>0:
  18. x1=float((-b+((b**2 - 4*a*c))**0.5)/(2*a))
  19. x2=float((-b-((b**2 - 4*a*c))**0.5)/(2*a))
  20. print("Las soluciones son las siguientes: ","x1=",x1," x2=",x2)

Como ves es exactamente lo mismo. Tal vez sea porque uso la version 2.7 de Python, porque en la version 3 fue reformado y ahora solo se llama "input" y no se si el "raw_input" fue deshabilitado. Pero como veras es lo mismo


Título: Re: Error en iniciación a Python.
Publicado por: tincopasan en 18 Febrero 2014, 04:57 am
a partir de la versión 3x raw_input no funciona más, solo input


Título: Re: Error en iniciación a Python.
Publicado por: RodrigoGuitar en 18 Febrero 2014, 22:20 pm
Pues eso era, uso la 3.3.4

Gracias!