2017-02-11 34 views
1

現在、課題に取り組んでいて、ややこしくなっています。これにアプローチするための援助を探しています。私は、ユーザが入力する雑誌と身代金の2つの値を取る関数を試そうとしています。もし身代金の中の文字が雑誌で見つかることができるなら、それを返そうとしています。それ以外の場合は、身代金の文字列がマガジンの文字列で見つからない場合はfalseを返します。文字列の文字を辞書のpythonと比較する

マガジン入力:こんにちは

は身代金入力:こんにちは

{ 'H':1、 'E' 身代金は、例えば、ユーザが入力して辞書{キー、vaue}に分割されます。図1に示すように、 'L':2 'O':1}

{ 'H':1、 'E':1、 'L':1、 'O':1}

これは返さなければなりませんtrueですが、 'hello'の2番目の 'l'はカウントされないため、falseを返します。私は間違って何をしていますか?

def compare(magazine, ransom): 
matches = {} 
for ch in ransom: 
    if ch in magazine: 
     if ch in matches: 
      matches[ch] += 1 
     else: 
      matches[ch] = 1 

if ransom in matches: 
    return True 
else: 
    return False 
+0

「ransom in matches」は、「{h ':1、' o ':1、' l ':2、' e ':1}という単語に属しているかどうかをチェックします。 '。与えられたdictのキーである文字列を提供する場合に限り、 'something in dictionary'は' True'を返すでしょう。 – MaLiN2223

答えて

1

試合で身代金場合:すべての

まず、この比較は間違っているようで、身代金がユーザによって入力された文字列のことになって、試合は辞書ことになっています。あなたのコードで

ransom: 'hello' 
matches: {'h': 1, 'e': 1, 'l': 2, 'o': 1} 

だからあなたの条件があれば、のようになります。

if 'h' in {'h': 1, 'e': 1, 'l': 2, 'o': 1}: 
    # this line will be executed 

これを比較するための良い方法:

if 'hello' in {'h': 1, 'e': 1, 'l': 2, 'o': 1}: 
    # this line will not be executed 

それは次のようにする必要があります:

# 1. Processing ransom 
{'h': 1, 'e': 1, 'l': 2, 'o': 1} 
# 2. Processing magazine 
{'h': 2, 'e': 3, 'l': 2, 'o': 1} 
# 3. Comparing each character and counts of both one by one in a for-loop 
この仮定の方法が間違っている可能性:

身代金は、辞書{キー、vaue}

注に分割されます。辞書の比較は文字列の順序を無視し、文字の比較は順序なしで1つずつカウントします。

# Those examples could give unexpected answers 
compare('hello there', 'olleh') 
compare('hello there', 'olleeeh') 
関連する問題