1

私はこのプログラムを書きましたが、私が書いた別のプログラムとの統合に問題があります。このプログラムの書き方が私の困難を引き起こしていると思います。別のアプローチに関する提案は大歓迎です。

このプログラムは 2 つの文字列を取り、それらが完全に一致するか、1 文字異なるか、または複数の文字が異なるかを判断します。それらが完全に一致するか、1 文字異なる場合は True を返します。複数の文字が異なる場合は、false を返します。

import string

def similarstrings():
    print "This program will determine whether two strings differ"
    print "by more than one character. It will return True when they"
    print "are the same or differ by one character; otherwise it will"
    print "return False"
    str1 = raw_input("Enter first string:")
    str2 = raw_input("Enter second string:")
    str1 = ' '.join(str1)
    str2 = ' '.join(str2)
    strL1 = string.split(str1, " ")
    strL2 = string.split(str2, " ")
    x = 0
    for i in range(len(strL1)):
        if strL1[i] == strL2[i]:
            x = x + 1
        else:
            x = x
    if x >= len(strL1) - 1:
        print True
    else:
        print False
4

2 に答える 2

2

このアプローチは、gnibbler によって指摘されたような制限された入力セットに対してのみ機能します。組み込みの difflib ライブラリを使用して、文字列間の類似性を見つけることができます。

>>> import difflib
>>> s1 = "some string"
>>> s2 = "same string"
>>> difflib.SequenceMatcher(None, s1, s2).ratio()
0.9090909090909091

上記 (または関連するアプローチ) の詳細については、このスタック オーバーフローの質問を参照してください。

于 2013-02-26T00:20:06.670 に答える
1

1文字違うとはどういう意味かわかりません。あなたのコードは、文字列が同じ長さであると想定しているようです。もしそうなら、これはうまくいくはずです

def similarstrings(str1, str2):
    return sum(i != j for i, j in zip(str1, str2)) <= 1
于 2013-02-26T00:10:04.410 に答える