Gilbert Tsang wrote:
Well, if its in a function you can just do return instead of raise Exception("quit") since the function exits once it returns something. It's sort of the same as the following:Hi there, I have this logic that I cannot wrap my mind it:
def go_jogging(): # go out and jog return
if ( bad_weather =='y' ):
# ask user only if weather is bad.
b = input ( "Weather is really bad, still go out to jog?[y/n]" )
if b == 'y':
go_jogging()
else:
# program should exit now
else:
go_jogging()
####################################################
I can't get the program to stop processing further in the middle (apparently neither exit nor goto-label exist in Python, sorry for the C++ mindset) so I used exception to achieve what I want. I know in that example you could probably manipulate the logic so that program ends at the bottom of the if-tree. My question is then how to exit in the middle of a if-then-else tree? Thanks, Gilbert.
try: if ( bad_weather =='y' ): b = input ( "Weather is really bad, still go out to jog?[y/n]" ) if b == 'y': go_jogging() else: raise Exception( "quit" ) else: go_jogging() except Exception, inst: print "Program exits now" _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Say you have a recursive function fact(n) which takes in a number and returns the factorial of that number. One way to code this would be:
def fact(n): if n > 3: return n*fact(n-1) else: return 2*n
However, since the function 'exits' after a return statement, it saves space in general to do the following:
def fact(n): if n > 3: return n*fact(n-1) return 2*n
Because the only way return 2*n will be reached is if n is smaller than or equal to three, which is what we wanted anyway.
BTW, the way this function works is like this: Let's say you want to calculate fact(10). 10 is greater than 3, so the program calculates 10*fact(9) and so on until fact(3) is reached, at which point it will return 10*(9*(8*(7*(6*(5*(4*(6))))))) (6 is 2 * 3). or the factorial of 10.
I probably didn't do too good a job explaining that, and that's probably not the most efficient implementation (it breaks @ around fact(1000) by default, and around fact(11462) when you use sys.setrecursionlimit(2000) (11462 is as high as it'll go on my machine)), so please feel free to ask questions.
HTH, Orri
-- Email: singingxduck AT gmail DOT com AIM: singingxduck Programming Python for the fun of it.
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor