我正在制作猜词游戏。所以如果给我lime-tree
字。然后我想检查该单词中可能的单词。如果我猜到lime
,tree
,time
,reel
或者甚至猜不是真正的单词等,那么它们都是true
,因为它们是由{这个词。如何检查猜到的单词是否在这个词内?
我忘了提到这些字母不能超过给定单词中的指定。
答案 0 :(得分:1)
这是简单的一个
我使用count
,如果在new_word计数中更多的是字母,它将返回错误。或者最后返回正确。
>>> def word_check(original,new_word):
... for x in new_word:
... if new_word.count(x) > original.count(x):
... return "Wrong"
... return "Correct"
...
>>> word_check('lime-tree','trel')
'Correct'
>>> word_check('lime-tree','treeel')
'Correct'
>>> word_check('lime-tree','treeeel')
'Wrong'
>>> word_check('lime-tree','mile')
'Correct'
>>> word_check('lime-tree','miilet')
'Wrong'
答案 1 :(得分:0)
您可以使用Counter
来计算给定单词中的所有字母,并从要检查的单词中减去字母,如下所示:
from collections import Counter
def check_in_given_word(given_word, to_check):
given_word_counter = Counter(given_word)
word_counter = Counter(to_check)
given_word_counter.subtract(word_counter)
#if any -ve letter count is found, it is not in given_word
if any([c < 0 for c in given_word_counter.values()]):
# do whatever you want, or return False
print "{} is NOT in {}".format(to_check, given_word)
else:
print "{} is in {}".format(to_check, given_word)
# print the counter for your info
print given_word_counter
样本用法:
check_in_given_word('lime-tree', 'tree')
tree is in lime-tree
Counter({'e': 1, 'i': 1, 'm': 1, '-': 1, 'l': 1, 'r': 0, 't': 0})
check_in_given_word('lime-tree', 'reel')
reel is in lime-tree
Counter({'e': 1, 'i': 1, 'm': 1, '-': 1, 't': 1, 'l': 0, 'r': 0})
check_in_given_word('lime-tree', 'hello')
hello is NOT in lime-tree
Counter({'e': 2, 'i': 1, 'm': 1, '-': 1, 'r': 1, 't': 1, 'l': -1, 'o': -1, 'h': -1})
check_in_given_word('lime-tree', 'reeeeel')
reeeeel is NOT in lime-tree
Counter({'i': 1, 'm': 1, '-': 1, 't': 1, 'l': 0, 'r': 0, 'e': -2})
如您所见,所有字母都应为+ ve值。如果找到任何负值,则要检查的单词不在您的给定单词中。