Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: n1sen en 28 Septiembre 2017, 21:33 pm



Título: [Python 3.6] no logro hacer funcionar esto:
Publicado por: n1sen en 28 Septiembre 2017, 21:33 pm
Hola, primero de todo, tengo que explicar de que se trata este código, es una especie de interprete, para un lenguaje de programación (?) que cree yo (ver este tema mio, [Python 3.6] Un intento de no se que... (https://foro.elhacker.net/scripting/python_36_un_intento_de_no_se_que_y_un_problemita-t474992.0.html) para más información)
Acá el código:
Código
  1. import os
  2.  
  3. filepath = "C:/Users/darling/Desktop/prueba2.ocl" # input("Ruta del archivo: ")
  4.  
  5. archivo = open(filepath, "r", encoding = 'utf-8') # Abre el archivo con codificado UTF-8
  6.  
  7. for linea in archivo.readlines():
  8.  
  9.    if "add" in linea: # "add" Indica que los proximos numeros que esten entre comillas simples seran sumados
  10.        arreglo = linea.split('"')
  11.        arreglo2 = linea.split('"')
  12.  
  13.        # print(arreglo[1])
  14.        # print(arreglo2[1])
  15.  
  16.        num1 = arreglo[1]
  17.        num2 = arreglo2[1]
  18.  
  19.        int(num1)
  20.        int(num2)
  21.  
  22.        total = float(num1) + float(num2)
  23.        print(total)
  24.  
  25.    elif "$$" in linea: # $$ Indica que hay un comentario
  26.        pass
  27.  
  28.    elif "clrscr()" in linea: # clrscr() indica en el código que se ha de limpiar la pantalla
  29.        os.system('cls')
  30.  
  31.    elif "int" in linea: # "int" Indica que es una variable de tipo entero
  32.        varName = linea.split('"') # Nombre de la variable
  33.        varValue = linea.split('|') # Valor de la variable
  34.  
  35.  
  36.        if "putsln" in linea:
  37.            putslnFunction = linea.split('"')
  38.  
  39.            if putslnFunction[1] == varValue[1] :
  40.                print(varValue[1]) # envez de imprimirme el valor de la variable, me imprime el nombre de la variable!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  41.  
  42.            elif putslnFunction[1] == '':
  43.                print("is null!")
  44.  
  45.  
  46.        # print(varName[1])
  47.        # print(varValue[1])
  48.  
  49.    elif "putsln" in linea:
  50.        putslnFunction = linea.split('"') # putsln Indica que se imprimira un texto
  51.        printedText = putslnFunction[1]
  52.  
  53.        '''
  54.        if printedText == '':
  55.            print(printedtext)
  56.        else:
  57.            print(printedText) # Imprime el texto que se ha introducido en la función putsln. Ejemplo: putsln "Hola!"
  58.        '''
  59.  
  60.        print(printedText) # Imprime el texto que se ha introducido en la función putsln. Ejemplo: putsln "Hola!"
  61.  
  62. archivo.close()
  63.  
  64. print("Code execution finished.")
  65. os.system('pause')
  66.  
  67.  
  68.  
Bueno, como aparece en el código (línea 40), envés de darme el valor de la variable, me da el nombre, he intentado de todo y no lo logro hacer funcionar.  :-(
Gracias.  :)


Título: Re: [Python 3.6] no logro hacer funcionar esto:
Publicado por: tincopasan en 28 Septiembre 2017, 22:11 pm
voy a intentar ser amable, aunque todos estamos aprendiendo, ese código es un horror(en mi forma amable),¿has debugueado el código poniendo un breakpoint en la línea 40 para ver el valor que tiene cada una de las variables que intentas usar? es más, ¿estás seguro que alguna vez pasa por la condición de la línea 39?
Está bueno tener ideas y quererlas plasmar, pero de ahí a hacer un motor con latas y cuchillos falta un poco.
Revisa la estructura del código, prueba cada una de las partes de forma individual, pon breakspoint, mira que valor tienen las variables y podrás seguir de una forma más fácil esto.   


Título: Re: [Python 3.6] no logro hacer funcionar esto:
Publicado por: n1sen en 28 Septiembre 2017, 22:27 pm
Lo sé, el código es un horror...
Ah, y al depurarlo se saltaba ese if de la linea 39, pero tampoco se ejecutaba el else, asi que me da a saber que hay algo mal ahi, quisas sea el if de la linea 36.
pero si yo pongo esto parte:
Código
  1. putslnFunction = linea.split('"')
  2.  
  3.            if putslnFunction[1] == varValue[1] :
  4.                print(varValue[1]) # envez de imprimirme el valor de la variable, me imprime el nombre de la variable!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  5.  
  6.            elif putslnFunction[1] == '':
  7.                print("is null!")
  8.  
  9.            else:
  10.                pass
  11.  
dentro del
Código
  1. elif "putsln" in linea:
me tira que la variable varValue y varName no están declaradas, cuando si lo están.