Systemy_dialogowe/elisa_pl.py
Mikołaj Paterka 359c477f3a fixed pairs
2022-03-16 11:30:29 +01:00

89 lines
3.3 KiB
Python

from ast import arg
from dataclasses import replace
import re
import random
ARG_LITERAL = '%'
MAX_ARGS = 5
GOODBYES = ["Do zobaczenia", "Elo"]
QUIT = "wyjscie"
pairs = (
('test (.*)', ('%1',)),
('(.*) test2 (.*)', ('%1 2 %2',)),
('test2 (.*)', ('%1 2',)),
('dobrze|świetnie|swietnie|super', ('To świetnie! Opowiedz mi dlaczego', 'To bardzo dobrze! Z jakiego powodu?')),
('źle|zle|do bani|słabo|slabo', ('Przykro mi. Czhesz o tym porozmawiać?', 'To bardzo dobrze! Z jakiego powodu?')),
('tak|nie', ('ok', ':)', 'mhm', 'okej')),
('lubi[eę] (.*)', ('Ja też! :D Co Ci się w tym najbardziej podoba?', 'Powiedz mi więcej o %1')),
('marz[eę] o (.*)', ('Nie przejmuj się, kiedyś się uda!', 'Hmm... A dlaczego akurat o %1?')),
('powiedz (.*)', ('%1', '%1, nie jestem botem :/')),
('Jak się masz %1',('Dobrze, dziękuję','Dobrze, a jak u Ciebie %1', 'Wszysto w porządku', 'Mogło by być lepiej', 'Źle', 'Bywało lepiej, a jak u Ciebie %1')),
('Co u Ciebie %1',('Dobrze, dziękuję','Dobrze, a jak u Ciebie %1', 'Wszysto w porządku', 'Mogło by być lepiej', 'Źle', 'Bywało lepiej, a jak u Ciebie %1')),
('studia (.*)',('Jak sesja', 'Co studiujesz?', 'Podoba Ci się?', 'UAM')),
('smut[ek|no] (.*)',('Będzie dobrze', 'Pogadajmy', 'Jak mogę pomóc')),
('Czy jesteś botem?',('Nie','Tak, przeszkadza to Tobie?', 'Może się tak wydawać, bo długo pracuję', 'Tak, istnieję w przestrzeni komputera')),
('UAM (.*)', ('UAM to świetna uczelnia','Wydział Matematyki i Informatyki jest najlepszy', 'Na WMI jest najlepszy dziekan', 'Słyszałem, że to najlepsza uczelnia w Poznaniu')),
('pies|kot (.*)',('Kocham psy i koty', 'Uwielbiam zwierzęta', 'Mój pies nazywa się Max', 'Mój kot nazywa się Kica','Masz jakiegoś zwierzaka?')),
('sport (.*)', ('Sport to zdrowie', 'Uprawiasz jakiś sport?', 'Jaką dziedzinę sportu najbardziej lubisz?')),
('(.*) Poznań (.*)', ('Symbolem Poznania są koziołki', 'Rogale marcińskie')),
('(.*)', ('Hmm... Interesujące... Opowiedz mi więcej o %1', 'Powiedz mi więcej o %1')), # '(.*)' to jest odpowiedź na "wszystko", musi być na końcu listy!
)
def main():
is_running = True
while is_running:
user_input = input().lower()
if should_quit(user_input):
is_running = False
continue
for pair in pairs:
search = re.search(pair[0].lower(), user_input)
if not search:
continue
ans = pick_answer(pair)
print(replace_args(ans, search))
break;
print(random.choice(GOODBYES))
def should_quit(input):
return QUIT in input
def get_full_arg_str(arg_number):
return ARG_LITERAL + str(arg_number)
def replace_args(pattern, match):
arg_number = 1
result = pattern
while arg_number <= MAX_ARGS:
if get_full_arg_str(arg_number) in result:
result = substitute_arg(result, match.group(arg_number), arg_number)
arg_number += 1
return result
def substitute_arg(pattern, sub, group_number):
arg = get_full_arg_str(group_number)
return pattern.replace(arg, sub)
def pick_answer(pair):
assert len(pair) == 2
idx = random.randint(0, len(pair[1]) - 1)
return pair[1][idx]
if __name__ == "__main__":
print("Hej jestem Elize! Jak się czujesz?")
main()