4

以下は、リストが回文かどうかを確認するコードです。983 に対して正しい出力が得られます。どこが間違っているのでしょうか?

def palindrome(num):
    flag=0
    r=num[::-1]
    for i in range (0, len(num)-1):
        if(r[i]==num[i]):
            flag=1
        else:
            flag=0
    return flag
4

10 に答える 10

23

不一致が発生したらすぐに戻る必要があります。また、半分の長さまで繰り返す必要があります。

def function(...):
    ...
    for i in range (0, (len(num) + 1) / 2):
        if r[i] != num[i]:
            return False
    return True

ところで、そのループは必要ありません。あなたは簡単に行うことができます:

def palindrome(num):
    return num == num[::-1]
于 2013-10-14T16:43:53.690 に答える
4

これは簡単です:

def palindrome(num):
    if num[::-1] == num:
       return True
    else:
       return False
于 2013-10-14T16:44:46.833 に答える
1

不一致forが見つかったかどうかに関係なく、ループはすべての文字のペアをチェックします。したがって、文字列 '38113' の場合、変数は'38113' の最後の桁とその反転バージョン '31183' が等しいかどうかをチェックした後にに設定されるTrueため、が返されます (両方とも 3 に等しいが、文字列はそうではありません)。回文)。したがって、不一致を見つけたらすぐ に戻る必要があります。すべての文字をチェックしても見つからなかった場合は、次のよう に戻ります。flagTrue
FalseTrue

def palindrome(num):
    r = num[::-1]
    for i in range (0, len(num)-1):
        if(r[i] != num[i]):
            return False
    return True  

また、誰かが指摘したように、python のスライスを使用する方が良いでしょう -ドキュメントをチェックしてください。

于 2013-10-14T17:00:40.943 に答える