Do while loop in Python 3 - python

I wanted to have some sort of thing that if the user inputs "Quit", the program breaks. I think that I could achieve that with a do while loop but I don't understand how to implement it. Please help me.
num1 = float(input("Enter First Number: "))
num2 = float(input("Enter second number: "))
op = input("Enter Operator: ")
if op == "*":
print(num1 * num2)
elif op == "+":
print(num1 + num2)
elif op == "-":
print(num1 - num2)
elif op == "/":
print(num1 / num2)
elif op == "%":
print(num1 % num2)
else:
print("Invalid Operator")

while True:
try:
#insert your "loop" here
[.....]
except ValueError:
#restart the loop
continue
else:
#exit the loop
break

while True:
while True:
num1 = input("Enter First Number: ")
if num1.lower() == "quit":
quit()
try:
num1 = int(num1)
break
except ValueError:
print(f"{num1} is not an integer.")
while True:
num2 = input("Enter second number: ")
if num2.lower() == "quit":
quit()
try:
num2 = int(num2)
break
except ValueError:
print(f"{num2} is not an integer.")
op = input("Enter Operator: ")
if op.lower() == "quit":
quit()
if op == "*":
print(num1 * num2)
elif op == "+":
print(num1 + num2)
elif op == "-":
print(num1 - num2)
elif op == "/":
print(num1 / num2)
elif op == "%":
print(num1 % num2)
else:
print("Invalid Operator")

Related

How can I make this python code look cleaner?

I was trying to practice what I've been learning so I had this idea and it covered most of what I've learned. The code works well but I hope if anyone can take a look and let me know how I can make it better.
print("available operations (*, +, /, -)\n\"delete\" to delete every previous calculations\n \"exit\" to stop the program ")
is_running = True
op = ""
while is_running:
try:
num1 = float(input(">> "))
except ValueError:
print("ValueError")
continue
while is_running:
op = input(">> ")
if op == "exit":
is_running = False
break
elif op == "delete":
break
try:
num2 = float(input(">> "))
except ValueError:
print("ValueError")
continue
if op == "*":
num1 = num1 * num2
print(num1)
elif op == "+":
num1 = num1 + num2
print(num1)
elif op == "-":
num1 = num1 - num2
print(num1)
elif op == "/":
num1 = num1 / num2
print(num1)
else:
print("unavailable operator")
break
One thing you can do is to replace the conditionals for operators with dictionary look up as mentioned in below code:
import operator
def calculate(op, num1, num2):
oper = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.truediv
}
try:
return oper[op](num1, num2)
except KeyError:
return 'Invalid Operator'
num1 = 40
num2 = 50
op = '*'
print(calculate(op, num1, num2))
One more thing is that you need not use multiple try-except statements. Only one statement for all the inputs is enough. There is also no need for while loop in the second input statement.

I build a calculator and I want to give error if they didn't type any number

Code works pretty well if you enter an actual number and operator and it actually gives u an error code if you enter an invalid operator but I want to give same error code with numbers but I dont know how I use python 3.9 help plz
num1 = float(input('Enter First Number:'))
op = input('Enter operator:')
num2 = float(input('Enter Second Number:'))
if op == '+':
print(num1 + num2)
elif op == '-':
print(num1 - num2)
elif op == '*':
print(num1 * num2)
elif op == '/':
print(num1 / num2)
else:
print('enter an operator plz')
You want to use try/catch statements and/or while loops around each step.
flag1,flag2,operator =True,True,True
while flag1:
try:
num1 = float(input('Enter first Number:'))
flag1 = False
except ValueError:
print("Enter a valid first number please")
while operator:
op = input('Enter operator:')
if not (op=='+' or op =='-' or op =='*' or op=='/'):
print('Enter a valid operator please')
else:
operator=False
while flag2:
try:
num2 = float(input('Enter second Number:'))
flag2 = False
except ValueError:
print("Enter a valid second number please")
if op == '+':
print(num1 + num2)
elif op == '-':
print(num1 - num2)
elif op == '*':
print(num1 * num2)
elif op == '/':
print(num1 / num2)
Maybe try something along the lines of this:
invalid = True
while invalid:
try:
num1 = float(input('Enter First Number:'))
op = input('Enter operator:')
num2 = float(input('Enter Second Number:'))
invalid = False
except ValueError:
print("Please enter a valid number")
if op == '+':
print(num1 + num2)
elif op == '-':
print(num1 - num2)
elif op == '*':
print(num1 * num2)
elif op == '/':
print(num1 / num2)
else:
print('enter an operator plz')

it is keep on printing [duplicate]

This question already has answers here:
What does "while True" mean in Python?
(18 answers)
Closed 2 years ago.
when i run this code it keeps on giving me the answer
here is my code
num1 = float(raw_input("enter a number: ")) # type: float
operation = str(raw_input("enter a operation: "))
num2 = float(raw_input("enter a number: ")) # type: float
while True:
if operation == "+":
print num1 + num2
elif operation == "-":
print num1 - num2
elif operation == "*":
print num1 * num2
elif operation == "/":
print (num1 / num2)
else:
print("Error Error")
What you might want is to put the input taking code into the while loop:
while True:
num1 = float(raw_input("enter a number: ")) # type: float
operation = str(raw_input("enter a operation: "))
num2 = float(raw_input("enter a number: ")) # type: float
if operation == "+":
print (num1 + num2)
elif operation == "-":
print (num1 - num2)
elif operation == "*":
print (num1 * num2)
elif operation == "/":
print (num1 / num2)
else:
print("Error Error")
`while True:` means Infinite Loop.
You can take input inside while loop or you can change the condition of while loop.
remove the while True: and it will only print out the answer once. while loops continue running as long as the argument is true and True is always true :P
What you probably want is for the application to keep calculating input from the user.
Try this
def calculate():
num1 = float(raw_input("enter a number: ")) # type: float
operation = str(raw_input("enter a operation: "))
num2 = float(raw_input("enter a number: ")) # type: float
if operation == "+":
print (num1 + num2)
elif operation == "-":
print (num1 - num2)
elif operation == "*":
print (num1 * num2)
elif operation == "/":
print (num1 / num2)
else:
print("Error Error")
while True:
calculate()

How can i make this part of my new code loop?

i want to make it so when you get your answer it automatically asks for another operator and another number until you type stop
like real calculators
from math import*
info = input("Would you like information? : ")
if info == "yes":`enter code here`
print("+ = add")
print("- = subtract")
print("* = multiplication")
print("/ = division")
print("pow/power/p = raise to power")
num1 = float(input("Enter your first number: "))
op = input("Enter your operator: ")
num2 = float(input("Enter your second number: "))
if op == "+":
print(num1 + num2)
elif op == "-":
print(num1 - num2)
elif op == "*":
print(num1 * num2)
elif op == "/":
print(num1 / num2)
elif op == "pow" or "power" or "p":
print(pow(num1, num2))
else:
print("Something went wrong please try again")
from math import *
info = input("Would you like information? : ")
if info == "yes":
print("+ = add")
print("- = subtract")
print("* = multiplication")
print("/ = division")
print("pow/power/p = raise to power")
while True:
num1 = input("Enter your first number: ")
if num1 == "stop":
break
num1 = float(num1)
op = input("Enter your operator: ")
num2 = float(input("Enter your second number: "))
if op == "+":
print(num1 + num2)
elif op == "-":
print(num1 - num2)
elif op == "*":
print(num1 * num2)
elif op == "/":
print(num1 / num2)
elif op == "pow" or "power" or "p":
print(pow(num1, num2))
else:
print("Something went wrong please try again")
print("Code finished")
It obviously does not take edge cases into concideration (like division by zero, making sure that the stuff that you pass to float() is actually a number) but this should get you going :)
cheers.

How to store result of simple python calculator in variable

I am a beginner to Python and have just started learning recently.
After learning about if, elif and else statements I decided to try and make a simple calculator.
Now, a few hours later I was wondering how I could improve it and make it more complex.
I am trying to store the result of the addition, subtraction, divison or multiplication of the first two numbers in a variable. After doing this I want to Re-create the calculator only I already have the first number.
I am also running into problems with my continue1 if statement, for some reason even if the user inputs "no" the script continues instead of displaying a message.
I'd really appreciate any help at all, Thank you!
Python code:
num1 = float(input("Please enter your first number: "))
num2 = float(input("Please enter your second number: "))
operator = input("Please enter operator: ")
if operator == "/":
print(num1 / num2)
elif operator == "+":
print(num1 + num2)
elif operator == "-":
print(num1 - num2)
elif operator == "*":
print(num1 * num2)
else:
print("FATAL ERROR")
num3 = num1 / num2
num3 = num1 - num2
num3 = num1 + num2
num3 = num1 * num2
continue1 = input ("Would you like too continue? [Yes/No]")
if continue1 == "yes" or "Yes":
operator1 = num4 = float(input("Please enter second number: "))
else:
print("Fatal error")
input("please enter operator")
if operator == "/":
print(num3 / num4)
elif operator == "+":
print(num3 + num4)
elif operator == "-":
print(num3 - num4)
elif operator == "*":
print(num3 * num4)
else:
print("Please press enter to close.")
input("Press Enter to Exit")
In the first part, just assign to a variable (and then print it if you want):
if operator == "/":
num3 = num1 / num2
elif operator == "+":
num3 = num1 + num2
elif operator == "-":
num3 = num1 - num2
elif operator == "*":
num3 = num1 * num2
else:
print("FATAL ERROR")
print(num3)
Regarding the second part of your question, in your statement:
if continue1 == "yes" or "Yes":
this is wrong because or is an operator which will combine the two things on either side of it (typically used where each of these two things is something that evaluates to True or False), so you could have for example:
if continue1 == "yes" or continue1 == "Yes":
You can also add brackets to control the order of execution, as shown below. In this case they do not affect the result, because it is already the case that the == operators are evaluated before the or, but they may make it clearer to read.
if (continue1 == "yes") or (continue1 == "Yes"):
You can also do this instead:
if continue1 in ("yes", "Yes"):
The details of what is going wrong with your original form of the conditional statement are perhaps not important at this stage, but I mention them for sake of completeness. If you enter "No" then the whole expression will actually evaluate to "Yes" (the continue1 == "yes" evaluates to False, and then False or "Yes" evalues to "Yes"). The if statement then treats the value "Yes" (a non-empty string) as a true value and so executes the code which depends on the condition.
num1 = float(input("Please enter your first number: "))
num2 = float(input("Please enter your second number: "))
keepCalculate=True
while keepCalculate:
operator = input("Please enter operator: ")
if operator == "/":
print(num1 / num2)
elif operator == "+":
print(num1 + num2)
elif operator == "-":
print(num1 - num2)
elif operator == "*":
print(num1 * num2)
else:
print("FATAL ERROR")
continue1 = input ("Would you like too continue? [Yes/No]")
if continue1== "yes" or "Yes":
keepCalculate=True
else:
keepCalculate=False
The most simple way todo what you want
simply use
num3 = num1 + num2
to store the codes
"or" in programming doesn't work like or in rel life, it is ussed to separate 2 different conditions, hence use:
if continue1 == "yes" or continue1 == "Yes":
I recreated your code now it's working:
def op(operator,num1,num2):
global num3
if operator == "/":
num3 = num1 / num2
elif operator == "+":
num3 = num1 + num2
elif operator == "-":
num3 = num1 - num2
elif operator == "*":
num3 = num1 * num2
else:
print("FATAL ERROR")
num1 = float(input("Please enter your first number: "))
num2 = float(input("Please enter your second number: "))
operator = input("Please enter operator: ")
op(operator,num1,num2)
print(num3)
continue1 = input ("Would you like too continue? [Yes/No]").lower()
if continue1 in ["yes", "y"]:
num4 = float(input("Please enter second number: "))
operator = input("please enter operator")
op(operator,num3,num4)
print(num3)
else:
print("Fatal error")
input("Press Enter to Exit")
Whatever you do, this code will keep as result, the value of num3 = num1 * num2. You should put these lines in each if, elif

Categories

Resources