how to stop the loop in while in python?

Question:

i tried to do a while loop in which after the user inputs ‘no’ then the loop will stop and end the program but it did not work and i can’t find the problem

finish = True
while (finish) :
    kg = float(input('Enter kg: '))
    total = kg * 2.2
    print('The converted kg is: ', total, 'lbs')
    question = input('do you want to quit?')
if question == 'Yes' or 'yes' or 'YES':
    finish = False
    print('Bye-Bye')
else :
    print('OK!')
    

this is the code and when the user typed ‘no’ it should end the program

Answers:

The problem here is that your identation is off. The if/else statement is not ran inside the loop but after it. Modify your code like so:

finish = True
while (finish) :
    kg = float(input('Enter kg: '))
    total = kg * 2.2
    print('The converted kg is: ', total, 'lbs')
    question = input('do you want to quit?')
    if question == 'Yes' or 'yes' or 'YES':
        finish = False
        print('Bye-Bye')
    else :
        print('OK!')
Answered By: Damian Robert

As @Damian Robert said, the indentation on your if/else statements was off

However there are better ways to exit to loop, namely with a break statement inside the while loop

This exits the loop at its current iteration, meaning you don’t need to set finish to be False, probably saving time as the program doesn’t have to run another iteration of the loop and check the variable again. While this won’t make any difference in a small script like this, it is best practise for future code

I have also changed the code regarding the user’s input, it now should convert the str to lowercase then check if the letter y is present in the str – this just reduces the chance of the user inputting the response incorrectly

import sys

finish = True
while finish:
    kg = float(input('Enter kg: '))
    total = kg * 2.2
    print(f'The converted kg is: {total}lbs')
    question = input('Do you want to quit?')
    if 'y' in question.lower(): #converts str to lowercase to compare whether it contains the str 'y'
        #finish = False #not needed here unless you need to access it later in the script
        print('Bye-Bye!')
        break #exit the while loop
    else:
        print('OK!')
        continue #restart loop, not actually needed as will continue to next iteration naturally, but can improve readability

print('Exiting Program')
sys.exit(0) #program will end naturally here, so `sys.exit(0)` isn't really needed but it can improve readability

Hope this helps ツ

Answered By: Cornelius-Figgle
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.