Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: n1sen en 27 Septiembre 2017, 00:12 am



Título: [Python 3.6] Un intento de no se que... y un problemita
Publicado por: n1sen en 27 Septiembre 2017, 00:12 am
Hola, estaba aburrido y programe esto:

Código
  1. import os
  2.  
  3. filepath = 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 "$$" in linea: # $$ Indica que hay un comentario
  10.        pass
  11.  
  12.    elif "add" in linea: # "add" Indica que los proximos numeros que esten entre comillas simples seran sumados
  13.        arreglo = linea.split('"')
  14.        arreglo2 = linea.split('"')
  15.        # print(arreglo[1])
  16.        # print(arreglo2[1])
  17.        num1 = arreglo[1]
  18.        num2 = arreglo2[1]
  19.  
  20.        int(num1)
  21.        int(num2)
  22.  
  23.        total = float(num1) + float(num2)
  24.        print(total)
  25.  
  26.    elif "clrscr()" in linea:
  27.        os.system('cls')
  28.  
  29.    elif "int" in linea: # "int" Indica que es una variable de tipo entero
  30.        varName = linea.split('"') # Nombre de la variable
  31.        varValue = linea.split('|') # Valor de la variable
  32.  
  33.        print(varName[1])
  34.        print(varValue[1])
  35.  
  36.    elif "putsln" in linea: # putsln Indica que se imprimira un texto
  37.        putslnFunction = linea.split('"')
  38.        printedText = putslnFunction[1]
  39.  
  40.        if printedText == varName[1]: # <== NO FUNCIONA
  41.            print(varValue[1])          
  42.        elif printedText == '':
  43.            print("is null!")
  44.        else:
  45.            print(printedText)
  46.  
  47. archivo.close()
  48.  
  49. print("Code execution finished.")
  50. os.system('pause')
  51.  
  52.  

Bueno, practicamente seria un """""lenguaje de programación""""" (notese la cantidad de comillas) que cree, para escribir código en este """""lenguaje de programación""""" , se hace en un fichero
con extensión .ocl, aunque le puedes poner cualquier extension...
Ejemplo:
Código:
$$Este es un comentario

putsln "áéíóú ÁÉÍÓÚ äëïöü àèìòù"
putsln "Ñandú!"
add "5" "5"
int "variable" |8|
putsln "variable"

Si, una de las sintaxis mas raras. Parece una amalgama de lenguajes
La funcion "add" suma numeros
La función "putsln" imprime texto en pantalla
La función int, es para variables, funciono, hasta que intente que se pueda imprimir variables con la función "putsln"

Como dije anteriormente, ahi empeze a tener problemas, ya que me aparecia que la variable varName (que es el nombre a la variable) y varValue (que es el valor de la variable) no estaban definidas, pero si lo están.

PD: en sí, las partes donde se usa split, lo saque de un código donde me ayudo engel lex, en un tema que cree [Python 3.6] Como hacer que python lea una cadena especifica de un fichero? (https://foro.elhacker.net/scripting/python_36_como_hacer_que_python_lea_una_cadena_especifica_de_un_fichero-t474906.0.html)


Título: Re: [Python 3.6] Un intento de no se que...
Publicado por: n1sen en 27 Septiembre 2017, 00:14 am
Este incomodo momento donde nadie comenta nada y pasa como otra post mas desapercibido...
(Por ahora :))
Lo de arriba lo puse a las 9:54PM, hora chilena


Título: Re: [Python 3.6] Un intento de no se que...
Publicado por: **Aincrad** en 27 Septiembre 2017, 00:57 am
tu mismo te criticas?  :huh:

abres el tema y luego te troleas......   :laugh:  :laugh:  :laugh:  :D  :D  :D XD

(http://oi41.tinypic.com/2zylmdx.jpg)

(http://s6.tinypic.com/33dhvea_th.jpg)


Título: Re: [Python 3.6] Un intento de no se que...
Publicado por: n1sen en 27 Septiembre 2017, 01:07 am
Al parecer sí :P
De paso borro el anterior comentario antes de que llegue otro  :silbar:


Título: Re: [Python 3.6] Un intento de no se que... y un problemita
Publicado por: tincopasan en 27 Septiembre 2017, 08:38 am
realmente me causa gracia este código, pero en fin:
Código
  1. elif "putsln" in linea: # putsln Indica que se imprimira un texto
  2.        putslnFunction = linea.split('"')
  3.        varName = linea.split('"') # Nombre de la variable
  4.        printedText = putslnFunction[1]
  5.        varValue = linea.split('|') # Valor de la variable
  6.        if printedText == varName[1]: # <== NO FUNCIONA
  7.            print(varValue[0])          
  8.  

para que funcione sin cambiar la estrucutra general del código, pero con esta forma de escribir lo estaras complicando y alargando de más.

Edito:
como tuve ganas hice otro código para que veas otra forma simple de hacerlo:
Código
  1. import re
  2.  
  3. class Leer:
  4.    def __init__(self,archivo):
  5.        self.lectura = open(archivo,'r')
  6.        self.sentencias={"add":self.sumar,"putsln":self.salida}
  7.  
  8.    def sumar(self):
  9.        text = linea
  10.        str_pat = re.compile(r'\"(.*?)\"')
  11.        cadena=str_pat.findall(text)
  12.        enteros = list(map(int, cadena))
  13.        print(sum(enteros))
  14.  
  15.  
  16.    def salida(self):
  17.        text = linea
  18.        str_pat = re.compile(r'\"(.*?)\"')
  19.        cadena=str_pat.findall(text)
  20.        print("".join(cadena))
  21.  
  22.    def mostrar(self):
  23.        global linea
  24.        lista_sentencias=sorted(self.sentencias.keys())
  25.        for linea in self.lectura.readlines():
  26.            for cadena in lista_sentencias:
  27.                orden= re.compile(cadena)
  28.                if orden.match(linea):
  29.                    accion = self.sentencias.get(cadena)
  30.                    accion()
  31.        self.lectura.close()            
  32.  
  33.  
  34. archivo1=Leer('prueba.txt')
  35. archivo1.mostrar()
  36.  


Título: Re: [Python 3.6] Un intento de no se que... y un problemita
Publicado por: n1sen en 28 Septiembre 2017, 00:16 am
Muchas gracias  :)


Título: Re: [Python 3.6] Un intento de no se que... y un problemita
Publicado por: n1sen en 28 Septiembre 2017, 01:23 am
Código
  1. import os
  2.  
  3. filepath = 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:
  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 "putslnvar" in linea:
  37.            putslnvarFunction = linea.split('"')
  38.  
  39.            if putslnvarFunction[1] == varValue[1] :
  40.                print(varValue[1]) # envez de imprimirme el valor de la variable, que en este caso es 8, me imprime el nombre de la variable!!!!!!!!!!!!!!!!!!
  41.  
  42.            elif putslnvarFunction[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.  

Ya me aburrí, no lo logro hacer funcionar. :-(
Si alguien sabe, puede tomar el código y arreglarlo, si quieren.