[ Foro de Python ]
Buenas compañeros, primero soy nuevo en el lenguaje de python y estoy llevando un curso con este lenguaje, estoy intentando compilar un código del juego de la vida, solo que me aparece este error:
Traceback (most recent call last):
File "python", line 75, in <module>
NameError: name 'recorre_cadena' is not defined
ya intente solucionarlo definiendo lo así: recorre_cadena=" " pero me sale otro error :
Traceback (most recent call last):
File "python", line 76, in <module>
TypeError: 'str' object is not callable
Alguien me podría apoyar como se solucionaría o en que me estoy equivocando, porfavor.
-----------Código-----------
'''
Programacion de Sistemas Adaptativos
Automatas celulares
Automata con celdas binarias, donde cada celda tiene dos vecinos
'''
import sys
# Imprimir resultado con el formato establecido: 0=blanco, 1=*.
# Entrada: cadena
# Salida: cadena con formato establecido (anexa guiones al principio y al final)
cadena=" "
resultado_formato=" "
def imprime_resultado(cadena):
resultado_formato='_'
for caracter in cadena:
if caracter=='1':
resultado_formato=resultado_formato + '+'
else:
resultado_formato=resultado_formato + 'a'
print ("_")
# Aplicar la regla con la ventana recibida.
# Entrada: Ventana (coleccion de tres celdas, la central y dos vecinos a los lados)
# Salida: 0 o 1, dependiendo de la regla utilizada
# Regla 165: Vecinos con el mismo color=1, de otra manera=0
def procesa_ventana():
if ventana[0]==ventana[2]:
resultado='1'
else:
resultado='0'
# Generar una nueva cadena de acuerdo a una regla (0-255)
# Entrada: cadena actual (t=i)
# Salida: cadena nueva (t=i+1)
def recorre_cadena(cadena):
nueva_cadena=''
for i in range(0,len(cadena)-2):
n=len(cadena)
ventana=cadena[i:i+3]
nueva_cadena=nueva_cadena+procesa_ventana(ventana)
ultima_ventana=cadena[len(cadena)-2]+cadena[len(cadena)-1]+cadena[0]
primera_ventana=cadena[len(cadena)-1]+cadena[0]+cadena[1]
ultima_celda=procesa_ventana(ultima_ventana)
primer_celda=procesa_ventana(primera_ventana)
nueva_cadena=primer_celda+nueva_cadena+ultima_celda;
return nueva_cadena
#-------------------------------------------------------------
# Main (parte principal del programa)
# Cadenas de prueba
mi_cadena="0000000000000000000000000000000000100000000000000000000000000000000000"
#mi_cadena="0000100000"
# Toma la cantidad de iteraciones como argumento de la linea de comand
iteraciones=sys.argv[0]
# Por la cantidad fijada de iteraciones:
# Imprime la cadena actual
# Genera una nueva cadena de acuerdo a la regla
# Reemplaza la cadena actual por esta nueva cadena
for i in range(0,len(iteraciones)):
imprime_resultado(mi_cadena)
nueva_cadena=recorre_cadena(mi_cadena)
mi_cadena=nueva_cadena
Tu fuente se ha pegado sin indentar, supongo que por usar tabulaciones en vez de espacios (la mayoría de editores te permite especificar que las tabulaciones se conviertan a varios espacios, de modo que los fuentes no se descuadren). Así es muy difícil reproducir tu programa para ver dónde está el fallo.
En teoría sí existe en tu fuente una función "recorre_cadena", luego ese error no debería aparecer, pero no puedo probarlo con facilidad para ver rápidamente qué está pasando.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)