Steve Rodriguez wrote: > Hey guys n gals, > > New to python, having some problems with while loops, I would like to make > a program quick once q or Q is typed, but thus far I can only get the > first variable to be recognized. My code looks like: > > message = raw_input("-> ") > while message != 'q': > s.send(message) > data = s.recv(2048) > print str(data) > message = raw_input("-> ") > s.close() > print("Shutting Down") > > I've tried: > > while message != 'q' or 'Q':
This evaluates (message != "q") or "Q" and "Q" is always True in a boolean context: >>> bool("Q") True > while message != 'q' or message != 'Q': This is true when at least one of the subexpressions message != "q" message != "Q" is True. When the value of message is "q" it must be unequal to "Q" and vice versa, so there is always at least one true subexpression. > while message != ('q' or 'Q'): When you try the right side in the interactive interpreter you get >>> "q" or "Q" 'q' so this is the same as just message != "q" > Any ideas would be much appreciated! Thanks! :D while message.lower() != "q": while message not in ("q", "Q"): while message != "q" and message != "Q": There's another one that chains boolean expressions while "q" != message != "Q": that I don't recommend here but that is very readable for checking number intervals: if 0 <= some_number < 1: print some_number, "is in the half-open interval [0,1)" You also may consider an infinite loop: while True: message = raw_input("-> ") if message in ("q", "Q"): break s.send(message) ... This avoids the duplicate raw_input(). PS: You sometimes see message in "qQ" but this is buggy as it is true when the message is either "q", "Q", or "qQ". _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor