Python Forum
while loop on a calculator
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
while loop on a calculator
#1
I'm super new to Python and I'm really having a hard time with this assignment. The previous assignment was a basic calculator. This assignment builds on that calculator by adding a while loop and adding the option to quit. The calculator is supposed to repeatedly loop back to the beginning and ask for a new character until the user types Q to quit. The first basic calculator was working perfectly, but adding the while statement changed that.

Here's what I've got. It doesn't work right and it doesn't like the break at the bottom. I'm grateful for any guidance.


print('This program is a basic calculator that allows you to perform calculations using two numbers and a character that indicates which math operation to perform. Options for the characters are + - * / and %.')

char = input('Enter a character to indicate which operation to perform or type Q or q to quit: ') #putting this here leaves it out of the while loop, but I can't put it after 'while' because it has to be defined first. 

while char != 'Q' or 'q': #is it better to start with char == 'q' or 'Q'? Or something entirely diffent?
        
    a = float(input('Enter a number: ')) 
    b = float(input('Enter another number: ')) 


    if char == '+': 
        sum = a + b 
        print('The sum of ',a, ' and ', b,' is ', sum , sep = '')

    elif char == '-': 
        difference = a-b 
        print(a, ' minus ', b, ' equals ', difference, '.', sep = '')

    elif char == '*':  
        product = a*b  
        print(a, ' times ', b, ' equals ', product, '.', sep='')

    elif char == '/': 

        if b == 0: 
            print('You can not divide a number by zero.')

        else: 
            quotient = a/b 
            rounded = format(quotient, '.2f') 
            print(a, ' divided by ', b, ' equals ', rounded, '.', sep = '')

    elif char == '%': 
        remainder = a%b 
        print('The remainder of ',a, ' and ', b, ' is ', a%b, '.', sep='') 


    else:
        print('That is not a valid character. Please enter + - * / or %.')

else:
    print('Goodbye')
    break #this break isn't allowed here because it's after 'else' but I can't figure out where else to put this part
Thanks in advance for any help!
Reply
#2
Better to start thusly:
print('This program is a basic calculator that allows you to perform calculations using two numbers and a character that indicates which math operation to perform. Options for the characters are + - * / and %.')

while True:
    char = input("Enter q to Quit, otherwise operator (+, -, * /): ")
    
    if char.lower() == 'q':
        break

    if char not in '+-*/':
        print('Invalid entry')        
        continue
    ...
also change at bottom
else:
    print('Goodbye')
    break #this break isn't allowed here because it's after 'else' but I can't figure out where else to put this part
To (no indentation):
print('Goodbye')
Final code should look like:
print('This program is a basic calculator that allows you to perform calculations using two numbers and a character that indicates which math operation to perform. Options for the characters are + - * / and %.')

while True:
    char = input("Enter q to Quit, otherwise operator (+, -, * /): ")
    
    if char.lower() == 'q':
        break

    if char not in '+-*/q':
        print('Invalid entry')        
        continue

    a = float(input('Enter a number: ')) 
    b = float(input('Enter another number: ')) 
 
    if char == '+': 
        sum = a + b 
        print('The sum of ',a, ' and ', b,' is ', sum , sep = '')
 
    elif char == '-': 
        difference = a-b 
        print(a, ' minus ', b, ' equals ', difference, '.', sep = '')
 
    elif char == '*':  
        product = a*b  
        print(a, ' times ', b, ' equals ', product, '.', sep='')
 
    elif char == '/': 
 
        if b == 0: 
            print('You can not divide a number by zero.')
 
        else: 
            quotient = a/b 
            rounded = format(quotient, '.2f') 
            print(a, ' divided by ', b, ' equals ', rounded, '.', sep = '')
 
    elif char == '%': 
        remainder = a%b 
        print('The remainder of ',a, ' and ', b, ' is ', a%b, '.', sep='') 
 
 
    else:
        print('That is not a valid character. Please enter + - * / or %.')

print('Goodbye')
Reply
#3
It works!

Also, what does 'char.lower()' do?

I've been pulling my hair out on this one. Thank you so much!!
Reply
#4
char.lower() returns the text of char in lower case. This allows you to test against 'q' and 'Q' with one test. This gets past this problem:

while char != 'Q' or 'q':
which is a misuse of the 'or' operator. It is equivalent to:

while (char != 'Q') or 'q':
Since non-empty strings evaluate as True, 'q' is always True and the loop condition is always True.

Also, break can't be used outside of a loop, that's why it was working for you.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Calculator Loop Help dock1926 3 3,818 Jun-23-2021, 10:05 PM
Last Post: HereweareSwole
  Python calculator help but not using while loop with true, any flags variable ,break kirt6405 13 5,623 Jun-08-2021, 06:39 AM
Last Post: Larz60+
  Weight loss calculator loop error drogers10940 7 14,426 Feb-14-2021, 12:36 AM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020