[Python 3.6] Un intento de no se que... y un problemita

Iniciado por n1sen, 27 Septiembre 2017, 00:12 AM

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

n1sen

Hola, estaba aburrido y programe esto:

Código (python) [Seleccionar]

import os

filepath = input("Ruta del archivo: ")

archivo = open(filepath, "r", encoding = 'utf-8') # Abre el archivo con codificado UTF-8

for linea in archivo.readlines():
   
   if "$$" in linea: # $$ Indica que hay un comentario
       pass

   elif "add" in linea: # "add" Indica que los proximos numeros que esten entre comillas simples seran sumados
       arreglo = linea.split('"')
       arreglo2 = linea.split('"')
       # print(arreglo[1])
       # print(arreglo2[1])
       num1 = arreglo[1]
       num2 = arreglo2[1]

       int(num1)
       int(num2)
   
       total = float(num1) + float(num2)
       print(total)

   elif "clrscr()" in linea:
       os.system('cls')
 
   elif "int" in linea: # "int" Indica que es una variable de tipo entero
       varName = linea.split('"') # Nombre de la variable
       varValue = linea.split('|') # Valor de la variable

       print(varName[1])
       print(varValue[1])

   elif "putsln" in linea: # putsln Indica que se imprimira un texto
       putslnFunction = linea.split('"')
       printedText = putslnFunction[1]
   
       if printedText == varName[1]: # <== NO FUNCIONA
           print(varValue[1])          
       elif printedText == '':
           print("is null!")
       else:
           print(printedText)

archivo.close()

print("Code execution finished.")
os.system('pause')



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:

$$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?
null

n1sen

#1
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
null

**Aincrad**

tu mismo te criticas?  :huh:

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







n1sen

Al parecer sí :P
De paso borro el anterior comentario antes de que llegue otro  :silbar:
null

tincopasan

#4
realmente me causa gracia este código, pero en fin:
Código (python) [Seleccionar]

elif "putsln" in linea: # putsln Indica que se imprimira un texto
       putslnFunction = linea.split('"')
       varName = linea.split('"') # Nombre de la variable
       printedText = putslnFunction[1]
       varValue = linea.split('|') # Valor de la variable
       if printedText == varName[1]: # <== NO FUNCIONA
           print(varValue[0])          


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 (python) [Seleccionar]

import re

class Leer:
    def __init__(self,archivo):
        self.lectura = open(archivo,'r')
        self.sentencias={"add":self.sumar,"putsln":self.salida}
   
    def sumar(self):
        text = linea
        str_pat = re.compile(r'\"(.*?)\"')
        cadena=str_pat.findall(text)
        enteros = list(map(int, cadena))
        print(sum(enteros))
       
       
    def salida(self):
        text = linea
        str_pat = re.compile(r'\"(.*?)\"')
        cadena=str_pat.findall(text)
        print("".join(cadena))
   
    def mostrar(self):
        global linea
        lista_sentencias=sorted(self.sentencias.keys())
        for linea in self.lectura.readlines():
            for cadena in lista_sentencias:
                orden= re.compile(cadena)
                if orden.match(linea):
                    accion = self.sentencias.get(cadena)
                    accion()
        self.lectura.close()             
                                                       
   
archivo1=Leer('prueba.txt')
archivo1.mostrar()


n1sen

null

n1sen

Código (python) [Seleccionar]

import os

filepath = input("Ruta del archivo: ")

archivo = open(filepath, "r", encoding = 'utf-8') # Abre el archivo con codificado UTF-8

for linea in archivo.readlines():

   if "add" in linea: # "add" Indica que los proximos numeros que esten entre comillas simples seran sumados
       arreglo = linea.split('"')
       arreglo2 = linea.split('"')
           
       # print(arreglo[1])
       # print(arreglo2[1])

       num1 = arreglo[1]
       num2 = arreglo2[1]

       int(num1)
       int(num2)
   
       total = float(num1) + float(num2)
       print(total)

   elif "$$" in linea: # $$ Indica que hay un comentario
       pass

   elif "clrscr()" in linea:
       os.system('cls')
 
   elif "int" in linea: # "int" Indica que es una variable de tipo entero
       varName = linea.split('"') # Nombre de la variable
       varValue = linea.split('|') # Valor de la variable
       
       
       if "putslnvar" in linea:
           putslnvarFunction = linea.split('"')

           if putslnvarFunction[1] == varValue[1] :
               print(varValue[1]) # envez de imprimirme el valor de la variable, que en este caso es 8, me imprime el nombre de la variable!!!!!!!!!!!!!!!!!!

           elif putslnvarFunction[1] == '':
               print("is null!")
     

       # print(varName[1])
       # print(varValue[1])

   elif "putsln" in linea:
       putslnFunction = linea.split('"') # putsln Indica que se imprimira un texto
       printedText = putslnFunction[1]
   
       '''
       if printedText == '':
           print(printedtext)
       else:
           print(printedText) # Imprime el texto que se ha introducido en la función putsln. Ejemplo: putsln "Hola!"
       '''

       print(printedText) # Imprime el texto que se ha introducido en la función putsln. Ejemplo: putsln "Hola!"

archivo.close()

print("Code execution finished.")
os.system('pause')


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