Search code examples
pythonif-statementpython-3.3ends-with

str.endswith() does not seem to consider the first if statment


I am using Python 3.3.2 on a windows 7 32bit machine.

I am trying the following syntax:

def make_from(inputString):
    if inputString.endswith('y'):
        fixed = inputString[:-1] + 'ies'
    if inputString.endswith(('o', 'ch', 's', 'sh', 'x', 'z')):
        fixed = inputString[:] + 'es'
    else: 
        fixed = inputString + 's'
    return fixed

The first IF condition does not seem to be taking effect .. the others work for example if I type make_from('happy') it returns 'happys', but if it type make_from('brush') it returns 'brushes'.

I guess I am missing something.. any idea whats going on here.


Solution

  • When you enter happy the following two statements execute:

    if inputString.endswith('y'):
        fixed = inputString[:-1] + 'ies'
    

    and

    else: 
        fixed = inputString + 's'
    

    because the second if statement is False for happy. So fixed is first assigned happies but ends up as happys because the first assignment is replaced.

    Use elif instead of if for the second test:

    def make_from(inputString):
        if inputString.endswith('y'):
            fixed = inputString[:-1] + 'ies'
        elif inputString.endswith(('o', 'ch', 's', 'sh', 'x', 'z')):
            fixed = inputString[:] + 'es'
        else: 
            fixed = inputString + 's'
        return fixed
    

    or use multiple return statements:

    def make_from(inputString):
        if inputString.endswith('y'):
            return inputString[:-1] + 'ies'
        if inputString.endswith(('o', 'ch', 's', 'sh', 'x', 'z')):
            return inputString[:] + 'es'
        return inputString + 's'