2017-05-05 63 views
0

我正在Python中構建「拼字遊戲」遊戲。基本上,給用戶7個隨機生成的字母,這些字母存儲在列表random_letters中。然後他們使用這些字母輸入一個單詞 - 這是一個字符串,存儲爲player1_word驗證字只使用隨機列表中的字母

我被困在的位是我需要驗證用戶輸入了一個有效的單詞 - 例如player1_word只使用random_letters的字母。

def is_valid_answer(player_word: str, letters: list) -> bool: 
    ... 

預期的行爲:

>>> random_letters = ["D", "O", "G", "P", "X", "K"] 
>>> is_valid_answer("DOG", random_letters) 
True 
>>> is_valid_answer("CAT", random_letters) 
False 
+0

你能證明你試過了什麼嗎? – kuro

+0

先顯示你的方法 –

+0

是你的問題:「我怎樣才能確定一個字符串」單詞「是否只包含某個列表中的字符?」 –

回答

0

您可以使用set操作做到這一點:

if not set(Player1Word) - set(randomLetters): 
    print "Valid" 

set是一個數據結構只包含唯一的項目。這個想法是,轉換他們兩個設置。然後,從Player1Word中減去randomLetters以查看Player1Word是否包含不在randomLetters中的內容。如果它不包含,Player1Word是有效的,否則不是。

+0

謝謝,這工作完美,正是我所期待的。從來不知道「套」,從來沒有遇到過。非常感謝;) – sf318

+0

這個答案有一個微妙的問題。例如,如果我給了字母A,E,O,D,T,W,X並提供答案WOOD,那麼當代碼沒有時,您的代碼會將我的答案報告爲有效。 –

+0

@gz。確實如此,好點。我的測試不徹底!有想法該怎麼解決這個嗎? – sf318

0
randomLetters = [ 'a' , 'b' , 'x'] 

word = input('Enter A word : ') 
first_letter = word[0] 
if first_letter in randomLetters: 
    print('valid') 
else: 
    print('Not valid') 

結果

Enter A word : alex 
valid 

Enter A word : devon 
Not valid 
0

的Python does not have a native multiset type所以沒有相當的單行這一點,但collections.Counter有助於一點:

def is_valid_answer(word, letters): 
    letter_counts = collections.Counter(letters) 
    for letter in word: 
     if not letter_counts[letter]: 
      return False 
     letter_counts[letter] -= 1 
    return True 

使用Counter至少可以節省您的循環你需要填寫一個簡單的dict與計數。

+0

感謝發佈,只要我有機會:) – sf318