Why do we have functions?

Look at this code:

print("+------+")
print("|      |")
print("|      |")
print("|      |")
print("+------+")
print("        ")
print("+------+")
print("|      |")
print("|      |")
print("|      |")
print("+------+")
print("        ")
print("+------+")
print("|      |")
print("|      |")
print("|      |")
print("+------+")
print("        ")
print("+------+")
print("|      |")
print("|      |")
print("|      |")
print("+------+")  # 23 lines

Reason 1: Too long

This is absolutely too long! This code is redundant and functions can avoid it.

Original

print("+------+")
print("|      |")
print("|      |")
print("|      |")
print("+------+")
print("        ")
print("+------+")
print("|      |")
print("|      |")
print("|      |")
print("+------+")
print("        ")
print("+------+")
print("|      |")
print("|      |")
print("|      |")
print("+------+")
print("        ")
print("+------+")
print("|      |")
print("|      |")
print("|      |")
print("+------+")  # 23 lines

Revised

def box():
	print("+------+")
	print("|      |")
	print("|      |")
	print("|      |")
	print("+------+")
def boxspace():
	box()
	print("        ")
boxspace()
boxspace()
boxspace()
box()  # 13 lines

That cuts off 10 lines!!!

Reason 2: Maintainability

Suppose your boss says that you need to change the length by 1.

Original

print("+-------+")
print("|       |")
print("|       |")
print("|       |")
print("+-------+")
print("         ")
print("+-------+")
print("|       |")
print("|       |")
print("|       |")
print("+-------+")
print("         ")
print("+-------+")
print("|       |")
print("|       |")
print("|       |")
print("+-------+")
print("         ")
print("+-------+")
print("|       |")
print("|       |")
print("|       |")
print("+-------+")  # 23 changes

Revised

def box():
	print("+-------+")
	print("|       |")
	print("|       |")
	print("|       |")
	print("+-------+")
def boxspace():
	box()
	print("        ")
boxspace()
boxspace()
boxspace()
box()  # 5 changes

That cuts off a lot of work!!!