Error en iniciación a Python.

Iniciado por RodrigoGuitar, 16 Febrero 2014, 21:19 PM

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

RodrigoGuitar


[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 (python) [Seleccionar]
while True: #Loop

print("A partir de la forma: a*x^2+b*x+c=0")

a=input("Introduce \"a\"")

b=input("Introduce \"b\"")

c=input("Introduce \"c\"")

d=((b**2)-(4*a*c))

if d<0:
print("No tiene solución")

if d==0:
x=(-b/(2*a))
print("Solucion unica, x=",x)

if d>0:
x1=((-b+((b**2 - 4*a*c))**0.5)/(2*a))
x2=((-b-((b**2 - 4*a*c))**0.5)/(2*a))
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 (python) [Seleccionar]
Traceback (most recent call last):
 File "<pyshell#21>", line 6, in <module>
   d=((b**2)-(4*a*c))
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'



Gracias de antemano  ;)


Sainshaca

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\"))

WaAYa HaCK

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!
La cacatúa yoyó es nueva en el zoo!

RodrigoGuitar

#3
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:

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)



WaAYa HaCK

¿Dónde te salta el error esta vez?
La cacatúa yoyó es nueva en el zoo!

RodrigoGuitar

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.

tmb90

#6

[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 (python) [Seleccionar]
while True:
print("A partir de la forma: a*x^2+b*x+c=0")
a=float(raw_input("Introduce \"a\": "))
b=float(raw_input("Introduce \"b\": "))
c=float(raw_input("Introduce \"c\": "))
d=((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)


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

tincopasan

a partir de la versión 3x raw_input no funciona más, solo input

RodrigoGuitar

Pues eso era, uso la 3.3.4

Gracias!