Soccer winning probabilies from ELO strength indicator
With the possibility of first_at_home and second_at_home both being True, there really is not too much to improve on here.

The only things I see are:


Instead of doing first = first + 100, you can do first += 100.
Instead of doing -((first - second)/ 400.0) you can do (second - first)/ 400.0.
There is also no need to specify your operands as floats (400.0 vs 400) because Python does float division with the basic / operator. 


Here are my improvements:

def winning_prob(first, second, first_at_home=False, second_at_home=False):
    """ Return winning probability, given ELO ratings of two soccer teams 

    Args:
        first: ELO rating of first team
        second: ELO rating of second team
        first_at_home: is first team playing at home?
        second_at_home: is second team playing at home?

    Returns:
        Winning probability of first team against second team
    """
    if first_at_home:
        first += 100
    if second_at_home:
        second += 100

    return 1 / (10**((second - first)/400) + 1)