Python program for a simple calculator I have written a program for a simple calculator that can add, subtract, multiply and divide using functions.

Here is my code:

# This function adds two numbers 
def add(x, y):
   return x + y

# This function subtracts two numbers 
def subtract(x, y):
   return x - y

# This function multiplies two numbers
def multiply(x, y):
   return x * y

# This function divides two numbers
def divide(x, y):
   return x / y

print ("Select operation.")
print ("1. Add")
print ("2. Subtract")
print ("3. Multiply")
print ("4. Divide")

choice = input("Enter choice (1/2/3/4): ")

num1 = int(input("Enter first number: "))
num2 = int(input("Enter second number: "))

if choice == '1':
   print(num1, "+", num2, "=", add(num1,num2))

elif choice == '2':
   print(num1, "-", num2, "=", subtract(num1,num2))

elif choice == '3':
   print(num1, "*", num2, "=", multiply(num1,num2))

elif choice == '4':
   print(num1, "/", num2, "=", divide(num1,num2))
else:
   print("Invalid input")


So, I would like to know whether I could make this code shorter and more efficient.

Also, any alternatives are greatly welcome.

Any help would be highly appreciated.
You have several functions. What if you will have 100 functions? 1000? Will you copy-paste all your code dozens of times? Always keep in mind the DRY rule: "Don't repeat yourself". In your case you can store all functions and its info in some kind of structure, like dict.
You run your program, it calculates something once and quits. Why not letting the user have many calculations? You can run the neverending loop with some break statement (old console programs, like in DOS, usually quitted on Q).


Here is the improved code:

# This function adds two numbers 
def add(x, y):
    return x + y

# This function subtracts two numbers 
def subtract(x, y):
    return x - y

# This function multiplies two numbers
def multiply(x, y):
    return x * y

# This function divides two numbers
def divide(x, y):
    return x / y

print("Select operation.")
print("1. Add")
print("2. Subtract")
print("3. Multiply")
print("4. Divide")

functions_dict = {
    '1': [add, '+'],
    '2': [subtract, '-'],
    '3': [multiply, '*'],
    '4': [divide, '/']
}

while True:
    choice = input("Enter choice (1/2/3/4) or 'q' to quit: ")
    if choice == 'q':
        break
    elif choice in functions_dict:
        num1 = int(input("Enter first number: "))
        num2 = int(input("Enter second number: "))
        print('{} {} {} = {}'.format(
            num1,
            functions_dict[choice][1],
            num2,
            functions_dict[choice][0](num1, num2)
        ))
    else:
        print('Invalid number')