Restrict number of decimal places to two in Python

2019-09-20 06:15发布

My idea is accept a number as input, perhaps 1.00 and then multiply it by a constant.

Subsequently it is passed to a function that determines whether or not it is a valid palindrome.

In the case that it is not, the number will be incrementally augmented until a valid palindrome is achieved-- however, I'd like to restrict the exploration space to the 2nd decimal place.

That is to say 1.01 is valid output, but 1.001 is not.

The code that follows executes the process described above, with the caveat that the current output is typically invalid, overflowing into smaller decimal spaces, i.e. 1.00001 and so on.

How can the number of decimal places of the operation be restricted to two?

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

    candidrome = trial + (trial * 0.15)

    print(candidrome)

    # check whether we have a Palindrome
    while not isPalindrome(candidrome):
        candidrome += 0.01

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

The solution suggested here does not seem to work:

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

1条回答
beautiful°
2楼-- · 2019-09-20 06:55

Got it like this:

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

    candidrome = trial + (trial * 0.15)

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


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

    if isPalindrome(candidrome):
        print( "It's a Palindrome! " + str(candidrome) )
查看更多
登录 后发表回答