Идентифицировать числа рядом со словами и выполнять некоторые математические операции - PullRequest
0 голосов
/ 25 июня 2019

Я создаю чат-бота, и мне нужно знать, как выполнить некоторую математическую операцию (скажем, добавление), когда я даю необработанный ввод «Добавить 12 и 13». Как я могу заставить мою программу печатать 25?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

вы можете сделать это с помощью split () и преобразования типа следующим образом:

str=input() #add 12 and 32
str=str.split()
operator=str[0]
first=int(str[1])
second=int(str[3])

if operator=='add':
    print(first+second)

if operator=='substract': #for substract you will use 'from' rather than 'and'
    print(second-first)

if operator=='multiply':
    print(first*second)

if operator=='divide': #for divide you will use 'by' rather than 'and'
    print(first/second) 

, вы получите результат и добавите любое условие в 'if condition'

0 голосов
/ 25 июня 2019

Похоже, регулярные выражения и анонимные функции помогут вам.

Определяя свою лексику и семантику, вы должны захватить все строки; и проверьте, совпадает ли текст чата с операцией, которую вы хотите выполнить:

>> import re
>> input = "add 15 and 12 today"
>> regex = r'(add)\s+(\d+)\s+(and)\s+(\d+)'
>> extracted_words = re.findall(regex, input)

Обратите внимание, что вывод для extracted_words будет выглядеть примерно так:

[('add', '15', 'and', '12')]

Если он совпадает, вы можете сделать что-то вроде этого:

if re.match(regex, input) is not None:
    extracted_words = re.findall(regex, input)

    # Function sum
    # You can define whether your functions or use some defined everywhere 
    sum = lambda extracted_words: reduce(lambda x, y: x + y, map(lambda num: int(num), filter(lambda word: word.isdigit(), extracted_words)))

    total_sum = sum(extracted_words[0])

    ...

    [use your total_sum]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...