pühapäev, 7. detsember 2014

Teen siis ka oma esimese sissekande. Oleme oma projektiga niikaugel, et Helen mässab GUI loomisega ning mina üritan panna vigisevat robotnaist arendama meiega normaalset ja loogilist dialoogi, mis võiks hargneda vastavalt sisestatuud vastustele, mitte kulgeda ainult ühte ettemääratud rada möda. Hetkeseis on seline, et andmesruktuurid on enamvähem paigas ning robot oskab juba natuke rääkida, kuid eriti peale esimese küsimuse-vastuse midagi välja enam ei tule. Homme tuleb siis sellele probleemile lahendus leida. Panen koodi hetkeseisu siiia alla. Helen on ka päris tubli olnud ja graafilise liidese öoomisel üsna palju ära teinud. Tema koodi mingi versioon on eelmises postituses.

Minu kood:

from random import randint
##                #tujud vahemiikus 0-4 kasvavalt. alguses 2. Kui langeb 1 peale
##tuju = 2        #, siis kaotus, kui tõuseb 5 peale, siis võit.
##tujusuund = 5   # kui laneb nulli, siis tuju -= 1; kui tõuseb 10ni, siis += 1
##
##tujud = ["väga_halb", "halb", "nibin_nabin", "hea", "väga_hea"]
##hetkelaused = []
##def tujulaused(tuju):
##    a = tujud[tuju]
##    a = a + "txt"
##    f = open(a)
##    for e in f:
##        e.strip()
##        hetkelaused.append(e)
##    f.close()
##    return(hetkelaused)


#----------------------------andmete sisse lugemine------------------------------------

küsimused = []
vastused = []
lühivastused = []

#loeb sisse küsimused tekstifailist. Igast küsimusest moodustub listi element.
f = open("küsimused.txt")
for e in f:
    e = e.strip()
    küsimused.append(e)
f.close()

#pikematest vastustest on välja võetud võtmesnad. võtmesõnade kombinatsioonid
#moodustavad hulgad. ühele küsimusele vastavad hulgad moodustavad vastuste listis elemendi
f = open('head_vastused.txt')
for e in f:
    templist = []
    e = e.strip().split(',')
    for i in range(len(e)):
        e[i] = e[i].strip()
        hulk = e[i].split()
        templist.append(set(hulk))
    vastused.append(templist)
f.close()

#lühivastustega sama dela, mis küsimustega
f = open('lühivastused.txt')
for e in f:
    e = e.strip().split(',')
    for i in range(len(e)):
        e[i] = e[i].strip()
    lühivastused.append(e)
f.close()
#----------------------------------------funktsioonid-----------------------------------------

#Funktsioon, mis teeb sõnad vastuses hulgaks.
def vastus_set(vastus):
    vastuse_set = set()
    vastus = vastus.lower()
    vastus = vastus.strip().split()
    for e in vastus:
        vastuse_set.add(e)
    return vastuse_set

#selleks, et leida, kas on lühivastus või on tegemist pikema lausega.
def vastuse_pikkus(vastus):
    järjend = []
    vastus = vastus.lower()
    vastus = vastus.strip().split()
    pikkus = len(vastus)
    return pikkus
   

#------------------------------------põhitsükkel--------------------------------------------------  
küsimuse_järg = 0
vastuse_järg = 0
küsimus = False #kui küsimus on küsitud ja vastust pole, siis on True, vastasel juhul False
while True:
    #küsimuste vastuste voor
    while True:
        if küsimus == False:
            print(küsimused[küsimuse_järg])
            vastus = input()
            küsimuse_järg += 1
            break

        elif küsimus == True:
            vastus = input()
            küsimuse_järg += 1
            break
       
    #vastuse kontrolli voor. praegu ainult esimese küsimuse kohta. more to follow
    if vastuse_pikkus(vastus) <= 2:
        vastus = vastus.lower()
        if vastus in lühivastused[vastuse_järg]:
            print("Mis", vastus + "?" " Misasi ma olen siis, paks või?")
            küsimus = True

    if vastuse_pikkus(vastus) > 2:
        vastus_setina = vastus_set(vastus)
        for e in vastused[vastuse_järg]:
            a = len(e)
            b = len(vastus_setina)
            c = vastus_setina - e
            if len(c) == b - a:
                print('aitäh')
                küsimuse_järg += 1
                break

Kommentaare ei ole:

Postita kommentaar