2011-12-04 26 views
0
commands = ['chat', 'call', 'exit', 'friends', 'status'] 

class MainHub(object): 
    def menu(self): 
     while True: 
      selection = raw_input("> ") 
      if selection != any(commands): 
       print "Not a recognized command!\n" 
      else: 
       print selection 

「認識されないコマンド!」と表示されます。選択はたとえ「チャット」や「コール」のようなものであっても毎回です。これはコードの非常に単純なスニペットですが、私はちょうどそれが間違っているのを見ることができません!入力からコマンドを取得

答えて

4

あなたがnot in構文たい、any機能を望んでいない:

if selection not in commands: 

anyは、その入力のいずれかがTrueであるかどうかを述語計算およびチェックからです。この場合、True要素がcommandsにあるため、入力をany(commands)True)と比較しています。

+0

Gee whiz。私は愚かです。 – TomKo

+0

詳細については、[Pythonリファレンス](http://docs.python.org/library/)を参照してください。 ['any'](http://docs.python.org/library/functions.html#any)もあります。参照情報を簡単に検索するには、検索を実行するか、Google検索を実行します(Google検索を行う方が簡単です)。たとえば、「Python any」を検索します。 –

+0

私はany()のドキュメントを参照しましたが、完全に誤読しました。ああ、今日私は何かを学んだ。 – TomKo

0

変更この行:この他の行について

if selection != any(commands): 

if selection not in commands: 
1

any()戻りTrueは、少なくとも反復可能でTrueに評価引数の要素の一つ、及びFalseもしそうでありません。だから、ここにあなたのコード:commandsが空でない(したがって、「真」)文字列のリストであるとして

if selection != any(commands): 

を見ては、任意のは、ちょうどTrueを返します。コードは次のようになります。

if selection != True: 

何が知りたいのですselectionあなたがこの方法を行うことができますコマンドのリストに存在する場合:

if selection not in commands: 

乾杯!

3

選択!=任意の(コマンド)

これは、私はごく最近、それに気付いて始めましたが、初心者のためのエラーの非常に一般的なクラスのようです。別の一般的な試みは、基本的には同じ過ちであるvalue == (3 or 4 or 5)のようなものを使用することです。

プログラミングでは、比較は比較であり、セットメンバーシップテストはメンバーシップテストの設定です。彼らは混乱させることはできません、彼らは英語ですることができます。プログラミングは、私たちが意味することについて正確にすることを要求し、私たちが本当に意味するものをカジュアルに表現することによって自分自身を誤解させないようにします。

あなたが書いたことは、「selectionが(commandsのいずれかが真であるかどうかの真理値)と等しくない場合」を意味します。ファンクションコールでTrueまたはFalseが返されます(実際には、commandsの少なくとも1つが空でない文字列であるため、Trueが返されます)。実際はすべてが空であり、空でない文字列は空の場合はtrue-ishです。文字列は "false-ish"です)、その値とselectionを比較します。 selectionは文字列であり、文字列はTrueまたはFalseと同じ種類ではなく、ブール値であるため、等しくなることはありません。「それはselectioncommands内に含まれている場合ではない場合」、すなわち、「selectioncommandsのいずれでもない場合、」あなたは何を意味するか

でした。これは、会員制の質問であり、比較の質問ではありません。

Pythonでは、inキーワードを使用して、設定メンバーシップテストを実行します。文法によって、私たちは完全に自然な発音を書くことができますif selection not in commands:、だから我々はif not (selection in commands):と妥協する必要はありません。

関連する問題