2017-09-23 4 views
0

j'ai un script Python qui produit la sortie suivante:Imposer que la production numérique a au moins deux décimales de suivi, y compris les zéros de fin

31.7 
31.71 
31.72 
31.73 
31.74 
31.75 
31.76 
31.77 
31.78 
31.79 
31.8 
31.81 
31.82 
31.83 
31.84 
31.85 
31.86 
31.87 
31.88 
31.89 
31.9 
31.91 

S'il vous plaît noter que les numéros 31.7, 31.8, 31.9.

Le but de mon script est de déterminer les palindromes numériques, tels que 1.01.

Le problème avec le script (reproduit ci-dessous) est qu'il évaluera palindromes numériques tels que 1.1 comme dité cependant - qui est pas considéré comme sortie valide dans cette situation.

Une sortie valide doit avoir exactement deux décimales. Comment appliquer la sortie numérique à au moins deux décimales finales, y compris les zéros de fin?

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 = float(sys.argv[1]) 

    operand = float(sys.argv[2]) 

    candidrome = trial + (trial * 0.15) 

    print(candidrome) 
    candidrome = round(candidrome, 2) 

    # check whether we have a Palindrome 
    while not isPalindrome(candidrome): 
     candidrome = candidrome + (0.01 * operand) 
     candidrome = round(candidrome, 2) 
     print(candidrome) 

    if isPalindrome(candidrome): 
     print("It's a Palindrome! " + str(candidrome)) 
+0

double possible de [float d'impression à n décimales y compris 0 queue de] (https://stackoverflow.com/questions/8568233/print-float-to-n- decimal-places-including-trailing-0s) –

Répondre

1

Vous pouvez utiliser la fonction format builtin. .2 fait référence au nombre de chiffres, et f fait référence à "float".

if isPalindrome(candidrome): 
    print("It's a Palindrome! " + format(candidrome, '.2f')) 

Ou:

if isPalindrome(candidrome): 
    print("It's a Palindrome! %.2f" % candidrome) 
+0

cela le transforme en une chaîne? –

+0

@ s.matthew.english: Oui c'est le cas. Quelque chose comme 'format (0.666666, '.2f')' retournera '' 0.67''. –

+0

mais j'ai besoin que ce soit comme un flotteur afin que je puisse le rediriger vers la fonction et en faire un palindrome –

1

Essayez ceci au lieu de str(x):

twodec = '{:.2f}'.format(x) 
+0

Je vois toujours les zéros pernicieux non-traînant, comme ceci '3.2' –

+0

no- mon mauvais- c'est correct en fait –

0

Vous pouvez essayer ceci:

data = """ 
    1.7 
    31.71 
    31.72 
    31.73 
    """ 
new_data = data.split('\n') 
palindromes = [i for i in new_data if len(i) > 3 and i.replace('.', '') == i.replace('.', '')[::-1]] 
0
x = ("%.2f" % x).replace('.','') 
+0

Les réponses de code seulement sont déconseillées parce qu'elles n'expliquent pas comment ils résolvent le problème dans la question. Pensez à mettre à jour votre réponse pour expliquer ce que cela fait et comment elle résout le problème - cela aidera non seulement le PO, mais d'autres avec des problèmes similaires. S'il vous plaît examiner [Comment puis-je écrire une bonne réponse] (https://stackoverflow.com/help/how-to-answer) – FluffyKitten