Split string in half and change case accordingly
Midpoint math is often a pain in the whatnot, but a real trick is to add 1 to the length before halving it. Additionally, instead of repeating the math multiple times, you can do it just once.

def sillycase(silly):
    mid=(len(silly) + 1) / 2
    firstHalf = silly[:mid].lower()
    secondHalf = silly[mid:].upper()
    return firstHalf + secondHalf  


At that point, it becomes small enough to not need the temp variables:

def sillycase(silly):
    mid = (len(silly) + 1) // 2
    return silly[:mid].lower() + silly[mid:].upper() 

print (sillycase("hello"))
print (sillycase("helloa"))
print (sillycase("helloab"))


http://ideone.com/CqUdl5

Note the use of the integer divide which is suitable for both python 2.x and 3.