2016-07-26 11 views
-3

myLettersの文字だけを使ってmyWordを書き出して、それができない場合はbool値を返すことができれば、bool値Trueを返す関数を書く必要があります。私は私のletterPoints辞書必要これを行うには
CanWeMakeIt関数Python、何も返さない

global letterPoints 
letterPoints = {"A": 1, "B": 3, "C": 3, "D": 2, "E": 1, "F": 4, "G": 2, "H": 4, "I": 1, "J":8, "K": 5, "L": 1, "M": 3, "N": 1, "O": 1, "P": 3, "Q": 10, "R": 1, "S": 1, "T": 1, "U": 1, "V": 4, "W": 4, "X": 8, "Y": 4, "Z": 10} 

def canWeMakeIt(myWord, myLetters): 
    canMake = True 
    letterPoints= list(myLetters) 
    length=len(myWord) 

    for i in range(length): 
    i=i+1 
    letter=myWord[i] 
    if letter not in letterPoints: 
     canMake = False 
    else: 
     letterPoints.remove(letter) 
    return canMake 
+0

正しい方法ではありません。返されるものは何ですか。 –

+0

と私はどのようにそれを行うのですか? – hackintosjdn

+0

あなたはdictキー文字の値番号だけを使用できますか? –

答えて

1

ここでは、あなたの関数が

def canWeMakeIt(my_word, letters): 
    allowed = list(letters): 
    for i in my_word: 
     if i not in allowed: 
      return False 
    return True 

#NOTICE HOW YOU MUST CALL IT TO DO SOMETHING 
print(canWeMakeIt("cat","tack")) 

で今度は、あなたのコードをanalizeてみましょう:

  • あなたのインデントが正しい
  • ではありません
  • forループでiを増やす必要はありません
  • あなたが方法がわからない場合は、辞書を使用する必要はありません、それは不要だ

Basiclyそれは、このような作品です:あなたが違いに気付か

def canWeMakeIt(myWord, myLetters): 
    canMake = True 
    letterPoints = list(myLetters) 
    length = len(myWord) 
    for i in range(length): 
     letter = myWord[i] 
     if letter not in letterPoints: 
      canMake = False 
    return canMake 

print(canWeMakeIt("cat","tac")) 

;)

+0

ありがとう@ラーニング:) –

+0

ありがとう!本当に!!!! – hackintosjdn

+0

'canWeMakeIt(" cat "、" TAC ")' – Tonechas

0

ますwordの文字をcollections.Counterまで数えることができます。次に、これらの文字と発生回数を辞書のキーと値と比較して、available_lettersに渡します。

from collections import Counter 

def can_we_make_it(word, available_letters): 
    letter_counter = Counter(word.upper()) 
    for letter, count in letter_counter.items(): 
     if count > available_letters.get(letter, 0): 
      return False 
    return True 

この例では、関数に渡された辞書のキーは大文字です。私はここでも同じ仮定をしています。すなわち、available_lettersの鍵はの大文字のです。 Pythonでは大文字と小文字が区別されるため、wordに小文字が含まれる場合は、KeyErrorの例外を避けるために、wordを大文字に変換してword.upper()にする必要があります。

またwordavailable_lettersに存在しない文字が含まれている場合、あなたがKeyError例外を回避するためにcount > available_letters[letter]のではなく、条件count > available_letters.get(letter, 0)を確認する必要があることを指摘する価値があります。

デモ:

In [275]: can_we_make_it('one', {'O': 1, 'N': 1, 'E': 1}) 
Out[275]: True 

In [276]: can_we_make_it('Zone', {'O': 1, 'N': 1, 'E': 1}) 
Out[276]: False 

In [277]: can_we_make_it('Zone', {'O': 1, 'N': 1, 'E': 1, 'Z': 1}) 
Out[277]: True 

In [278]: can_we_make_it('ozone', {'O': 1, 'N': 1, 'E': 1, 'Z': 1}) 
Out[278]: False 

In [279]: can_we_make_it('ozone', {'O': 2, 'N': 1, 'E': 1, 'Z': 1}) 
Out[279]: True 

注:私は彼らがより多くのニシキヘビにするために、識別子を変更する自由を撮影しました。

関連する問題