验证word仅使用随机列表中的字母

2024-04-25 14:44:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python构建一个“拼字游戏”。基本上,给用户7个随机生成的字母,这些字母存储在列表random_letters中。然后他们用这些字母输入一个单词-这是一个存储为player1_word的字符串。你知道吗

我要强调的是,我需要验证用户是否输入了有效的单词-例如,isplayer1_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

Tags: 字符串用户answer列表isdef字母random
3条回答

您可以使用set操作来执行此操作:

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

set是只包含唯一项的数据结构。我们的想法是,把它们都转换成一组。然后,从Player1Word中减去randomLetters,看看Player1Word是否包含randomLetters中没有的内容。如果不包含,则Player1Word有效,否则无效。你知道吗

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

Python does not have a native multiset type因此没有一个完整的线性表达式,但是^{}有一点帮助:

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所需的循环。你知道吗

相关问题 更多 >