2017-09-22 4 views
0

So gibt es viele Algorithmen zu bewerten, ob ein int ein Palindrom, dhFunktion Gültigkeit der numerischen Palindrom zu bewerten für Gleitkommazahlen mit Python

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

oder diese:

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 

Was ich aber gerne machen würde ist zu beurteilen, ob eine Nummer wie 1.01 oder 22.22 usw., ob solche Zahlen selbst Palindrome sind.

Wie könnte einer dieser obigen Algorithmen so angepasst werden, dass er für floats zusätzlich zu ints funktioniert?

Dies ist der Code verwende ich es zu nennen:

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!") 

Antwort

1

Die einfachste Sache, eine Zeichenfolge, die die Zahl zu tun zu konvertieren ist einfach, dann vergleichen Sie Zeichen von den Enden zur Mitte. Die String-Konvertierung ist weniger teuer als wiederholte Multiplikationen und Divisionen.

+2

Sie könnten auch einfach 'return x == x [:: - 1]'. – Blender

+0

Ich bekomme diesen Fehler 'ValueError: ungültiges Literal für int() mit Basis 10: '1.01'' –

+0

Wo verwenden Sie' int() '? – chepner

Verwandte Themen