Python - Código de un programa conversacional

   
Vista:

Código de un programa conversacional

Publicado por Miguel (2 intervenciones) el 15/01/2008 14:01:23
Hola, solo quería colgar este código que hice un día aburrido. Es un programa conversacional, estaba molesto por que el Doctor Abuse no tiene la capacidad de aprender, así que decidí hacer este. Es bastante simple, funciona por tags, según el tag que encuentre responderá... así que le he llamado Loro :) El caso es que es solo una base y creo que se puede pulir algo más. A ver si alguien lo puede aprobechar. Con la opción enseñar puedes ir introduciendo tags y las respuestas a estos, cuando terminas de enseñarle crea el fichero kw.txt y el rp.txt con las preguntas y las respuestas ordenadas desde la mayor longitud a la menor.

Cuando estás conversando y aparece un tag que no conoce te pregunta que responderias tu a eso, y guarda el nuevo tag y la respuesta... esta lista se copia al archivo txt cuando terminas el programa "_quit".

El archivo Q.txt es simplemente una serie de preguntas para continuar la conversación después de que le hayas introducido un nuevo tag mientras estabas conversando. KW.txt y RP.txt se crean solos al enseñarle por primera vez. El Q.txt hay que crearlo de forma manual. Suerte!!

from random import randint
#CONVERSADOR
#Aprender
def aprender(frase):
KW = open("KW.txt",'a')
RP = open("RP.txt",'a')
KW.write(frase)
KW.write(" ")
RP.write(raw_input("Respuesta: "))
RP.write(" ")
#cargar lista de fichero
def ListaDesdeFichero(Nombre,modo):
L = []
F = open(Nombre,modo)
for linea in F:
L.append(linea[:-1])
F.close()
return L
#reordenar fichero
def Reordenar():
listaInicial = ListaDesdeFichero("KW.txt",'r')
nuevaLista = []
memoriaDePosicion = []
size = len(listaInicial)
#recorre la lista inicial almacenando en nueva lista la palabra mas larga
#y su posicion. La elimina y vuelve a tomar el tamaño de la lista hasta
#eliminar todos los elementos:
while size >= 1:
palabraMasLarga = ""
for posicion in range(len(listaInicial)):
if len(listaInicial[posicion]) > len(palabraMasLarga) and posicion not in memoriaDePosicion:
palabraMasLarga = listaInicial[posicion]
pos = int(posicion)
memoriaDePosicion.append(pos)
size -=1
size = len(listaInicial)
while size >= 1:
palabraMasLarga = ""
for posicion in range(size):
if len(listaInicial[posicion]) > len(palabraMasLarga):
palabraMasLarga = listaInicial[posicion]
pos = int(posicion)
nuevaLista.append(palabraMasLarga)
del listaInicial[pos]
size = len(listaInicial)
#Reescribe el fichero KW con el nuevo orden de palabras
aReordenar = open ("KW.txt",'w')
for palabra in nuevaLista:
aReordenar.write(palabra)
aReordenar.write(" ")
aReordenar.close()
#
listaInicial = ListaDesdeFichero("RP.txt",'r')
nuevaLista = []
for p in range(len(listaInicial)):
loc = memoriaDePosicion[p]
nuevaLista.append(listaInicial[loc])
aReordenar = open ("RP.txt",'w')
for palabra in nuevaLista:
aReordenar.write(palabra)
aReordenar.write(" ")
aReordenar.close()
#main
print " Loro 1.0"
print"::::::::::::::::::::::::::::::::::::"
print
print
print "Seleccione Modo"
print " 1 Conversar"
print " 2 Enseñar"
mode = int(raw_input(">> "))
if mode == 1:
QUEST = ListaDesdeFichero("Q.txt",'r')
KW = ListaDesdeFichero("KW.txt",'r')
RP = ListaDesdeFichero("RP.txt",'r')
print " Modo conversación"
print
print "Hola, como va todo?"
entrada = raw_input(">> ")
while entrada.lower() != "_quit":
RESPUESTA = "xcv_1Z"
for r in range(len(KW)):
if KW[r] in entrada.lower()and RESPUESTA == "xcv_1Z":
RESPUESTA = RP[r]
print"."
if RESPUESTA == "xcv_1Z":
print "no se que decir a eso..."
aprender(entrada)
print QUEST[randint(0,len(QUEST)-1)]
else:
print RESPUESTA
entrada = raw_input(">> ")
print "Hasta la proxima!"
Reordenar()
elif mode == 2:
introword = 's'
while introword.lower() == 's':
KW = open("KW.txt",'a')
RP = open("RP.txt",'a')
KW.write(raw_input("Palabra o frase clave: "))
KW.write(" ")
RP.write(raw_input("Respuesta: "))
RP.write(" ")
print
introword = raw_input("Introducir otra palabra? s/n: ")
KW.close()
RP.close()
print "Fin de escritura"
Reordenar()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Código de un programa conversacional

Publicado por Miguel (2 intervenciones) el 15/01/2008 14:06:07
Cuando pone KW.write(" ") o RP.write(" ") en vez de el espacio debería contener "BARRA ene"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

python

Publicado por JORGE (1 intervención) el 19/03/2008 14:42:10
quisiera saber si alguin me pudiera ayudar en encontrar algun python parecido al delphi osea que tenga su modo grafico interno
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Código de un programa conversacional

Publicado por Chema (1 intervención) el 19/12/2008 02:45:42
Hola, me gustaría saber qué tipo de código es; si php o javascript, etc y si puedo utilizarlo en una web. Grácias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Código de un programa conversacional

Publicado por Miguel (1 intervención) el 20/12/2008 00:34:35
¬¬
Estooo, ehm.... es Python, aunque partiendo de este código y con lo explicado es bastante facil adaptarlo a cualquier lenguaje, unas {} por aqui, otras tantas $ por allí y arreglado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar