You are on page 1of 5

# -*- coding: cp1252 -*#BLOQUE DE CONSTANTES

#DEFINICION DE CONSTANTES
#DICCIONARIO CON LOS NOMBRES DE LOS ALCANOS Y RADICALES HASTA N=15 (POR AHORA)
prefijos=['','met','et','prop','but','pent','hex','hept','oct','non','dec','unde
c','dodec','tridec','tetradec','pentadec']
prefijos2=['','','di','tri','tetra','penta','hexa','hepta','octa','nona','deca',
'endeca','dodeca']
#BLOQUE DE FUNCIONES
#FUNCION QUE LEE EL TEXTO ENTREGADO POR EL USUARIO
#ENTRADA: Un archivo
#SALIDA: Archivo leido
def abrirArchivo(nombre):
texto = nombre + ".txt"
archivo=open(texto,"r")
return archivo
#FUNCION QUE CONVIERTE EL TEXTO A UNA LISTA DE LISTAS
#ENTRADA: Archivo
#SALIDA: Lista
def convertirTexto(archivo):
linea=''
lista=archivo.readlines()
i=0
listanueva=[]
while i<len(lista):
linea=""
fila=lista[i].splitlines() #ESTA FUNCION ELIMINA EL \N DE UN S
TRING Y LLEVANDOLO A UNA LISTA
linea=linea+fila[0]
listanueva.append(linea)
i=i+2
j=0
listafinal=[]
#SE RECORRE CADA ELEMENTO DE LA LISTA Y SE SEPARA CADA 3 ESPACIOS
while j<len(listanueva):
if "-" in listanueva[j]:
lista1= listanueva[j].split('-')
listafinal.append(lista1)
else:
fila = separarLinea(listanueva[j])
listafinal.append(fila)
j=j+1
return listafinal
#FUNCION QUE AGREGA POSICIONES VACIAS A LA IZQUIERDA DE LA LISTA
#ENTRADA: Lista
#SALIDA: Lista
def separarLinea(linea):
largo = len(linea)
cantidad = (largo-1)/3
lineaSeparada = []
a = 0
b = 0
c = 0
d = 0
temporal = ""

while a < largo:


while b < largo and c < cantidad:
d=b
temporal = ""
while d < 3+b and d < largo:
temporal = temporal+linea[d]
d = d+1
lineaSeparada.append(temporal)
b = b+4
c = c+1
a = a+1
return lineaSeparada
#FUNCION QUE AGREGA POSICIONES VACIAS A LA DERECHA, PARA QUE QUEDE COMO UNA MATR
IZ CUADRADA
#ENTRADA: Lista
#SALIDA: Lista
def igualarLista(lista):
i=0
j=i+1
largo=len(lista)
largoI=len(lista[i])
while j<largo:
largoJ=len(lista[j])
if largoI> largoJ:
diferencia=largoI-largoJ
for i in range (1,diferencia+1):
lista[j].append(' ')
j=j+1
return lista
#ENCONTRAR RADICALES Y SUS POSICIONES PARA LUEGO GUARDARLOS EN UNA LISTA SOLO PA
RA RADICALES
#ENTRADA: Lista alcano
#SALIDA: Lista con Radicales
def encontrarRadicales(lista):
j=1
stringVacio=(' ')
listaRadical=[]
largo=len(lista)
while j < largo:
k=0
largoJ=len(lista[j])
while k<largoJ:
posicion=lista[j][k]
if stringVacio == posicion:
k=k+1
else:
string= str(k+1)+posicion
listaRadical.append(string)
k=k+1
j=j+1
return listaRadical
#ORDENA LOS RADICALES SEPARANDOLOS EN LISTAS INDEPENDIENTES DENTRO DE LA LISTA
#ORDENA LAS POSICIONES EN LA CADENA DE CADA RADICAL
#ENTRADA: Lista con radicales
#SALIDA: Lista con radicales separados

def ordenarRadicales(listaRadical):
i = 0
listaPosiciones=[]
#guardar posiciones en lista
for x in listaRadical:
z=''
for y in x:
if y!="C":
z=z+y
else:
break
posicion=z
listaPosiciones.append(posicion)
#quitar elementos repetidos
listaPosiciones1=[]
for x in listaPosiciones:
if x not in listaPosiciones1:
listaPosiciones1.append(x)
#ordena los radicales en listas independientes
listaRadicalesOrdenados = []
for x in listaPosiciones1:
temporal = []
temporal.append(x)
for y in listaRadical:
if x == y[0]:
temporal.append(y[1:])
listaRadicalesOrdenados.append(temporal)
return listaRadicalesOrdenados
#FUNCION QUE NOMBRA LOS RADICALES
def nombreRadical(listaRadical,prefijos):
i=0
listaNombres=[]
largo= len(listaRadical)
while i <largo:
radical=len(listaRadical[i])-1
nombre=prefijos[radical]+'il'
listaNombres.append(nombre)
i=i+1
return listaNombres
#FUNCION QUE ENCUENTRA EL SENTIDO DE LA CADENA PRINCIPAL
def encontrarSentido(listaRadical,listaPrincipal):
i=0
j=0
listaNum=[]
listaCambiada=[]
while i<len(listaRadical):
numero=int(listaRadical[i][j])
listaNum.append(numero)
i=i+1
largo=len(listaPrincipal)
normal=listaNum[0]-1
cambio=len(listaPrincipal)-listaNum[-1]
if normal<=cambio:
listaOriginal=[]

listaOriginal1=(listaNum)
for x in listaOriginal1:
y=str(x)
listaOriginal.append(y)
return listaOriginal
if normal>cambio:
x=0
while x<len(listaNum):
numero=str((largo+1)-listaNum[x])
listaCambiada.append(numero)
x=x+1
return listaCambiada
#Funcion que actualiza las nuevas posiciones con los respectivos nombres
#Entradas= lista con posicoones, lista con nombres de radicales
#Salida= lista actualizada
def union(lista1,lista2):
i=0
listaUnida=[]
listaFinal=[]
while i<len(lista1):
j=i
listaUnida=[]
while j<=i and j<len(lista2):
numero=lista1[j]
radical=lista2[j]
listaUnida.append(numero)
listaUnida.append(radical)
j=j+1
listaFinal.append(listaUnida)
i=i+1
x=0
while x<len(listaFinal):
y=x
while y<len(listaFinal):
if listaFinal[x][1]>listaFinal[y][1]:
temp=listaFinal[x]
listaFinal[x]=listaFinal[y]
listaFinal[y]=temp
y=y+1
x=x+1
return listaFinal
def nombreCadena(lista,prefijos):
largo=lista[0]
nombre=prefijos[len(largo)]+'ano'
return nombre
def funcionSuprema(listaFinal,nombre):
lista=[]
i=0
while i<len(listaFinal):
posicion=listaFinal[i]
nombre1='-'.join(posicion)
lista.append(nombre1)
i=i+1
alcanoNombre='-'.join(lista)
nombreFinal=alcanoNombre+nombre
return nombreFinal

#BLOQUE PRINCIPAL
#ENTRADA
Texto = raw_input("Ingresar nombre del texto: ")
#PROCESAMIENTO
#SE CREA UNA OPCION BOOLEANA PARA QUE EL PROGRAMA SE EJECUTE SI ES VERDADERO Y T
ERMINE SI ES FALSO
opcion=True
while opcion == True:
archivo1=abrirArchivo(Texto)
lista1=convertirTexto(archivo1)
listaRec=igualarLista(lista1)
radical=encontrarRadicales(listaRec)
listaRadicalOrdenados=ordenarRadicales(radical)
cadenaPrincipal=encontrarSentido(listaRadicalOrdenados,listaRec[0])
nombreRadical=nombreRadical(listaRadicalOrdenados,prefijos)
orden=union(cadenaPrincipal,nombreRadical)
nombreCadenaPrincipal=nombreCadena(listaRec,prefijos)
nombreAlcano=funcionSuprema(orden,nombreCadenaPrincipal)
archivo1.close()
#SALIDA
print
print 'La frmula del alcano es:'
print
for elemento in listaRec: #Recorrera la lista e imprimira por posicion
print elemento
print
print 'Su alcano recibe como nombre:', nombreAlcano
print
print "Desea nombrar nuevamente?"
print "Opcin 1: Si"
print "Opcin 2: No"
respuesta = raw_input("Ingresar opcion deseada: ")
while respuesta!="1" and respuesta !="2":
edir si desea visualizar nuevamente

#Se crea un bucle para p

print "la respuest ingresada es erronea"


print "Desea nombrar nuevamente?"
print "Opcin 1: Si"
print "Opcin 2: No"
respuesta = raw_input("Ingresar opcion deseada: ")
if respuesta == "1":
opcion = True
Texto = raw_input("Ingresar nombre del texto: ")
else:
opcion=False

You might also like