代码需要更多的可能性

时间:2012-10-19 17:14:31

标签: python

问题

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。由于字符甚至不匹配字符串的长度,因此必定是错误的 我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

基于之前关于这个“益智”游戏的一系列问题,我推断你想要的东西如下:

def is_match(puzzle,view):
    return all(p == v for p,v in zip(puzzle,view) if v != '^' )

*请注意,这假设puzzleview具有相同的长度。

这样做是同时迭代拼图和视图,从而将pvzip的魔力)中的下一个角色产生。我检查以确保v不是'^'(占位符字符)。如果它不是占位符,我会检查它是否等于p(来自puzzle的字符)。如果后一次检查失败,则该函数返回False。否则,它返回True