Используя Python, переверните целое число и скажите, если палиндром
используя Python, переверните целое число и определите, является ли оно палиндромом. Вот мое определение реверса и палиндрома. Есть ли у меня правильная логика?
def reverse(num):
s=len(num)
newnum=[None]*length
for i in num:
s=s-1
newnum[s]=i
return newnum
def palindrome(num):
a=str(num)
l=len(z)/2
if a[:1]==a[-1:][::-1]:
b=True
else:
b=False
у меня возникли некоторые проблемы писать def main
.
10 ответов
целые числа не имеют len ().
тестирование, если число является палиндромом, так же просто, как тестирование, если число равно его обратному (хотя, если вы хотите максимальную эффективность, вы можете просто сравнить символы с обоих концов строки, пока не достигнете середины).
чтобы найти обратное целое число, вы можете сделать это сложным способом (используя mod % и integer division //, чтобы найти каждую цифру и построить обратное число):
def reverse(num):
rev = 0
while num > 0:
rev = (10*rev) + num%10
num //= 10
return rev
или простой способ (превращение числа в строку, используя нотацию среза, чтобы изменить строку и превратить ее обратно в целое число):
def reverse(num):
return int(str(num)[::-1])
это нечитаемая однострочная рекурсивная реализация, основанная частично на ответ pedrosorio.
def reverse(i):
return int(i!=0) and ((i%10)*(10**int(math.log(i,10))) + reverse(i//10))
def is_palindrome(i):
return i == reverse(i)
он работает для integer i ≥ 0
.
отметим, что reverse(123) == reverse(1230) == 321
. Это не проблема, учитывая, что любое ненулевое целое число, заканчивающееся на 0, все равно не может быть палиндромом.
обратите внимание также, что полное обращение целого числа может, конечно, не быть необходимым для определения, является ли это палиндром. Разворот может быть осуществлен таким образом, чтобы: прервано рано, если определено, что число не является палиндромом.
длинный, но читаемый:
def palindrome(x):
a=""
x=str(x)
for i in range(len(x),0,-1):
a+=x[i-1]
print a
if a==x:
return True
else:
return False
def revers(num):
rev = 0
while(num > 0):
rem = num %10
rev = (rev *10) + rem
num = num //10
return num
я использовал список для этой программы, также работает со строками.
print('Enter Something')
a = list(input())
for i in range ((len(a)),0,-1):
print (a[i-1],end='')
import math
a = raw_input("Enter number:")
n = -1
reverse = 0
for i in a:
n += 1
digit = math.pow(10,n)
reverse = int(i)*digit + reverse
print int(reverse)
if int(reverse) == int(a):
print "Palindrome"
else:
print ":("
этот код преобразует int в String, а затем проверяет, является ли строка pallindrome. Преимущество заключается в том, что он быстрый, недостатком является то, что он преобразует int в строку, тем самым компрометируя идеальное решение вопроса.
обработки negative int
Как хорошо.
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
s = str(x)
if x >=0 :
if s == s[::-1]:
return True
else:
return False
else:
return False
Я пытаюсь сам с этим разобраться.
def number():
n = int(input("Enter a number: "))
return n
def reverse(n):
total = ""
while n > 0:
a = n % 10
n//= 10
total+= str(a)
return total
def palindrome (n):
total = 0
while n > 0:
a = n % 10
n//= 10
total+= a
if total == n:
x = "This number has a palindrome"
else:
x = ""
return x
n = number()
print (reverse(n))
print (palindrome(n))
original = raw_input("Enter a no = ") #original = number entered by user
rev = original[::-1] #rev = reverse of original by useing scope resolution
print 'rev of original no =',rev
if original == rev:
print "no's are equal"
else:
print "no's are not equal"