как определить палиндром

Я пытаюсь определить палиндром. Это то, что у меня есть до сих пор, но я не уверен, что будет дальше, может кто-нибудь, пожалуйста, помогите мне.

def palindrome(x):

    if x % 2==0:
        index1=0
        index2=0
        aString=str(x)
        number=len(aString)
        index1=number / 2
        index2=number / 2 -1
    else:
        index1=0
        index2=0
        aString=str(aString)
        number=len(aString)
        index1=number / 2 +1
        index2=number / 2 -1

person purple21    schedule 28.02.2013    source источник
comment
Что вы подразумеваете под «определить палиндром»? Вы проверяете, является ли x палиндромом? Трудно понять ваш код, потому что некоторые строки не запускаются (aString = str(aString)).   -  person sfendell    schedule 28.02.2013
comment
Если вы проверяете, является ли строка палиндромом, вы можете просто выполнить x[::-1] == x. Иначе непонятно, в чем ваш вопрос.   -  person Bill Lynch    schedule 28.02.2013
comment
палиндромы обычно также игнорируют разницу в пробелах и знаках препинания. Человек, план, канал — Панама!   -  person Kevin Seifert    schedule 28.02.2013
comment
И используйте .lower() для нечувствительности к регистру.   -  person wim    schedule 28.02.2013


Ответы (3)


Вы можете просто попробовать что-то вроде этого:

sampleString[::-1] == sampleString
person lokoko    schedule 28.02.2013

Попробуй это:

def palindrone(x):
    return x == x[::-1]

Например:

>>palindrone("dad")
True
person Community    schedule 28.02.2013

Для проверки того, является ли слово/строка палиндромом, этого достаточно, хотя, как указывали другие, это память- дорогое решение:

def ispal(s):
    return s == s[::-1]

Чтобы проверить, является ли число палиндромом, существует несколько решений (и мой список далеко не исчерпывающий):

import math

def ispal(n):
    return str(n) == str(n)[::-1]

def ispal2(n):
    digits = math.floor(math.log10(n) + 1)
    for ex in range(1, math.ceil(digits/2)):
        leftdigit = math.floor(n / 10**(digits - ex)) % 10
        rightdigit = math.floor(n / 10**(ex - 1)) % 10
        if not(leftdigit == rightdigit):
            return False

    return True
person Ricardo Altamirano    schedule 28.02.2013