1

私は、プラン英語で特定の文を取り、そこからいくつかのコマンドを抽出する python プログラムを書いています。今は非常に単純ですが、コマンド パーサーから予期しない結果が得られました。少し調べてみると、条件ロジックが意図したとおりに評価されていないようです。

もちろん、これは本当に洗練されていない方法であり、あまりにも冗長です。おそらくニューラルネットワークまたは正規表現、またはそれらの組み合わせを使用して、それを完全に再構築するつもりです。しかし、先に進む前に、このエラーの背後にあるロジックを理解したいと思います。これは非常に重要なことです。コードの一部を次に示します。

if  (("workspace" or "screen" or "desktop" or "switch")  in command) and 
     (("3" or "three" or "third") in command):
    os.system("xdotool key ctrl+alt+3")
    result = True

奇妙なことに、コマンドが「デスクトップ 3」の場合、これは xdotool 行を正しく評価して実行しますが、コマンドが「スイッチ 3」の場合は機能しません。また、「ワークスペース 3」は機能しますが、「ワークスペース 3」は機能しません。

それで、私の質問は、ここで何が起こっているのですか? ここでの条件フローとは何ですか? また、どのように評価されていますか? どうすればそれを修正できますか?私にはいくつかのアイデアがあります (おそらく「ワークスペース」は「コマンド内」にバインドされておらず、ブール値として評価されているため、単に常に True に評価されている可能性があります)、それを本当にしっかりと理解したいと思っています。

ありがとう!

4

2 に答える 2

2

"workspace" or "screen" or "desktop" or "switch"は常に に評価される式"workspace"です。

Python のオブジェクトには真偽値があります。たとえば0、 、False[]およびは false です。''式の結果は、or真と評価される最初の式です。「ワークスペース」はこの意味で「真」です。空の文字列ではありません。

あなたはおそらく次のことを意味していました:

"workspace" in command or "screen" in command or "desktop" in command or "switch" in command

これは、@Ashwini Chaudhary が何に使用したかを表す冗長な方法anyです。

于 2013-06-02T23:42:52.367 に答える