Написать программу которая проверяет является ли число палиндромом python

Привет, я работаю над функцией python isPalindrome(x) для целых чисел из трех цифр, которые возвращают значение True, если сотни цифр равны цифре и false в противном случае. Я знаю, что я должен использовать строки здесь, и это то, что у меня есть:

def isPal(x): if str(1) == str(3): return «True» else: return «False»
str(0) является единицей, а str(2) — сотнями. Все, что я получаю, это ложь? Благодарю!
George Putin 31 июль 2012, в 16:30
Поделиться
подумайте, что вы конвертируете в str и что происходит с x .
Eugen Constantin Dinca 31 июль 2012, в 13:40

Почему бы просто не превратить строку в список и сравнить элемент списка [0] с элементом [2]
Greg Brown 31 июль 2012, в 13:41
У меня есть подозрение, что для этого нужен тег homework .
Burhan Khalid 31 июль 2012, в 13:42
Silas Ray 31 июль 2012, в 14:25
zigg 31 июль 2012, в 14:36
Silas Ray 31 июль 2012, в 14:36

Неловкий момент, если интервьюер находится на SO и видит, что вы задаете вопрос
Snakes and Coffee 31 июль 2012, в 15:24
zigg 31 июль 2012, в 18:29

Палиндром или не палиндром ? Пишем на Python.

это выглядит как часть проблемы проекта Эйлера 4 — решение см. здесь: ferretfarmer.wordpress.com/2013/09/26/project-euler-problem-4

blueberryfields 26 сен. 2013, в 08:28
Показать ещё 7 комментариев
Поделиться:

11 ответов

Доступ к массиву осуществляется с помощью [] , not () . Также, если вы ищете сотни и единицы, помните, что массивы индексируются 0, вот сокращенная версия кода.

def is_pal(num): return num[0] == num[2] >>> is_pal(‘123’) False >>> is_pal(‘323’) True

Возможно, вы захотите взять число в качестве параметра и затем преобразовать его в строку:

def is_pal(num): x = str(num) return x[0] == x[2]

Обратите внимание, что вы можете просто просто проверить, равна ли строка обратному, которая работает для любого количества цифр:

>>> x = ‘12321’ >>> x == x[::-1] True
jamylak 31 июль 2012, в 11:34
Поделиться

Спасибо, я получил это, хотя isPal (-343) возвращает False. def isPal (x): вернуть str (x) [0] == str (x) [2]

George Putin 31 июль 2012, в 13:46

Строковое преобразование — плохая производительность. Лучше использовать разделение и мод (см. Мой ответ для некоторых тестов).

aaronlevin 31 июль 2012, в 13:47
jamylak 31 июль 2012, в 13:47
jamylak 31 июль 2012, в 13:48
Показать ещё 2 комментария

Читайте также:
Как сделать сервер с помощью программы

Ваша проблема в том, что str(1) == ‘1’ и str(3) == ‘3’ . Вы также возвращаете строковые значения, считая ‘True’ и ‘False’ вместо фактических значений True и False .

Позвольте мне предложить гораздо более удобную для вас функцию:

def isPal(x): s = str(x) # convert int to str return s == s[::-1] # return True if s is equal to its reverse

s[::-1] создает обратную строку; например ‘foo'[::-1] == ‘oof’ . Это работает из-за расширенной нотации фрагмента.

zigg 31 июль 2012, в 12:12
Поделиться

str(1) создаст строку целочисленного значения 1. Которая не будет равна строковому значению целочисленного значения 3, поэтому оно всегда False.

Решение простых задач на python | Является ли строка палиндромной

Вы должны возвращать True и False , а не строки «True» и «False».

Это то, что вы пытаетесь учесть вышеизложенное. (которое работает с любой длиной)

def pal(num): forward = str(num) backward = ».join(reversed(forward)) return forward == backward
Jon Clements 31 июль 2012, в 12:08
Поделиться

str() передает значение в str . Вы хотите получить доступ к каждому персонажу. Возможно, вы захотите сравнить несколько разных методов.

>>> t1 = timeit.Timer(stmt=»»» . def isPal(x): . return x//100 == x%10 . isPal(434) . isPal(438) . «»») >>> t2 = timeit.Timer(stmt=»»» . def isPal(x): . return str(x)[0] == str(x)[2] . isPal(434) . isPal(438) . «»») >>> print «%.2f usec/pass» % (1000000 * t1.timeit(number=100000)/100000) 0.97 usec/pass >>> print «%.2f usec/pass» % (1000000 * t2.timeit(number=100000)/100000) 2.04 usec/pass

Итак, похоже, что мода работает:

def isPal(x): return x//100 == x%10
aaronlevin 31 июль 2012, в 12:21
Поделиться
Попробуйте использовать x//100 вместо x/100 так как здесь требуется целочисленное деление.
mgilson 31 июль 2012, в 13:52
jmetz 31 июль 2012, в 14:03

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

jmetz 31 июль 2012, в 14:07
mgilson 31 июль 2012, в 16:29
Показать ещё 2 комментария

Не уверен, почему люди придерживаются идеи струны, когда деление и модулю будут делать:

def isPal(x): return (x/100)%10 == x%10

если число не превышает 999 (3 цифры, как указано OP), тогда это упрощает

def isPal(x): return x/100 == x%10
jmetz 31 июль 2012, в 11:20
Поделиться

Потому что, может быть, нужно еще несколько секунд, чтобы понять, что на самом деле делает ваш код? Я предпочел бы ясность по сравнению с производительностью в большинстве случаев (то есть всегда, когда производительность не является абсолютно критичной -> смотрите преждевременную оптимизацию).

codeling 31 июль 2012, в 13:52
jmetz 31 июль 2012, в 13:53

Правда. Но тогда почему все еще называют это Pal? Потому что это только палиндром, если обратная запись равна «нормальной», но ваша функция также работает с числами, состоящими более чем из 3 цифр, и все же сравнивает только 1-й и 3-й символ . назад к исходной теме: возможно, большинство людей были просто под влиянием того, как был написан вопрос . или подозревали, что функция на самом деле должна работать для произвольных строк

Читайте также:
Как правильно написать название программы ворд

codeling 31 июль 2012, в 13:55
jmetz 31 июль 2012, в 13:58

все еще странно, почему можно написать функцию isPalindrome, которая работает только для 3-значных чисел . но это выходит за рамки вопроса ОП, я думаю: D

codeling 31 июль 2012, в 13:59
Палиндромы — это не просто числа, а слова, может быть, поэтому подход к разделению не так очевиден.
Burhan Khalid 31 июль 2012, в 14:56

Источник: overcoder.net

7 Способов решения Палиндромных программ на Python

Строки и числа, которые одинаковы, даже если они перевернуты, являются палиндромами. Мы можем проверить, является ли строка или число палиндромом в Python.

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

Палиндром – это строка или число, которое, если повернуть вспять, равно исходному значению. Например, если мы перевернем строку MALAYALAM, мы получим обратно исходную строку. Кроме того, если мы перевернем число 12321, мы получим 12321 обратно. Они известны как палиндромы.

В этой статье мы узнаем, как проверить, является ли строка или число палиндромом или нет, разными способами. В дополнение к этому мы решим некоторые вопросы болельщиков, которые обычно задаются на соревнованиях и интервью.

В этой статье мы узнаем, как проверить, является ли строка или число палиндромом, различными способами. В дополнение к этому мы решим несколько интересных вопросов, которые обычно задаются в конкурсах и интервью.

Проверка того, является ли строка палиндромом в Python

  1. Проверьте Палиндром с помощью нарезки (slicing) в Python
  2. Проверьте Палиндром с помощью функции reversed() В Python
  3. Проверьте Палиндром с помощью цикла while в Python
  4. Проверка того, является ли число палиндромом в Python с помощью цикла
  5. Проверка того, является ли фраза палиндромом в Python
  6. Как найти самую длинную палиндромную подстроку в строке

1. Проверьте Palindrome с помощью нарезки в Python

Русские Блоги

Определить, является ли целое число палиндромной реализацией Python

титульный

Определите, является ли целое число палиндромом. Число палиндромов относится к целым числам, которые читаются в том же порядке (слева направо) и в обратном порядке (справа налево).

Вход: 121
Вывод : true
Пример 2:

Вход: -121
Вывод: false
Пояснение: слева направо -121. Справа налево это 121-. Поэтому это не палиндром.
Пример 3:

Вход: 10
Вывод: false
Объяснение: Справа налево — 01. Поэтому это не палиндром.

Дополнительно:

Будут ли целые числа преобразованы в строки для решения этой проблемы? (Обратите внимание, что вам нужно обратить внимание на проблему пересечения границы после разворота)

Читайте также:
Как установить программу реалтек

Решение 1:

Первой идеей, которая пришла в голову, было преобразовать число в строку и проверить, является ли строка палиндромом. Однако это требует дополнительного свободного пространства для создания строк, которые не допускаются в описании проблемы.

def isPalindrome_convert(self,x): «»» :type x: int :rtype: bool «»» x=str(x) x_len=len(x) i=0 j=x_len-1 while ij: char_l=x[i] char_r=x[j] if char_r!=char_l: return False else: i+=1 j-=1 return True

Решение 2 (идея пришла с официального сайта leetcode, код реализован самостоятельно):

Вторая идея состоит в том, чтобы инвертировать само число, а затем сравнить инвертированное число с исходным числом. Если они совпадают, то число является палиндромом. Однако, если инвертированное число больше, чем int.MAX, мы столкнемся с проблемами переполнения целых чисел.
Согласно второй идее, во избежание проблемы переполнения, вызванной цифровой инверсией, почему бы не рассмотреть инверсию только половины целого числа? В конце концов, если число является палиндромом, вторая половина рисунка должна быть такой же, как и первая половина исходного рисунка после обращения.
Например, введя 1221, мы можем повернуть вторую половину числа «1221» с «21» на «12» и сравнить его с первой половиной «12», поскольку Оба одинаковы, мы знаем, что число 1221 является палиндромом.
Давайте посмотрим, как превратить эту идею в алгоритм.
Во-первых, нам нужно разобраться с некоторыми критическими ситуациями. Все отрицательные числа не могут быть палиндромами, например: -123 не является палиндромом, потому что — не равно 3. Таким образом, мы можем вернуть false для всех отрицательных чисел.
Теперь давайте рассмотрим, как перевернуть числа во второй половине. Для числа 1221, если мы выполним 1221% 10, мы получим последнюю цифру 1, и, чтобы получить предпоследнюю цифру, мы можем сначала удалить последнюю цифру из 1221, разделив на 10, 1221/10 = 122 , А затем найти остаток от предыдущего шага, деленный на 10, 122% 10 = 2, вы можете получить предпоследнюю цифру. Если мы умножим последнюю цифру на 10 и добавим предпоследнюю цифру 1 * 10 + 2 = 12, мы получим нужную нам инвертированную цифру. Если мы продолжим этот процесс, мы получим больше цифр обратных цифр.
Теперь вопрос в том, откуда мы знаем, что количество цифр перевернутой цифры достигло половины первоначальной цифры?
Мы делим исходное число на 10, а затем умножаем инвертированное число на 10, поэтому, когда оригинальное число меньше инвертированного числа, это означает, что мы обработали половину цифр.

def isPalindrome(self,x): «»» :type x: int :rtype: bool «»» if x0 or (x != 0 and x%10==0): return False x_revers = 0 while x_reversx: x_revers = x_revers * 10 + x % 10 x=x//10 if x_revers==x: return True if x_revers==x or x_revers//10==x: return True return False

Код, который запускается напрямую

Источник: russianblogs.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru