问题
is_match:
(str, str) -> bool
第一个参数是拼图,第二个参数是视图。如果视图可以是给定拼图的视图,则返回True。
我的回答
我想出了这个:
def is_match(puzzle, view):
if len(puzzle) != len(view):
return False
if len(puzzle) == len(view):
return True
我也在网上找到了这个:
def is_match(given_puzzle, view):
if len(given_puzzle) != len(view):
return False
unique_letters = set(ch for ch in view if ch != '^')
for (a, b) in zip(given_puzzle, view):
if a in unique_letters and a != b:
return False
return True
我遇到的这个问题是,如果我输入:
is_match('blah', 'tr^^')
对于两个给定的代码,它将返回True。由于字符甚至不匹配字符串的长度,因此必定是错误的 我该怎么做才能解决这个问题?
答案 0 :(得分:1)
基于之前关于这个“益智”游戏的一系列问题,我推断你想要的东西如下:
def is_match(puzzle,view):
return all(p == v for p,v in zip(puzzle,view) if v != '^' )
*请注意,这假设puzzle
和view
具有相同的长度。
这样做是同时迭代拼图和视图,从而将p
和v
(zip
的魔力)中的下一个角色产生。我检查以确保v
不是'^'
(占位符字符)。如果它不是占位符,我会检查它是否等于p
(来自puzzle
的字符)。如果后一次检查失败,则该函数返回False
。否则,它返回True
。