0

私がやろうとしていたこと:各文字列をスキャンして、(比較演算子や cmp() 組み込み関数を使用せずに) 2 つの文字列が一致するかどうかを判断します。

私の解決策:

a = input('Please enter the first string to compare:')
b = input('Please enter the second string to compare: ')

while True:
    count = 0
    if a[count] != b[count]:             # code was intended to raise an alarm only after finding the first pair of different elements
        print ('Strings don\'t match! ')
        break
    else:                                # otherwise the loop goes on to scan the next pair of elements
        count = count + 1

質問:[0]テストの結果、このスクリプトは各文字列 の最初の要素 ( ) のみを比較できるようです。2 つの文字列の最初の要素が同じ ( a[0] == b[0]) の場合、残りの文字列はスキャンされません。そして、インタプリタには何も返されません。elseスイートが実行された場合、スクリプト自体も終了しません。

したがって、誰かが私のループ メカニズムの何が問題だったのか、またはこのスクリプトに関する一般的な批評に光を当てることができれば幸いです。どうもありがとうございました!

4

4 に答える 4

1

注意が必要です。現在の方法は次のとおりです (言い換えると、異なる長さの文字列に対して例外が発生することはありません...ただし、正しい答えも得られません)。

not any(c1 != c2 for c1, c2 in zip(s1, s2))

anyが短絡することに注意してください (実装での中断のように)。「aa」、「a」などの部分文字列でテストすると、まだ堅牢ではありません。誤検知が発生します...

代わりに、outerzip を使用することもできます (これは、後の文字列を fillvalue と比較していることを意味します)。

from itertools import izip_longest
not any(c1 != c2 for c1, c2 in izip_longest(s1, s2, fillvalue=''))

実際に:

def compare(s1, s2):
    return not any(c1 != c2 for c1, c2 in izip_longest(s1, s2, fillvalue=''))

s1 = 'ab'
s2 = 'a'
compare(s1, s1) # True
compare(s1, s2) # False
于 2013-06-10T13:09:06.760 に答える
1
a = raw_input('Please enter the first string to compare:')
b = raw_input('Please enter the second string to compare: ')

count = 0 
if len(a) == len(b):
    while count < len(a):
        if a[count] != b[count]:             # code was intended to raise an alarm only after finding the first pair of different elements
            print ('Strings don\'t match! ')
            break
        else:                                # otherwise the loop goes on to scan the next pair of elements
            count = count + 1 
else:
    print "Strings are not of equal length"

raw_input を使用し、count を while ループの外に置き、while True ==> while count != len(a) を変更して、「IndexError: string index out of range」を防止します。

于 2013-06-10T12:57:26.500 に答える