2017-09-22 3 views
0
를 사용하여 부동 소수점 숫자에 대한 수치 회문의 유효성을 평가하기 위해

그래서이 알고리즘을 많이하는 int 즉,기능 파이썬

def ReverseNumber(n, partial=0): 
    if n == 0: 
     return partial 
    return ReverseNumber(n // 10, partial * 10 + n % 10) 

회문 여부를 평가하기 위해 또는이 하나

def isPalindrome(x): 
    if (x < 0): 
     return False 
    div = 1 
    while (x/div >= 10): 
     div *= 10 
    while (x != 0): 
     l = x/div 
     r = x % 10 
     if (l != r): 
      return False 
     x = (x % div)/10 
     div /= 100 
    return True 

그러나 내가하고 싶은 것은 1.01 또는 22.22과 같은 숫자인지 여부를 평가하는 것입니다. 그러한 숫자가 그 자체가 회문인지 여부를 평가하는 것입니다.

ints 이외에도 상기 알고리즘 중 어느 하나를 floats에서 작동하도록 조정할 수 있습니까?

는 내가 전화를 사용하고 코드입니다 :

import sys 

# This method determines whether or not the number is a Palindrome 
def isPalindrome(x): 
    x = str(x).replace('.','') 
    a, z = 0, len(x) - 1 
    while a < z: 
     if x[a] != x[z]: 
      return False 
     a += 1 
     z -= 1 
    return True 

if '__main__' == __name__: 

    trial = int(sys.argv[1]) 

    # check whether we have a Palindrome 
    if isPalindrome(trial): 
     print("It's a Palindrome!") 

답변

1

단지 중간에 끝 문자를 다음 숫자를 문자열로 변환 비교되는 가장 간단한 것. 문자열 변환은 반복 된 곱셈 및 나누기보다 비용이 적습니다.

def isPalindrome(x): 
    x = str(x).replace('.','') 
    a, z = 0, len(x) - 1 
    while a < z: 
     if x[a] != x[z]: 
      return False 
     a += 1 
     z -= 1 
    return True 
+2

'return x == x [:: - 1]'할 수도 있습니다. – Blender

+0

이 오류가 발생합니다. 'ValueError : 밑이 10 인 int()에 대한 리터럴이 올바르지 않습니다.'1.01'' –

+0

어디에서'int() '를 사용하고 있습니까? – chepner