2017-05-05 31 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