2016-07-26 91 views
-3

我必須編寫一個函數,該函數應該返回bool值True如果您只能使用myLetters中的字母拼出myWord,並且返回bool值如果不能。
要做到這一點,我需要我的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

你只能使用字典密鑰字母的數值個數嗎? –

回答

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循環
  • 你並不需要使用字典,如果你不知道怎麼了,這是不必要的

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

謝謝@Rawing :) –

+0

謝謝!真!!!! – hackintosjdn

+0

看看會發生什麼,如果你嘗試'canWeMakeIt(「cat」,「TAC」)' – Tonechas

0

你可以統計wordcollections.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()

還值得指出的是,你應該檢查車況count > available_letters.get(letter, 0)而不是count > available_letters[letter]避免KeyError異常,當word包含一個字母是不存在的available_letters

演示:

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 

注:我冒昧改變標識符,使他們更Python。