Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Error "name 'x' is not defined" en una aplicación Python

23 de mayo de 2015

Mi proyecto consiste en seis archivos de código Python. El primero es el archivo principal del proyecto, llamado Metodos.py, y cuyo código es:

#!/usr/bin/python 
# coding: latin-1
#import os, sys
import Menu
from numpy import *
Menu.elmenu()

Código del archivo Menu.py:

#!/usr/bin/python 
# coding: latin-1
from math import *
import Biseccion 
import PuntoFijo 
import Secante
def op1 (): 
a = float(input("Introduce el extremo inferior del intervalo\n")) 
b = float(input("Introduce el extremo superior del intervalo\n")) 
TOL = float(input("Introduce la tolerancia del metodo\n")) 
Biseccion.biseccion(a, b, TOL, 100) 
Biseccion.dibujar(a, b, TOL, 100) 
def op2 (): 
po = float(input("Introduce el valor inicial\n")) 
TOL = float(input("Introduce la tolerancia del metodo\n")) 
PuntoFijo.puntofijo(po, TOL, 100) 
PuntoFijo.dibujar(po, TOL, 100) 
def op3 (): 
po = float(input("Introduce el primer valor inicial\n")) 
p1 = float(input("Introduce el segundo valor inicial\n")) 
TOL = float(input("Introduce la tolerancia del metodo\n")) 
Secante.secante(po, p1, TOL, 100) 
Secante.dibujar(po, p1, TOL, 100) 
def errhandler (): 
print "Tu eleccion no ha sido la correcta\n"

Archivo Biseccion.py:

#!/usr/bin/python
import Evaluar 
from pylab import * 
from Numeric import *
def biseccion(a, b, TOL, N): 
Evaluar.dicc_seguro['x']=a 
fa = eval(Evaluar.funcion, {"__builtins__":None}, Evaluar.dicc_seguro) 
vectorx = zeros(N, Float64) 
vectory = zeros(N, Float64)
i = 1 
while i<=N : 
p = (a+b)/2.0 
vectorx[i-1] = p 
Evaluar.dicc_seguro['x']=p 
fp = eval(Evaluar.funcion, {"__builtins__":None}, Evaluar.dicc_seguro) 
vectory[i-1]=fp 
if (fp == 0.0) or ( (b-a)/2.0) break 
i = i+1 
if (fa*fp)>0 : 
a = p 
else : 
b = p 
print "La raiz buscada es: ",p, "con", i-1,"iteraciones" 
return [vectorx, vectory]
def dibujar(a,b,TOL, N): 
x = arange(a,b,0.1) 
vectores=biseccion(a, b, TOL, N)
subplot(211) 
plot(x, eval(Evaluar.funcion), linewidth=1.0) 
xlabel('Abcisa') 
ylabel('Ordenada') 
title('Metodo Biseccion con f(x)=' + Evaluar.funcion) 
grid(True) 
axhline(linewidth=1, color='r') 
axvline(linewidth=1, color='r')
subplot(212) 
plot(vectores[0], vectores[1], 'k.') 
xlabel('Abcisa') 
ylabel('Ordenada') 
grid(True) 
axhline(linewidth=1, color='r') 
axvline(linewidth=1, color='r')
show()

Archivo PuntoFijo.py:

#!/usr/bin/python
import Evaluar 
from pylab import * 
from Numeric import *
def puntofijo(po,TOL, N): 
vectorx = zeros(N, Float64) 
vectory = zeros(N, Float64)
i = 1 
while i<=N : 
vectorx[i-1] = po 
Evaluar.dicc_seguro['x']=po 
fp = eval(Evaluar.funcion, {"__builtins__":None}, Evaluar.dicc_seguro) 
vectory[i-1]=fp 
if fabs(po-fp) print "La raiz buscada es: ",po, "con", i-1, "iteraciones" 
break 
i = i+1 
po = fp 
return [vectorx, vectory]
def dibujar(po,TOL, N): 
x = arange(po-2,po+2,0.1) 
vectores=puntofijo(po, TOL, N)
subplot(211) 
plot(x, eval(Evaluar.funcion), linewidth=1.0) 
xlabel('Abcisa') 
ylabel('Ordenada') 
title('Metodo Punto Fijo con f(x)= x - ' + Evaluar.funcion) 
grid(True) 
axhline(linewidth=1, color='r') 
axvline(linewidth=1, color='r')
subplot(212) 
plot(vectores[0], vectores[1], 'k.') 
xlabel('Abcisa') 
ylabel('Ordenada') 
grid(True) 
axhline(linewidth=1, color='r') 
axvline(linewidth=1, color='r')
show()

Archivo Secante.py:

#!/usr/bin/python
import Evaluar 
from pylab import * 
from Numeric import *
def secante(po, p1, TOL, N): 
Evaluar.dicc_seguro['x']=po 
qo = eval(Evaluar.funcion, {"__builtins__":None}, Evaluar.dicc_seguro) 
Evaluar.dicc_seguro['x']=p1 
q1 = eval(Evaluar.funcion, {"__builtins__":None}, Evaluar.dicc_seguro) 
vectorx = zeros(N, Float64) 
vectorx1 = zeros(N, Float64) 
vectory = zeros(N, Float64) 
vectory1 = zeros(N, Float64)
i = 2 
while i<=N : 
p = p1-(q1*(p1-po)/(q1-qo)) 
vectorx[i-2] = po 
vectorx1[i-2] = p1 
Evaluar.dicc_seguro['x']=p 
fp = eval(Evaluar.funcion, {"__builtins__":None}, Evaluar.dicc_seguro) 
vectory[i-2]=qo 
vectory1[i-2]=q1 
if fabs(po-p1) print "La raiz buscada es: ",p, "con", i-2,"iteraciones" 
break
i = i+1 
po = p1 
qo = q1 
p1 = p 
q1 = fp
return [vectorx, vectory, vectorx1, vectory1]
def dibujar(po, p1, TOL, N): 
x = arange(po-2,po+2,0.1) 
vectores=secante(po, p1, TOL, N)
subplot(211) 
plot(x, eval(Evaluar.funcion), linewidth=1.0) 
xlabel('Abcisa') 
ylabel('Ordenada') 
title('Metodo Secante con f(x)= ' + Evaluar.funcion) 
grid(True) 
axhline(linewidth=1, color='r') 
axvline(linewidth=1, color='r')
subplot(212) 
plot(vectores[0], vectores[1], 'r.', vectores[2], vectores[3], 'b.') 
xlabel('Abcisa') 
ylabel('Ordenada') 
grid(True) 
axhline(linewidth=1, color='r') 
axvline(linewidth=1, color='r')
show()

Por último, el archivo Evaluar.py:

from math import *
lista_segura = ['math','acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'de grees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] 
dicc_seguro = dict([ (k, locals().get(k, None)) for k in lista_segura ])
print"METODOS ITERATIVOS PARA APROXIMAR RAICES." 
print "________________________________________\n" 
print "1. Metodo de la Biseccion\n" 
print "2. Metodo del Punto Fijo\n" 
print "3. Metodo de la Secante\n"
funcion = raw_input("Introduce la funcion para la cual vas a aplicar uno de los metodos\n")

El error que se produce es el siguiente:

File "C:\Users\manuela\Desktop\Metodos\PuntoFijo.py", line 20
    break 
    ^
IndentationError: unexpected indent

Respuestas

#1

Según el mensaje de error que nos muestras al final del todo, solucionar este error podría ser bastante sencillo. El problema es que Python es extremadamente estricto con la sintaxis del código. En otros lenguajes de programación no importa cuánto o cómo tabulas el código, pero en Python, si no lo haces exactamente como él espera, el programa no funcionará.

En concreto, el error dice que hay un problema con el break que has escrito así:

if fabs(po-fp) print "La raiz buscada es: ",po, "con", i-1, "iteraciones" 
break

Para solucionarlo, escríbelo así:

if fabs(po-fp) print "La raiz buscada es: ",po, "con", i-1, "iteraciones" 
    break

@javiereguiluz

23 mayo 2015, 10:01