Как проверить на палиндром, используя Python логика

Я'м пытаются проверить на палиндром с Python. Код у меня очень " за " -цикл интенсивной.

И мне кажется, самую большую ошибку делают люди, когда едут из C в Python пытается реализовать логику с использованием Python, который делает вещи медленно, и это's просто не язык.

Я смотрю на этот сайт. Поиск на "c-стиль для" Ну, что Python не'Т У с-стиль для петли. Может быть устаревшей, но я интерпретировать это означает, Python имеет свои собственные методы для этого.

Я'вэ пытался смотреть вокруг, я могу'т найти много актуальной (в Python 3) совет для этого. Как я могу решить палиндромом задача в Python, без использования цикла for?

Я'ве сделали это в C в класс, но я хочу сделать это в Python, на личной основе. Проблема с Проект Эйлера, отличный сайт, кстати.

def isPalindrome(n):
    lst = [int(n) for n in str(n)]
    l=len(lst)
    if l==0 || l==1:
        return True
    elif len(lst)%2==0:
        for k in range (l)
        #####
    else:
        while (k<=((l-1)/2)):
            if (list[]):
                #####   

for i in range (999, 100, -1):
    for j in range (999,100, -1):
        if isPalindrome(i*j):
            print(i*j)
            break

Я'м пропавших много кода здесь. Пять хэши просто напоминания для себя.

Конкретные вопросы:

  1. В C, я хотел бы сделать для петли сравнение индекса 0 до индекса максимум, а затем индекса 0+1 С Max-1, пока что-то не то. Как лучше всего сделать это в Python?

  2. Мой цикл for (В ассортименте (999, 100, -1), это плохой способ сделать это в Python?

  3. У кого-нибудь есть дельный совет, или хорошие сайты, или ресурсы для людей в моем положении? Я'м не программист, я не'т стремится быть одна, я просто хочу узнать настолько, что когда я пишу свои бакалавр'ы степень дипломной работы (электротехника), я не'т придется одновременно изучать соответствующий язык программирования, при попытке получить хорошие результаты в проекте. "Как перейти от базового C до большое применение в Python" Ну и тому подобное.

  4. Какие-либо конкретные фрагменты кода, чтобы сделать отличное решение этой проблемы также буду признателен, мне нужно узнать хорошие алгоритмы.. я приметила 3 ситуаций. Если значение равно нулю или одной цифры, если оно нечетной длины, а если даже длина. Я собиралась написать для петель...

ЗЫ: задача: найти максимальное значение продукта из двух 3-значных чисел, что также является палиндромом.

Комментарии к вопросу (5)
Решение

Типичный для Python способ определить, если данное значение является палиндромом:

str(n) == str(n)[::-1]

Объяснение:

  • Мы'повторно проверять, если строковое представление Н равна перевернутое представление строки п
  • В [::-1] кусок заботится инвертирования строки
  • После этого, мы сравниваем на равенство, используя ==
Комментарии (8)

Альтернативой довольно сложным [::синтаксис -1] это:

>>> test = "abcba"
>>> test == ''.join(reversed(test))
True

В обратной функция возвращает обратную последовательность символов в "тест".

&#39;&#39;.присоединяйтесь к() объединяет эти персонажи снова вместе с ничего между ними.

Комментарии (4)

Просто для записи, и для тех, кто ищет более алгоритмический способ проверить, если данная строка является палиндромом, два пути для достижения того же (через А и для петли):

def is_palindrome(word):

    letters = list(word)    
    is_palindrome = True
    i = 0

    while len(letters) > 0 and is_palindrome:        
        if letters[0] != letters[(len(letters) - 1)]:
            is_palindrome = False
        else:
            letters.pop(0)
            if len(letters) > 0:
                letters.pop((len(letters) - 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
Комментарии (0)

Огромная часть Python-это вещи, которые вы можете делать с ним. Вы Don'т должны использовать индексы для строк.

Следующий будет работать (используя кусочки)

def palindrome(n):
    return n == n[::-1]

Что он делает, просто переворачивает N и проверяет, если они равны. Н[::-1] меняет городе N (-1 означает декремент)

"и 2) для петли (в ассортименте (999, 100, -1), это плохой способ сделать это в Python?&и"

В связи с вышесказанным вы хотите использовать xrange вместо диапазона (потому что диапазон будет создать реальный список, а xrange-это быстрый генератор)

Мое мнение по вопросу 3

Я выучил C до Python, и я просто читаю документы, и играл вокруг с помощью консоли. (и решала задачи проект Эйлера как хорошо :)

Комментарии (4)

Ниже код будет печатать 0 если это палиндром еще он будет печатать -1

Оптимизирован Код

word = "nepalapen"
is_palindrome = word.find(word[::-1])
print is_palindrome

Выход: 0

word = "nepalapend"
is_palindrome = word.find(word[::-1])
print is_palindrome

Выход: -1

Объяснение:

при поиске в строку значение, возвращаемое значение местоположения, что строка начинается на.

Поэтому, когда вы делаете слово.найти(слово[::-1])находитnepalapenна месте0и[::-1]переворачиваетnepalapenи ещеnepalapenна месте0так0` возвращается.

Теперь, когда мы ищем nepalapend и затем nepalapend " до " dnepalapen он делает ложные заявление nepalapend изменилась на dnepalapen результате поиска не удалось найти nepalapend в результате значение-1`, который указывает строка не найдена.


Другой метод печати правда если палиндром еще печать ложь

word = "nepalapen"
print(word[::-1]==word[::1])

выход: Правда

Комментарии (1)

Существует также функциональные путь:

def is_palindrome(word):
  if len(word) == 1: return True
  if word[0] != word[-1]: return False
  return is_palindrome(word[1:-1])
Комментарии (1)

Я знаю, что на этот вопрос ответил давно и я извинился за вторжение. Однако,я был способ сделать это в Python, и я просто думал, что я хотел бы поделиться то, что я сделал это следующим образом,

word = 'aibohphobia'

word_rev = reversed(word)

def is_palindrome(word):
if list(word) == list(word_rev):
    print'True, it is a palindrome'
else:
    print'False, this is''t a plindrome'

is_palindrome(word)
Комментарии (0)

Существует намного более простой способ я нашел. Это'только линия 1.

is_palindrome = word.find(word[::-1])
Комментарии (1)

def isPalin(checkWord):
    Hsize = len(lst)/2
    seed = 1
    palind=True
    while seed
Комментарии (0)

Здесь без учета регистра функции, так как все вышеперечисленные решения являются чувствительными к регистру.

def Palindrome(string): 

  return (string.upper() == string.upper()[::-1]) 

Эта функция будет возвращать логические значение.

Комментарии (1)

делаю курс Watterloo для Python, одни и те же вопросы поднимают как-то "Lesseon" и найти здесь информацию:

http://cscircles.cemc.uwaterloo.ca/13-lists/

будучи новичком я решил проблему следующим образом:

def isPalindrome(S):
    pali = True
    for i in range (0, len(S) // 2):
        if S[i] == S[(i * -1) - 1] and pali is True:
            pali = True
        else:
            pali = False
    print(pali)
    return pali

Функция называется isPalindrome(С) и требует строку запах мяты,&; с&;. Возвращаемое значение по умолчанию правда, начальные проверить на первых, если заявление.

После этого цикл for работает на половину длины строки, чтобы проверить, если символ из строки и"Ы" ПО в должности "Я и" то же с передней и с задней. Если только это не тот случай, функция останавливается, печатает false и возвращает false.

Ура.кг

Комментарии (0)

Если в строке прописной или неалфавитный символ, то функция преобразует все символы в нижний регистр и удаляет все не-алфавитные символы, используя регулярное выражение, наконец он применяется рекурсивно проверить палиндром:

import re

rules = [
    lambda s: any(x.isupper() for x in s),
    lambda s: not s.isalpha()
]

def is_palindrome(s):
    if any(rule(s) for rule in rules):
        s = re.sub(r'[^\w]', '', s).lower()
    if len(s) < 2:
        return True
    if s[0] != s[-1]:
        return False
    return is_palindrome(s[1:-1])

string = 'Are we not drawn onward, we few, drawn onward to new era?'

print(is_palindrome(string))

выходными данными является значение true для ввода выше.

Комментарии (0)

может быть, вы можете попробовать это:

list=input('enter a string:')

if (list==list[::-1]):
    print ("It is a palindrome")
else:
   print("it is not palindrome")
Комментарии (1)

Вы спрашиваете палиндром в Python. палиндромом может быть выполнена на строки, числа и списки. Однако, я просто написал простой код для проверки палиндрома строки.

# Palindrome of string
str=raw_input("Enter the string\n")
ln=len(str)
for i in range(ln/2) :
    if(str[ln-i-1]!=str[i]):
        break
if(i==(ln/2)-1):
    print "Palindrome"
else:
    print "Not Palindrome"
Комментарии (0)

Настоящий простой способ сделать это

word = str(raw_input(""))
is_palindrome = word.find(word[::-1])
if is_palindrome == 0:
    print True
else:
    print False

И если/остальное здесь просто для фантазии выглядит. Вопрос о палиндром на Amazon'ы собеседовании для QA

Комментарии (0)

Предполагая, что строка 'с'

palin = lambda s: s[:(len(s)/2 + (0 if len(s)%2==0 else 1)):1] == s[:len(s)/2-1:-1]  
# Test
palin('654456')  # True
palin('malma')   # False
palin('ab1ba')   # True
Комментарии (0)
print ["Not a palindrome","Is a palindrome"][s == ''.join([s[len(s)-i-1] for i in range(len(s))])]

Это типичный способ написания единой строчки кода

Комментарии (0)
def pali(str1):
    l=list(str1)
    l1=l[::-1]
    if l1==l:
        print("yess")
    else:
        print("noo")
str1="abc"
a=pali(str1)
print(a)
Комментарии (0)

Я попытался с помощью этого:

def palindrome_numer(num):
num_str = str(num)
str_list = list(num_str)
if str_list[0] == str_list[-1]:
    return True
return False

и он работал некоторое количество, но я не'т знать, если строка

Комментарии (0)
word = ""
reverse = word[::-1] 
is_palindrome = word.find(reverse)
print is_palindrome

Это был вопрос в идеально сост 101, Глава 1. Дает 0 для палиндром дает -1 на нет. Его простой, и не использовать циклы.

Комментарии (0)