очень новичок в программировании, и я пытаюсь решить несколько задач Project Euler. Я хотел бы знать код Python, который идентифицирует палиндром и не палиндром. Каков наиболее эффективный способ сделать это? не могли бы вы показать код, который вы считаете наиболее эффективным для этой проблемы.
Самая эффективная программа-палиндром для python
Ответы (2)
Вы можете сделать это очень просто, просто проверив, равна ли введенная вами строка самой себе в перевернутом виде (это и есть палиндром).
def check_palindrome(s):
return s == s[::-1]
[::-1]
переворачивает строку, потому что -1
говорит, сколько шагов нужно пройти, а отрицательный будет проходить через строку в обратном порядке.
Если вам нужно будет проверить, являются ли целые числа палиндромами, вы можете сделать:
def check_palindrome(s):
return str(s) == str(s)[::-1]
person
michaelpri
schedule
18.07.2015
Я большой поклонник простоты над (потенциально ложной) оптимизацией. Начните с чего-нибудь прямолинейного и двигайтесь дальше:
def is_palindrom(s):
length = len(s)
for i in range(length / 2):
if s[i] != s[length - i - 1]:
return False
return True
person
Mureinik
schedule
18.07.2015
Преждевременная оптимизация — корень всех зол — Дональд Кнут.
- person Cloud; 18.07.2015
Просто обратите внимание, что это не будет работать для палиндромов нечетной длины.
- person Spencer Wieczorek; 18.07.2015
@Mureinik Это и вам нужно сделать
range
целым числом, range(math.floor(length / 2))
.
- person Spencer Wieczorek; 18.07.2015
@SpencerWieczorek Без какой-либо спецификации версии я просто предположил, что OP означает Python 2. Конечно, в Python 3 вы были бы правы.
- person Mureinik; 18.07.2015
господи, сколько у них версий питона? и они относительно одинаковы?
- person user3667054; 18.07.2015
@user3667054 user3667054 Многие, но люди заботятся о двух версиях: 2.7 и 3.4, и эти две версии несовместимы друг с другом. Лично мне нравится
range(length//2)
независимо от того, какую версию я использую, потому что она будет работать одинаково для обеих. Но они не слишком отличаются.
- person NightShadeQueen; 18.07.2015
Первое правило оптимизации программы: не делайте этого. Второе правило оптимизации программ (только для экспертов!): пока не делайте этого. — Майкл А. Джексон
- person Dleep; 18.07.2015
def isPali(x): return x==int(str(x)[::-1])
, я могу сказать вам, что это не ваша проверка палиндрома, на которую вы будете тратить время. Обычно есть откуда взять время :P - person NightShadeQueen   schedule 18.07.2015