0

たとえば、隠し値を持つ 2 つの文字列が与えられ、それらが同じである可能性があるかどうかを知りたいとします。たとえば、'jupiter' という単語があり、'^' が隠し値を表すとします。例: 'jupiter' は = 'j^^^t^r に等しい可能性がありますが、'j^^^' は 4 文字しかないため、または '^a^^^^' は 'jupiter' の 2 番目の文字が int a であるため、そうではありません。 . プログラムの開始方法がわかりません。ありがとうございます。

また、pythonは初めてです、ありがとう!

4

4 に答える 4

3

私は次のようにします:

  1. 2 つの文字列の長さが同じであることを確認します。そうでない場合、それらは同じ単語になることはできません。
  2. 1 つの文字列を反復処理し、カウンター変数を保持します。for index, letter in enumerate(word):これを単純化するために使用できます。
  3. letterfrom の同じ位置にある文字と比較してくださいword2( を使用できますword2[index])。
  4. がaletterではなく^、単語の 2 文字が異なる場合はreturn False、2 つの単語が同じであってはならないためです。
  5. ループが終了したら、まだ戻っていない場合は、return True.

参考までに、不可解なワンライナーを次に示します。

len(w1) == len(w2) and all(a == b or '^' in a + b for a, b in zip(w1, w2))

または正規表現で:

re.match('^{}$'.format(w2.replace('^', '.')), w1)
于 2012-10-19T04:47:09.953 に答える
0

これはうまくいくはずです:

def match(a,b):
    if len(a)!=len(b):
        return "strings don't match"
    else:
        for x,y in zip(a,b):
            if not(any((x=="^",y=="^")) or x==y):
                return "strings don't match"
        return "matched"

print match("jupiter","j^^^t^r")    
print match("jupiter","^a^^^^^")
print match("abc","^b^")
print match("abc","b^^")

出力:

matched
strings don't match
matched
strings don't match
于 2012-10-19T04:48:45.273 に答える
0
def match(st,t):
 if len(st)!=len(t):
  return False
 for i,j in zip(t,st):
   if i!="^" and i!=j:
    return False
 return True

>>> st="jupiter"
>>> t="j^p^^e^"
>>> match(st,t)
True
>>> t="j^"
>>> match(st,t)
False
>>> t="j^pit^e"
>>>
>>> match(st,t)
False
于 2012-10-19T04:46:50.437 に答える
0
>>> def compare(A,B):
...     if not len(A) == len(B): return False
...     return all(a == b or a == '^' or b == '^' for a,b in zip(A,B))
... 
>>> compare('j^^^t^r','jupiter')
True 
于 2012-10-19T04:47:13.543 に答える