2017-01-01 19 views
1
list_match= {"Mada":["yellow","green",],"Alexa":["blonde","brown"],"Sasha":["blue","readhead"],"Andreea":["cameleonic","brunett"]} 

print ('welcome to the "Find your match quiz"') 
print ("Let/'s begain") 

eyes = input ("How should the eyes be?") 
hair=input("How do you want the the hair to be?") 

def cf(response,cond1,cond2,cond3,cond4): 
    if response == (cond1): 
     return response 
    if response == (cond2): 
     return response 
    if response == (cond3): 
     return response 
    if response ==(cond4): 
     return response 
    else: 
     return ("We don't have knowledge of this characteristic.") 

cf(eyes,"green","brown","blue","cameleonic") 
cf(hair,"yellow","blonde","readhead","brunett") 

だから私は少し "Find your match"プログラムを作りたいと思っています。私は、女の子が持っているさまざまな特性に使うことができる機能を作ることに決めました... "ブロンド"青 "の目など... まあ...問題は、私は関数の結合結果を探す方法を知らないということです:cf(応答、con1、cond2、cond3、cond4)、私はしたいエンド印刷では、リストを含むディクショナリで値の組み合わせを探すにはどうすればよいですか?

cf(eyes,"green","brown","blue","cameleonic") 
cf(hair,"yellow","blonde","readhead","brunett") 

ので、私はその辞書にある各真の組み合わせのキーを取得するために、上記辞書で結果間の組み合わせを探すことができます:関数のこの二つの結果を結合します女の子の名前と「あなたが見つけた」文字列...

答えて

0

試してみてください。

def search(*args): 
    for (key, value) in list_match.items(): 
     if value == list(args): 
      return key 


>>> list_match= {"Mada":["yellow","green",],"Alexa":["blonde","brown"],"Sasha":["blue","readhead"],"Andreea":["cameleonic","brunett"]} 
>>> search("cameleonic", "brunett") 
'Andreea' 

あなたがそれをしたいので、これはよりを追加することなく、できるだけ多くの条件を受け入れるとmore ifステートメント

複数の名前を返す場合は、returnyieldに変更します。これは、ジェネレータオブジェクトを作成します、とあなたは言ってそれらを印刷することができます:引数の順序は重要ではありません場合は

>>> list_match= {"Mada":["cameleonic","brunett"],"Alexa":["blonde","brown"],"Sasha":["blue","readhead"],"Andreea":["cameleonic","brunett"]} 
>>> def search(*args): 
    for (key, value) in list_match.items(): 
     if value == list(args): 
      yield key 
>>> ", ".join(name for name in search("cameleonic", "brunett")) 
'Andreea, Mada' 

def search(*args): 
    for (key, value) in list_match.items(): 
     if sorted(value) == sorted(args): 
      yield key 
+0

あなたの応答は私に別の質問をさせてくれます。演算子?私はここから議論の順序が重要であることを知っている、私はちょうど "cameleonic"と "brunett"がその辞書にあるかどうかを知りたい、順序は私には関係ありません... –

+0

更新された答えを参照してください – rassar

1

次のリスト内包表記は一致する属性と名前のリストを与える:

[k for k, v in list_match.items() if v[0] == eyes and v[1] = hair] 
+0

あなたは、コードがどのように動作するかをより詳細に説明していただけますか?ありがとうございました。 –

+1

注文が設定されていないようです。リストインデックス0の目に依存することはできません。クラスが属性の単純なリストより優れているかもしれません。あなたは時折オーバーラップ(茶色の髪の代わりに茶色の目を合わせる)を気にしない限り、「vと髪の毛で目を」試みることができます。また、私は実際のマッチ関数を推薦します。基本的なPython構文の詳細な説明については、チュートリアルやドキュメンテーションのサイトで "dict comprehension"を参照してください。 (PS:最も魅力的な属性は「好きな人」「それはいい人です」外見はいいですが) –

関連する問題