2015-10-30 19 views
6

私は、pythonラムダ関数内の3つのif文を使用しようとしています。ここに私のコードは次のとおりです。ラムダ関数内の複数のif文

y=lambda symbol: 'X' if symbol==True 'O' if symbol==False else ' ' 

文だけで罰金などを動作させる場合、私は2を取得することができました基本的に

x=lambda cake: "Yum" if cake=="chocolate" else "Yuck" 

、私はそうでない場合は「」記号がTrueの場合のステートメントは「X」を返しする場合、それがfalseの場合、O「」を使用するためにラムダ関数をしたい、と。私もこれが可能かどうかはわかりませんが、私はインターネット上の情報を見つけることができませんでしたので、私は本当に助けを感謝するでしょう:)

+0

を匿名辞書を使用することができます。最後の 'else'は何を今までに旅行することができましたか? – ddsnowboard

+1

@ddsnowboardブール値ではないほとんどのもの。 – bereal

+0

@berealしたがって、 'symbol'はどんな型でも構わないという考えがありますか? – ddsnowboard

答えて

6

'O'の前にelseがありません。 This作品:

y = lambda symbol: 'X' if symbol==True else 'O' if symbol==False else ' ' 

はしかし、私はあなたがAdam Smith's approachに固執するべきだと思います。私はそれを読むのが簡単だと分かります。

+1

あなたより!これは素晴らしいです。 –

13

あなたはシンボルがブール値である場合には、それだけで2つの値を持つことができ、最終的な「他」を象徴するdict.getのデフォルト値を使用して、これをテストするために、あなたの匿名関数の内部で

y = lambda sym: {False: 'X', True: 'Y'}.get(sym, ' ') 
+0

ありがとう、これは非常に役に立ちます。私はw0lfの答えにちょうど答えたので、それは正確に私の質問に答えたが、あなたのアプローチは間違いなくよりpythonと論理です。 –

+0

@ PM2Ringうわー、あなたは真実性や偽善性をテストするのではなく、値「真」と値「偽」との等価性をテストしているからです。私は編集します –