In the code below, I'd like the while
loop to exit as soon as a
+ b
+ c
= 1000
. However, testing with print
statements shows that it just continues until the for
loops are done. I've tried while True
and then in the if
statement set False
but that results in an infinite loop. I thought using x = 0
and then setting x = 1
might work but that too just runs until the for
loops finish. What is the most graceful and fastest way to exit? Thanks.
a = 3
b = 4
c = 5
x = 0
while x != 1:
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
x = 1
Python provides two keywords that terminate a loop iteration prematurely: The Python break statement immediately terminates a loop entirely. Program execution proceeds to the first statement following the loop body. The Python continue statement immediately terminates the current loop iteration.
Breaking Out of While Loops. To break out of a while loop, you can use the endloop, continue, resume, or return statement.
In Python, the break statement provides you with the opportunity to exit out of a loop when an external condition is triggered.
While loops start their looping only if the while statement is true, and they continue to loop until the statement becomes false. If you want your while loop to end without using break, you must write it so the while statement eventually becomes false.
The while
loop will match the condition only when the control returns back to it, i.e when the for
loops are executed completely. So, that's why your program doesn't exits immediately even though the condition was met.
But, in case the condition was not met for any values of a
,b
,c
then your code will end up in an infinite loop.
You should use a function here as the return
statement will do what you're asking for.
def func(a,b,c):
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
return # causes your function to exit, and return a value to caller
func(3,4,5)
Apart from @Sukrit Kalra's answer, where he used exit flags you can also use sys.exit()
if your program doesn't have any code after that code block.
import sys
a = 3
b = 4
c = 5
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
sys.exit() #stops the script
help on sys.exit
:
>>> print sys.exit.__doc__
exit([status])
Exit the interpreter by raising SystemExit(status).
If the status is omitted or None, it defaults to zero (i.e., success).
If the status is numeric, it will be used as the system exit status.
If it is another kind of object, it will be printed and the system
exit status will be one (i.e., failure).
If you don't want to make a function ( which you should and refer to Ashwini's answer in that case), here is an alternate implementation.
>>> x = True
>>> for a in range(3,500):
for b in range(a+1, 500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
x = False
break
if x == False:
break
200 375 425.0
31875000.0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With