2017-09-22 27 views
0
点数

所以有很多的算法来评估一个int是否是回文,即函数计算数值的回文结构有效性浮动使用Python

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.0122.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:无效文字为int()与基10:'1.01'' –

+0

你在哪里使用int()? – chepner