以下に、リストが回文であるかどうかを確認するためのコードを示します。 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
不一致があるとすぐに戻る必要があります。また、半分の長さまで繰り返す必要があります。
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]
これは簡単です:
def palindrome(num):
if num[::-1] == num:
return True
else:
return False
for
ループは、不一致が見つかったかどうかに関係なく、文字のすべてのペアをチェックします。したがって、文字列「38113」の場合、「38113」の最後の桁が等しいかどうかをチェックした後、True
変数がflag
に設定されるため、True
が返されます。そしてその逆バージョン「31183」(文字列は回文ではありませんが、両方とも3に等しい)。
したがって、不一致を見つけた直後にFalse
を返す必要があります。すべての文字をチェックしても見つからなかった場合は、次のようにTrue
を返します。
def palindrome(num):
r = num[::-1]
for i in range (0, len(num)-1):
if(r[i] != num[i]):
return False
return True
また、誰かが指摘したように、Pythonのスライスを使用する方が良いでしょう- ドキュメント をチェックしてください。
ここに私の意見では最もエレガントです:
def is_palindrome(s):
if s != '':
if s[0] != s[-1]:
return False
return is_palindrome(s[1:-1])
return True
is_palindrome()関数のコードも同じです。
pip install is-palindrome
>>> from is_palindrome import is_palindrome
>>> x = "sitonapanotis"
>>> y = is_palindrome(x)
>>> y
True
インストールとインポートの際には、ハイフンとアンダースコアに注意してください。
これははるかに簡単です:
def palindrome(num):
a=num[::-1]
if num==a:
print (num,"is palindrome")
else:
print (num,"is not palindrome")
x=input("Enter to check palindrome:")
palindrome(x)
str1=str(input('enter string:'))
save=str1
revstr=str1[::-1]
if save==revstr:
print("string is pailandrom")
else:
print("not pailadrom")
記録のために、そして与えられた文字列が回文であるかどうかを検証するためのよりアルゴリズム的な方法を探している人のために、同じことを達成するための2つの方法(while
とfor
ループを使用):
def is_palindrome(Word):
letters = list(Word)
is_palindrome = True
i = 0
while len(letters) > 0 and is_palindrome:
if letters[0] != letters[-1]:
is_palindrome = False
else:
letters.pop(0)
if len(letters) > 0:
letters.pop(-1)
return is_palindrome
そして.... 2番目のもの:
def is_palindrome(Word):
letters = list(Word)
is_palindrome = True
for letter in letters:
if letter == letters[-1]:
letters.pop(-1)
else:
is_palindrome = False
break
return is_palindrome
# We are taking input from the user.
# Then in the function we are reversing the input i.e a using
# slice [::-1] and
# storing in b
# It is palindrome if both a and b are same.
a = raw_input("Enter to check palindrome:")
def palin():
#Extended Slices to reverse order.
b = a[::-1]
if a == b:
print "%s is palindrome" %a
else:
print "%s is not palindrome" %a
palin()