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',('Dobrze, dziękuję','Dobrze, a jak u Ciebie?', 'Wszysto w porządku', 'Mogło by być lepiej', 'Źle', 'Bywało lepiej, a jak u Ciebie?')), ('Co u Ciebie',('Dobrze, dziękuję','Dobrze, a jak u Ciebie?', 'Wszysto w porządku', 'Mogło by być lepiej', 'Źle', 'Bywało lepiej, a jak u Ciebie?')), ('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()