下面给出了检查列表是否是回文的代码。它为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(a):
a=raw_input('Enter :')
b=a[::-1]
return a==b
这会更容易:
def palindrome(num):
if num[::-1] == num:
return True
else:
return False
你的for
循环检查所有字符对,无论它是否发现不匹配。因此,在字符串'38113'的情况下,它将返回True
,因为在检查'38113'中的最后一个数字相等并且其反转版本'31183'(均等于3,同时等于3)时,flag
变量将被设置为True
。字符串不是回文)。
所以,你需要在发现不匹配后立即返回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的切片会更好 - 看看documentation。
只是为了记录,以及那些寻找更多算法方法来验证给定字符串是否为回文的人,有两种方法可以实现相同(使用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
而......第二个:
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
str1=str(input('enter string:'))
save=str1
revstr=str1[::-1]
if save==revstr:
print("string is pailandrom")
else:
print("not pailadrom")
# 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()
这会容易得多:
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)
在我看来这是最优雅的:
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
安装与导入时请注意连字符与下划线
a="mom"
b='mom'[::-1] # reverse the string
if a==b: # if original string equals to reversed
print ("palindrome ")
else:
print ("not a palindrome ")