我正在设计一个猜词游戏,我需要其中一种功能的帮助。
该函数接收2个输入并返回true或false。
输入my_word包含被猜出并与某个单词匹配的字母。
输入other_word是要与my_input比较的某些单词。
例子:
>>> match_with_gaps("te_ t", "tact")
False
>>> match_with_gaps("a_ _ le", "apple")
True
>>> match_with_gaps("_ pple", "apple")
True
>>> match_with_gaps("a_ ple", "apple")
False
我的问题是像上一个示例一样,将其应用为返回False,但我不确定该怎么做。到目前为止,这是我所做的。它可以工作,但不适用于my_word中一个猜中的字母在other_word中出现2次的情况。在这种情况下,我返回的是true,但应该为False。 输入的格式必须与示例中的格式完全相同(下划线后的空格)。
def match_with_gaps(my_word, other_word):
myWord = []
otherWord = []
myWord_noUnderLine = []
for x in my_word:
if x != " ": # remove spaces
myWord.append(x)
for x in myWord:
if x != "_": # remove underscore
myWord_noUnderLine.append(x)
for y in other_word:
otherWord.append(y)
match = ( [i for i, j in zip(myWord, otherWord) if i == j] ) # zip together letter by letter to a set
if len(match) == len(myWord_noUnderLine): # compare length with word with no underscore
return True
else:
return False
my_word = "a_ ple"
other_word = "apple"
print(match_with_gaps(my_word, other_word))
答案 0 :(得分:1)
您可以创建字符串的“无空格”版本和“无空格,无下划线”版本,然后比较每个字符以查看是否匹配了非下划线字符或是否已使用与下划线相对应的字符。例如:
def match_with_gaps(match, guess):
nospace = match.replace(' ', '')
used = nospace.replace('_', '')
for a, b in zip(nospace, guess):
if (a != '_' and a != b) or (a == '_' and b in used):
return False
return True
print(match_with_gaps("te_ t", "tact"))
# False
print(match_with_gaps("a_ _ le", "apple"))
# True
print(match_with_gaps("_ pple", "apple"))
# True
print(match_with_gaps("a_ ple", "apple"))
# False
答案 1 :(得分:-1)
此行:
if len(match) == len(myWord_noUnderLine)
现在不会给您想要的东西。在“ a_ ple”示例中,空格和“ _”都被删除,因此您的myWord_noUnderLine变量将为“ aple”,因此检查长度匹配肯定会在“ aple”和“ apple”之间失败