Как проверить наличие палиндрома с помощью логики Python
Я пытаюсь проверить наличие палиндрома с помощью Python. Код, который у меня есть, очень for интенсивный цикл.
И мне кажется, самая большая ошибка, которую люди совершают при переходе с C на Python, заключается в попытке реализовать логику C с помощью Python, из-за чего все работает медленно, и это просто не позволяет максимально использовать язык.
Я вижу на этом веб-сайте. Найдите "C-style for", что в Python нет циклов For в стиле C. Может быть устаревшим, но я интерпретирую это как означающее, что у Python есть свои собственные методы для этого.
Я пытался поискать вокруг, я не могу найти много актуальных советов (Python 3) по этому поводу. Как я могу решить задачу с палиндромом в Python, не используя цикл for?
Я делал это на C в классе, но я хочу сделать это на Python, лично. Проблема из Euler Project, отличный сайт, кстати,.
defisPalindrome(n): lst = [int(n) for n instr(n)] l=len(lst) if l==0 || l==1: returnTrue eliflen(lst)%2==0: for k inrange (l) ##### else: while (k<=((l-1)/2)): if (list[]): #####
for i inrange (999, 100, -1): for j inrange (999,100, -1): if isPalindrome(i*j): print(i*j) break
Я пропускаю здесь много кода. Пять хэшей - просто напоминания для меня.
Конкретные вопросы:
В C я бы создал цикл for, сравнивающий индекс 0 с индексом max, а затем индексирующий 0 + 1 с max-1, пока что-нибудь не получится. Как лучше всего это сделать в Python?
Мой цикл for (в диапазоне in (999, 100, -1), это плохой способ сделать это в Python?
Есть ли у кого-нибудь хороший совет, или хорошие веб-сайты, или ресурсы для людей в моем положении? Я не программист, я не стремлюсь им быть, я просто хочу выучить достаточно, чтобы при написании дипломной работы на степень бакалавра (электротехника) мне не приходилось одновременно ИЗУЧАТЬ применимый язык программирования, пытаясь добиться хороших результатов в проекте. "Как перейти от базового C к отличному применению Python", что-то в этом роде.
Также были бы оценены любые конкретные фрагменты кода для создания отличного решения этой проблемы, мне нужно изучить хорошие алгоритмы.. Я представляю 3 ситуации. Если значение равно нулю или однозначной цифре, если оно нечетной длины, и если оно четной длины. Я планировал писать для циклов...
PS: Проблема в следующем: найдите произведение двух трехзначных целых чисел с наибольшим значением, которое также является палиндромом.
Переведено автоматически
Ответ 1
Питонический способ определить, является ли данное значение палиндромом:
str(n) == str(n)[::-1]
Объяснение:
Мы проверяем, соответствует ли строковое представление n обратному строковому представлению n
[::-1] Фрагмент заботится о переворачивании строки
После этого мы сравниваем на равенство, используя ==
Ответ 2
Альтернативой довольно неинтуитивному [::-1] синтаксису является следующий:
>>> test = "abcba" >>> test == ''.join(reversed(test)) True
reversed Функция возвращает обратную последовательность символов в test.
''.join() снова соединяет эти символы вместе, и между ними ничего нет.
Ответ 3
Просто для справки и для тех, кто ищет более алгоритмичный способ проверки того, является ли данная строка палиндромом, два способа добиться того же (используя while и for циклы):
for letter in letters: if letter == letters[-1]: letters.pop(-1) else: is_palindrome = False break
return is_palindrome
Ответ 4
Потрясающая часть python - это то, что вы можете с ним делать. Вам не нужно использовать индексы для строк.
Будет работать следующее (с использованием фрагментов)
defpalindrome(n): return n == n[::-1]
Что он делает, так это просто переворачивает n и проверяет, равны ли они. n[::-1] переворачивает n (значение -1 означает уменьшение)
"2) Мой цикл for (в диапазоне in (999, 100, -1), это плохой способ сделать это в Python?"
Что касается вышесказанного, вы хотите использовать xrange вместо range (потому что range создаст фактический список, в то время как xrange - быстрый генератор)
Мое мнение по вопросу 3
Я выучил C раньше Python, и я просто прочитал документы и поиграл с ним с помощью консоли. (а также выполняя задачи Project Euler :)