-2

質問

is_match:
(str, str) -> bool

最初のパラメーターはパズルで、2 番目のパラメーターはビューです。ビューが指定されたパズルのビューである可能性がある場合は 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 を返します。文字列の長さだけが一致しないという事実により、どちらが間違っているに違いありませんか?これを修正するにはどうすればよいですか?

4

1 に答える 1

1

この「パズル」ゲームに関する以前の一連の質問に基づいて、次のようなものが必要だと推測します。

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

puzzle*これは、とviewが同じ長さであることを前提としていることに注意してください。

これは、パズルとビューを同時に繰り返し、それぞれから次のキャラクターを生成しますpvの魔法zip)。それが(プレースホルダー文字)vでないことを確認します。'^'プレースホルダーでない場合は、p(からの文字puzzle)と等しいかどうかを確認します。この後者のチェックが失敗した場合はいつでも、関数はを返しますFalse。それ以外の場合は、を返しますTrue

于 2012-10-19T17:24:57.517 に答える