PDA

Visualizza la versione completa : [python] sviluppo semplice IA


sagara_939
01-04-2012, 11:29
ciao a tutti! mi sono appena iscritto, mi sembra un forum affidabile da cui poter avere risposte serie e complete dagli utenti :D premetto che sono anche nel campo della programmazione, ho iniziato da pochissimo e quello che so, l'ho imparato da qualche video e dallo studio del codice di programmi già fatti da altri utenti.
beh, ecco il mio problema. sto creando una semplice IA la quale, una volta scritta la domanda nell'apposito spazio, essa risponde con una risposta predefinita. sino a quando la testavo senza grafica, tutto andava bene. ma l'altro giorno ho deciso di migliorarla, appunto, con una finestra e dei tasti.
però sono fermo in un punto.
vi posto il codice:

#Jhon117 IA By sagara_939

from __future__ import division
import wx



class Jhon117(wx.Frame):
def __init__(self,id,parent,title):
wx.Frame.__init__(self,id,parent,title,size=(400,5 00),style=wx.DEFAULT_MINIFRAME_STYLE)

self.Display=wx.TextCtrl(self,-1,size=(400,80),style=wx.TEXT_ALIGNMENT_RIGHT|wx.T E_READONLY)
self.Display.SetLabel('')
self.Scritta=None

self.Displayin=wx.TextCtrl(self,-1,pos=(1,100),size=(400, 35),style=wx.TEXT_ALIGNMENT_RIGHT) #spazio input
self.Displayin.SetLabel('')
self.Scrittain=None

a={} #jhon quellocheso
file=open("quellocheso.txt", "r")
for riga in file.readlines():
splitted = riga.split('|')
a[splitted[0]] = splitted[1]
file.close() #jhon quellocheso


#inizio bottoni e spazi

self.Invio=wx.Button(self,-1,"Invio",pos=(1,200),size=(40,40),style=wx.TEXT_ALIGNMENT_ CENTER)
self.Chiudi=wx.Button(self,-1,"Chiudi",pos=(1,150),size=(100,20),style=wx.TEXT_ALIGNMENT _CENTER)

#fine bottoni


self.Invio.Bind(wx.EVT_BUTTON,self.Inv,self.Invio)
self.Chiudi.Bind(wx.EVT_BUTTON,self.Clo,self.Chiud i)



def Jhon(self,event): #inizio jhon
self.Displayin.SetLabel(self.Display.GetLabel()+b)



def Clo(self,event):
self.Destroy()
def Inv(self,event):
self.Displayin.SetLabel(self.Displayin.GetLabel())

b=self.Displayin.SetLabel("hfuihefuehfe")
while b!=self.Displayin.SetLabel(""):
b=self.Displayin.SetLabel("")
if a.has_key(b):
print self.Display.SetLabel(a[b])
else:
c=self.Displayin.SetLabel
a[b]=c
d=open("quellocheso.txt","a")
d.write("\n")
d.write(b)
d.write("|")
d.write (c)
d.close()
print self.Display.SetLabel("Grazie!")

self.Scritta=self.Scritta+Jhon(self.Displayin.GetL abel())
self.Display.SetValue(str(self.Scritta))




app=wx.PySimpleApp()
frame=Jhon117(None,-1,'Jhon Grafica Test')
frame.Show()
app.MainLoop()



a parte le possibili "righe inutili" che sono li momentaneamente ;D, il mio problema si presenta qui:

a={} #jhon quellocheso
file=open("quellocheso.txt", "r")
for riga in file.readlines():
splitted = riga.split('|')
a[splitted[0]] = splitted[1]
file.close() #jhon quellocheso

se proverete, quando si avvia il programma da l'errore:
a[splitted[0]] = splitted[1]
IndexError: list index out of range


non riesco proprio a uscirne...

grazie dell'attenzione :D

kerbero1984
02-04-2012, 15:41
Probabilmente quell'array è vuoto . Hai provato a vdere se splitta correttamente ?

albx87
02-04-2012, 15:58
Quoto kerbero1984, quell'errore dice che stai usando un indice che non è presente nell'array.
Prova a stampare le righe del file con una cosa del tipo:


file=open("quellocheso.txt", "r")

for riga in file.readlines():
print riga

file.close()


e vedere che cosa ti stampa...

sagara_939
02-04-2012, 17:13
si l'errore era proprio quello... anche se nel file c'erano 2 voci splittate, era come se fosse vuoto...
ho usato una vecchia copia dello stesso file (con centinaia di frasi) e adesso funziona correttamente... :D

grazie

Loading