-2

私はクランのためにこの電報ボットをコーディングしています。ボットは、テキスト msg 内のいくつかの単語に基づいて返信を送信する必要があります。「Thalia」と「love」という単語を含むグループにテキストを入力し、ボットに応答させたいとします。以下の作品。

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!")

thalia と love を含むメッセージ

「and」または「or」キーワードを使用するとステートメントが機能せず、ボットが狂ってしまうため、このようにコーディングしました。上記で、コーディングすると:elif "thalia" and "love".....動作しません。

これをコーディングする別の方法があれば、ヒントをいただければ幸いです。

現在、「and」と「or」を使用してより多くの単語で同じ手法を試していますが、うまくいきません。「and」と「or」を省略しても問題なく動作します。しかしもちろん、この特定の応答で必要な単語の組み合わせを使用することはできません。

 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")

1つの文に3つの単語が含まれていないコマンドをトリガーしました

このコードをより「プロフェッショナルな」方法で書き直すにはどうすればよいですか? また、動作させるには何を変更する必要がありますか? ボットは、thalia love コードのように単語の組み合わせが使用された場合にのみ応答します。「一致」が使用される場合の代わりに。*

4

1 に答える 1

0

Python は自然言語によく似ていますが、インタープリターは人間のリスナーができることを埋めることができません。「a and b in c」は、「a in c and b in c」と書き出さなければなりません。

if ステートメントを記述する前に、テキストを繰り返しではなく、1 回小文字にする必要があります。次に、句読点と記号を削除した後、それを一連の単語に変換して、小文字の文字列の線形検索が繰り返されないようにします。以下は、ASCII のみの入力の不完全な例です。

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

'matches' スニペットは次のように記述できます。

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")

正規表現マッチングを使用して同じことを行うこともできますが、上記のような論理ステートメントの方がおそらく最初は簡単です。

于 2016-03-17T23:40:26.897 に答える