web-dev-qa-db-ja.com

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を書くのに苦労しています。

14
YXH
def palindrome(num):
    return str(num) == str(num)[::-1]
48
Peter Hull

整数にはlen()はありません。

数字が回文であるかどうかのテストは、数字がその逆に等しいかどうかのテストと同じくらい簡単です(ただし、最大の効率が必要な場合は、文字列の両端の文字を中央に達するまで比較できます)。

整数の逆を見つけるには、難しい方法で行うことができます(mod%と整数除算//を使用して各桁を見つけ、逆数を作成します)。

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])
16
pedrosorio
def revers(num): 
  rev = 0    
  while(num > 0):    
      rem = num %10    
      rev = (rev *10) + rem    
      num = num //10    

  return num
1
rashedcs

長いが読みやすい:

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
1
elon007

これは、 pedrosorioによる回答 に一部基づいた、読み取り不可能な1行の再帰的な実装です。

_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)
_

整数_i ≥ 0_に対して機能します。

reverse(123) == reverse(1230) == 321に注意してください。これは問題ではありません。0で終わる非ゼロの整数は、いずれにしても回文ではありません。

また、整数の完全な反転はもちろん、それが回文であるかどうかを判断するために必要ではないかもしれないことに注意してください。数が回文ではないと判断された場合、早期に中止されるように、反転を実装することができます。

1
Acumenus

このコードは、intをStringに変換し、文字列が回文であるかどうかを確認します。利点は、それが高速であることであり、欠点はintをStringに変換し、それによって問題の完全な解決策と妥協することです。

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
0
casillas

このプログラムにはリストを使用しましたが、文字列でも動作します。

print('Enter Something')
a = list(input())
for i in range ((len(a)),0,-1):
   print (a[i-1],end='')
0
Ryan
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 ":("
0
Devzzone
t=int(input("enter nos of test cases= "))
while t>0:
    n=int(input("enter number="))
    rev=0
    while n>0:
        digit=n%10
        rev=rev*10+digit
        n=n//10
    print(rev)
    t-=1
0
Shehreen Khan