-2

Я кодирую этот бот телеграммы для своего клана. Бот должен отправить ответ на несколько слов в текстовом msg. Предположим, я набираю текст в группе, содержащей слова «Талия» и «любовь», и я хочу, чтобы бот ответил. Следующие работы.инструкция elif в сочетании с «и» или «или» не работает

elif "thalia" in text.lower(): 
    if "love" in text.lower(): 
     reply("I love u too babe <3." "\nBut I love my maker even more ;).") 
    else: 
     reply("Say my name!") 

msg containing thalia and love

я закодированы это так, потому что, когда я использую «и» или «или» ключевые слова в заявлении не работает и бот сходит с ума. В приведенном выше случае, если я код: elif "thalia" and "love"..... не работает.

Если есть другой способ закодировать это, я был бы признателен за отзыв!

Теперь я пытаюсь использовать ту же технику для большего количества слов с помощью «и» и «или», но это не сработает. Если я уйду »и« и »или« выходят », он отлично работает. Но, конечно, я не могу использовать комбинации слов, которые я хочу, с помощью этого конкретного ответа.

elif "what" or "when" in text.lower(): 
    if "time" or "do" in text.lower(): 
     if "match" in text.lower(): 
      reply ("If you need assistence with matches, type or press /matches") 

it triggered the command without the 3 words in one sentence

Как я могу переписать этот код в более «профессиональной», как и то, что мне нужно изменить, чтобы заставить его работать? Бот отвечает только тогда, когда комбинация слов используется, как в коде любви любви. Вместо того, когда используется «совпадение». *

+0

'if any (x in text.lower() for x in ('time', 'do')' – khelwood

+0

Спасибо, это помогло мне оценить, как помочь моему плохому, что вам пришлось отредактировать мой пост, будет уделять больше внимания следующей время;) – Kevin

ответ

0

Python очень похож на естественный язык, но переводчик не может заполнить то, что могут услышать слушатели. 'a и b in c' должны быть записаны как a в c и b в c '.

Перед тем, как писать инструкции if, вы должны вводить текст в нижнем регистре один раз, а не повторно. Затем превратите его в набор слов, после удаления знаков препинания и символов, чтобы избежать повторных линейных поисков строки с нижним острием. Вот неполный пример ввода только ascii.

d = str.maketrans('', '', '.,!') # 3rd arg is chars to delete 
text = set(text.lower().translate(d).split()) 

Ваш фрагмент «спичек» можно записать следующим образом.

elif (("what" in text or "when" in text) and 
     ("time" in text or "do" in text) and 
     "match" in text) 
    reply ("If you need assistence with matches, type or press /matches") 

Вы также можете использовать регулярные выражения, чтобы сделать то же самое, но логика высказывания типа выше, вероятно, проще начать с.

+0

Ницца, это работает еще лучше Я благодарен за помощь сэр! Мне было интересно, как изменится код, если я захочу добавить «иметь» в той же строке, что и «время» или «сделать». Потому что я не уверен, что вы можете использовать «или» для 3 вещей. Это не сработает правильно: '(« время »в тексте или« делать »в тексте или« иметь »в тексте). Так как это будет работать? – Kevin

+0

'a or b or c' в порядке. Легко попробовать: '>>> False или False или True' будет эхо' True'. –

 Смежные вопросы

  • Нет связанных вопросов^_^