I'm new to python and having some issues with a task.
I need to write a code with example output:
Calculator
Give the first number: 50
Give the second number: 5
(1)
(2) -
(3) *
(4) /
(5)Change numbers
(6)Quit
Current numbers: 50 5
Please select something (1-6): 1
The result is: 55
(1)
(2) -
(3) *
(4) /
(5)Change numbers
(6)Quit
Current numbers: 50 5
Please select something (1-6): 2
The result is: 45
(1)
(2) -
(3) *
(4) /
(5)Change numbers
(6)Quit
Current numbers: 50 5
Please select something (1-6): 4
The result is: 10.0
(1)
(2) -
(3) *
(4) /
(5)Change numbers
(6)Quit
Current numbers: 50 5
Please select something (1-6): 6
Thank you!
I've been trying to use while loop for this but without any luck. I just don't understand the while loop well enough, watched so many tutorials but theyre all the same with 1 input and a single print line. I've tried so far this: (which doesn't really use the while looping and doesn't even work properly:
print("Calculator")
number1 = int(input("Give the first number:"))
number2 = int(input("Give the second number:"))
print("(1) ")
print("(2) -")
print("(3) *")
print("(4) /")
print("(5) Change numbers: ")
print("(6) Quit")
print("Current numbers: ", number1, number2)
while True:
selection = (int(input("Please select something (1-6):")))
if selection == 1:
print("The result is:", number1 number2)
print("(1) ")
print("(2) -")
print("(3) *")
print("(4) /")
print("(5) Change numbers: ")
print("(6) Quit")
print("Current numbers: ", number1, number2)
selection = (int(input("Please select something (1-6):")))
if selection == 2:
print("The result is:", number1 - number2)
print("(1) ")
print("(2) -")
print("(3) *")
print("(4) /")
print("(5) Change numbers: ")
print("(6) Quit")
print("Current numbers: ", number1, number2)
selection = (int(input("Please select something (1-6):")))
if selection == 3:
print("The result is:", number1 * number2)
print("(1) ")
print("(2) -")
print("(3) *")
print("(4) /")
print("(5) Change numbers: ")
print("(6) Quit")
print("Current numbers: ", number1, number2)
selection = (int(input("Please select something (1-6):")))
if selection == 4:
print("The result is:", number1 / number2)
print("(1) ")
print("(2) -")
print("(3) *")
print("(4) /")
print("(5) Change numbers: ")
print("(6) Quit")
print("Current numbers: ", number1, number2)
Does anyone know a good tutorial that would explain how to solve a task like this? I can't figure out how to not copy the "print" parts so many times but instead loop it correctly.
CodePudding user response:
The direct answer is to put the 'print' at the start, outside of the if statement
print("Calculator")
number1 = int(input("Give the first number:"))
number2 = int(input("Give the second number:"))
while True:
print("(1) ")
print("(2) -")
print("(3) *")
print("(4) /")
print("(5) Change numbers: ")
print("(6) Quit")
print("Current numbers: ", number1, number2)
selection = (int(input("Please select something (1-6):")))
if selection == 1:
print("The result is:", number1 number2)
if selection == 2:
print("The result is:", number1 - number2)
if selection == 3:
print("The result is:", number1 * number2)
if selection == 4:
print("The result is:", number1 / number2)
CodePudding user response:
Define a convenience function to gather number input
def number_entry(which="first"):
entry = None
while not entry and len(entry) < 1:
entry = input(f"Give the {which} number:")
if not entry:
print(f"need {which} number")
# could check for number here
return entry
Define a convenience function to gather selection: (no need to convert selection to int(eger))
OP_ADD="1"
OP_SUB="2"
OP_MUL="3"
OP_DIV="4"
OP_PICK="5"
OP_QUIT="6"
def operator_entry():
while not entry:
print("(1) ")
print("(2) -")
print("(3) *")
print("(4) /")
print("(5) Change numbers: ")
print("(6) Quit")
entry = input("Please select something(1-6):")
if not entry:
print("try again...")
continue
if entry not in ["1", "2", "3", "4", "5", "6"]:
print(f"invalid entry {entry}")
continue
return entry
Define a function that performs the selected operation
def action(operator,operand1,operand2):
result = 0
if OP_ADD == operator:
result = operand1 operand2
elif OP_SUB == operator:
result = operand1 - operand2
elif OP_MUL == operator:
result = operand1 * operand2
elif OP_DIV == operator:
result = operand1 / operand2
else:
print(f"invalid operator {operator}")
return result
Define your calculator function:
def calculator():
done = False
while not done:
input1 = int(number_entry("first"))
input2 = int(number_entry("second"))
print("Current numbers: ", number1, number2)
selection = operator_entry()
if OP_PICK == selection:
continue
if OP_QUIT == selection:
done = True
continue
result = action(selection,input1,input2)
print("The result is: {result}")
Run your calculator:
calculator()
CodePudding user response:
One approach that you can use to make it a bit more robust: using a class and creating reusable functions that help you not to repeat code.
Good Luck
import operator
from time import sleep
class Calculator:
CHANGE_NUMBER = 5
QUIT = 6
math_operations = {
1: operator.add,
2: operator.sub,
3: operator.mul,
4: operator.truediv,
}
options = {
1: " ",
2: "-",
3: "*",
4: "/",
5: "Change Number",
6: "Quit"
}
def __init__(self):
self.n1 = None
self.n2 = None
print("Calculator")
def run(self):
while True:
operation = self.operation()
if not operation:
break # We go out of the while loop
def operation(self):
if self.n1 is None or self.n2 is None:
self.get_numbers()
else:
print(f"\n Current numbers: {self.n1}, {self.n2}")
return self.procces_operation(self.get_operation())
def print_options(self):
for i, option in self.options.items():
print(f"({i}) {option}")
def get_operation(self):
self.print_options()
option = (int(input("Please select something (1-6): ")))
if option <= 0 or option > len(self.options):
print("Please select a valid option")
sleep(1)
self.get_operation()
return option
def get_numbers(self):
self.n1 = int(input("Give the first number: "))
self.n2 = int(input("Give the second number: "))
def procces_operation(self, operation: int):
if operation == self.QUIT:
return
if operation == self.CHANGE_NUMBER:
self.get_numbers()
return True # We still get other operation
result = self.math_operations.get(operation)(self.n1, self.n2)
print(f"The result is: {result}")
sleep(1)
return True # We still get other operation
def main():
calculator = Calculator()
calculator.run()
if __name__ == '__main__':
main()
