Python: Syntax error en "def" o_o

Iniciado por S3kh, 8 Agosto 2011, 22:38 PM

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

S3kh

 De nuevo yo con mis problemas raros, estoy usando IDLE, estaba probando el siguiente código (Da las raíces de una ecuación cuadrática, y muestra los pasos para hacerla), y realmente, andaba todo bien, iba editando la funcion LinealStep (Que en el código se ocupa de mostrar el paso por paso), y de repente el programa empezó a tirar "Syntax Error", en algo donde no había tocado absolutamente nada. Me marca "def". Y me marca siempre uno. No sé sinceramente cuál es el error sintáctico acá. Se que no tiene que ver con identación (O al menos no me dice eso):

# -*- coding: cp1252 -*-

from os import system
from cmath import sqrt

def Lineal(a, b, c):
       a               = float(a)
       b               = float(b)
       c               = float(c)
       bc              = b ** 2.0
       bcstr           = str(bc)
       
       Disc            = bc - 4.0 * a * c
       DiscStr         = str(Disc)
       DiscStr2        = 'bc - 4.0 * a * c'
       
       Sqr_Res         = sqrt(Disc)
       Sqr_ResStr      = str(Sqr_Res)
       Sqr_ResStr2     = 'R2(bc - 4.0 * a * c)'
       
       NEG_Res         = -b - Sqr_Res / (2.0 * a)
       rNEG_Res        = abs(NEG_Res)
       
       POS_Res         = -b + Sqr_Res / (2.0 * a)
       rPOS_Res        = abs(POS_Res)
       
       print ' '
       print 'Fórmula usada: -b +- R2 <b^2 - 4 * a * c>'
       print '                        -----------------'
       print '                             2 * a      '

       LinealStep(a, b, c, bc, bcstr, Sqr_Res)

       print 'X1 = ', rPOS_Res
       print 'X2 = ', rNEG_Res

def LinealStep(a, b, c, bc, bcstr, Sqr_Res):

       Astr, Bstr, Cstr, BCstr = str(a), str(b), str(c), str(bc)
       print 'Paso 1) Implementar fórmula'
       print 'Paso 2) Reemplazar:'
       print ' a por ', Astr
       print ' b por ', Bstr
       print ' c por ', Cstr

       print 'Quedando asi la formula: ', Bstr, ' +- R2<', Bstr, '^2 + 4 * ', Astr, ' * ', Cstr, '>'
       print ' '* 36, '-' * 25
       print ' '* 45, '2 * ', Astr

       print 'Resolviendo interior de la raiz(Discriminante): '
       print ' ', Bstr, '^2 + 4 * ', Astr, ' * ', Cstr
       print ' ', BCstr, ' + ', str((4 * a) * c)
       print ' ', str(bc + (4 * a) * c), ' '

       print 'Ahora, se calcula la raiz cuadrada de ', str(bc + (4 * a) * c)
       print 'R2<', str(bc + (4 * a) * c, ' = ', Sqr_Res

##ACÁ ME TIRA ERROR MARCANDO "def", pero a veces lo marca en los otros def
def Menu():
       TCuad           = raw_input('Coeficiente de termino cuadratico(a): ')
       TX              = raw_input('Segundo coeficiente(b): ')
       TIndep          = raw_input('Término independiente(c): ')
       print           'La ecuacion quedaria de la siguiente manera: '
       print           int(TCuad), 'X^2 + ', int(TX), 'X + ', int(TIndep)
       Next            = raw_input('Presione enter para hallar raíces: ')
       Lineal(TCuad, TX, TIndep)

Menu()



EDIT: Y ahora, saqué la función Menu, y me marca error en el nombre de la variable TCuad, dejo el código de esa última parte:

def LinealStep(a, b, c, bc, bcstr, Sqr_Res):

        Astr, Bstr, Cstr, BCstr = str(a), str(b), str(c), str(bc)
        print 'Paso 1) Implementar fórmula'
        print 'Paso 2) Reemplazar:'
        print ' a por ', Astr
        print ' b por ', Bstr
        print ' c por ', Cstr

        print 'Quedando asi la formula: ', Bstr, ' +- R2<', Bstr, '^2 + 4 * ', Astr, ' * ', Cstr, '>'
        print ' '* 36, '-' * 25
        print ' '* 45, '2 * ', Astr

        print 'Resolviendo interior de la raiz(Discriminante): '
        print ' ', Bstr, '^2 + 4 * ', Astr, ' * ', Cstr
        print ' ', BCstr, ' + ', str((4 * a) * c)
        print ' ', str(bc + (4 * a) * c), ' '

        print 'Ahora, se calcula la raiz cuadrada de ', str(bc + (4 * a) * c)
        print 'R2<', str(bc + (4 * a) * c, ' = ', Sqr_Res


TCuad           = raw_input('Coeficiente de termino cuadratico(a): ')
TX              = raw_input('Segundo coeficiente(b): ')
TIndep          = raw_input('Término independiente(c): ')
print           'La ecuacion quedaria de la siguiente manera: '
print           int(TCuad), 'X^2 + ', int(TX), 'X + ', int(TIndep)
Next            = raw_input('Presione enter para hallar raíces: ')
Lineal(TCuad, TX, TIndep)


Me marca en rojo TCuad.  Qué onda? O sea, no hay problemas de identación, no es palabra reservada, y me anduvo perfecto :\ se me empezó a buguear con el def de las funciones, saco la función Menu y me tira error en eso u.u


Desde ya muchas gracias de antemano n.n

criskapunk

#1
Una pregunta, estás ejecutando ese código desde el intérprete interactivo o desde un archivo .py?

Edito:
Creo que ya se la causa de la falla ;D
Antes que nada, te falta cerrar un paréntesis en la última línea de la función:

Código (python) [Seleccionar]
print 'R2<', str(bc + (4 * a) * c), ' = ', Sqr_Res

Como te dije arriba, si copiaste todo ese código (La declaración de la función y las siguientes instrucciones) directamente en el intérprete interactivo de Python, tira ese error. Primero tenés que copiar la declaración, darle Enter y una vez que te aparezca el prompt (Esto: >>>) copiar las demás lineas.

Un saludo.