Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!feeder.news-service.com!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.019 X-Spam-Evidence: '*H*': 0.96; '*S*': 0.00; 'exception.': 0.09; 'pm,': 0.11; '>>>': 0.12; 'slightly': 0.12; 'binary': 0.14; 'wrote:': 0.14; '(another': 0.16; '(last': 0.16; 'boolean': 0.16; 'contrived': 0.16; 'exploits': 0.16; 'expression)': 0.16; 'false)': 0.16; 'mean,': 0.16; 'met.': 0.16; 'packet': 0.16; 'situations,': 0.16; 'subject:() ': 0.16; 'subject:function': 0.16; 'tue,': 0.20; 'maybe': 0.21; 'header:In-Reply-To:1': 0.22; 'posted': 0.22; 'subject:code': 0.23; 'example': 0.24; 'received:209.85.212': 0.25; 'compare': 0.26; 'equivalent': 0.26; 'chris': 0.27; 'raise': 0.29; "won't": 0.30; 'skip:( 20': 0.31; 'guarantees': 0.31; 'recall': 0.31; 'does': 0.31; "can't": 0.31; 'to:addr:python-list': 0.32; '...': 0.32; "i've": 0.33; 'done,': 0.33; 'from:charset:iso-8859-1': 0.33; 'fairly': 0.33; "isn't": 0.34; 'received:192': 0.34; 'received:192.168.0': 0.35; 'christian': 0.35; 'flag': 0.35; 'received:192.168': 0.37; 'case': 0.37; 'received:209.85': 0.37; 'useful': 0.37; 'apr': 0.38; 'steven': 0.38; 'received:google.com': 0.38; 'but': 0.38; 'explain': 0.39; 'to:addr:python.org': 0.39; 'where': 0.39; 'received:209': 0.39; 'header:Mime-Version:1': 0.39; 'how': 0.39; 'would': 0.40; 'header:Received:5': 0.40; 'direct': 0.61; '2011': 0.62; 'message-id:@localhost.localdomain': 0.74; 'guarantee': 0.75; 'exclusive': 0.77; 'satisfied': 0.83; 'concept:': 0.84; 'specifics': 0.84; 'suspicious': 0.84; 'sum': 0.89; 'or:': 0.91 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:subject:from:to:in-reply-to:references :content-type:date:message-id:mime-version:x-mailer :content-transfer-encoding; bh=sOd/Me2oiwbx0e2xcm52OkCv1KUu/jz1TDq2cXipNKQ=; b=GOepY7GxZ7pldAbvHKUEtdVRf86QKq6AOdyRN4aHH2iLT+TKlNwjkFhspSdWb213Kt FZuGvJI1kunsvJRlMxKChHEuj5Aw5oc/PhXSyizTjkk1RdtCUiVmg/6X/J3mRQ+9BjmE jx0LIwqVK5Nwn1mN4MvS03DVl9OayUnZ+3lDw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:in-reply-to:references:content-type:date:message-id :mime-version:x-mailer:content-transfer-encoding; b=LQF65AzNxhI1itim9N+/HOWP1i1WFjVo9Jwn6VOczZ0Nhjj70eowToUTlp7jSK2pm1 R2tn48V6R6MfqaJ0cg2V1Bmz4I0JTsxC6McIDgtVBnoPjyq+IzijMCvGt/2udHUl29VP g8GRNIe9ddBgehKIpzjz0/CdW9gvrPeYUq71o= Subject: Re: Equivalent code to the bool() built-in function From: Westley =?ISO-8859-1?Q?Mart=EDnez?= To: python-list@python.org In-Reply-To: References: <4da9fb0b$0$13696$426a74cc@news.free.fr> <87k4etho6e.fsf@benfinney.id.au> <4daa2b72$0$32037$426a74cc@news.free.fr> <87d3klha85.fsf@benfinney.id.au> <4daaa6f6$0$20187$426a74cc@news.free.fr> <911dvfF6ocU1@mid.individual.net> <4dac97ca$0$10609$742ec2ed@news.sonic.net> <4dad4b29$0$29984$c3e8da3$5496439d@news.astraweb.com> Content-Type: text/plain; charset="UTF-8" Date: Tue, 19 Apr 2011 06:43:45 -0700 Mime-Version: 1.0 X-Mailer: Evolution 2.32.2 Content-Transfer-Encoding: 7bit X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 41 NNTP-Posting-Host: 82.94.164.166 X-Trace: 1303220633 news.xs4all.nl 41103 [::ffff:82.94.164.166]:46587 X-Complaints-To: abuse@xs4all.nl Xref: x330-a1.tempe.blueboxinc.net comp.lang.python:3560 On Tue, 2011-04-19 at 19:00 +1000, Chris Angelico wrote: > On Tue, Apr 19, 2011 at 6:43 PM, Steven D'Aprano > wrote: > > but I don't see how > > > > (arbitrary expression) + (another expression) + ... + (last expression) > > > > can have any guarantees applied. I mean, you can't even guarantee that > > they won't raise an exception. Can you explain what you mean? > > What Christian posted isn't something I've often done, but here's > something slightly different that exploits the same > comparisons-return-summable-values concept: > > A condition with N subconditions is deemed to be satisfied if a > minimum of M of them are true. This is a general case of the boolean > Or (N = 2, M = 1) and And (N = 2, M = 2), but does not have a direct > equivalent in binary operators. You simply sum the subconditions, > compare against M, and you have your answer. > > if (((port<1024) + (!ip.startswith("192.168.")) + > (greylist[ip]>time()) + (++spewcnt>10))>=3) // flag this packet as > suspicious > > Contrived example as I don't recall any specifics right now, but this > will pick up any packets where three or more of the conditions are > met. Useful only in fairly specific situations, but I don't know of > any way to do this with just AND/OR/NOT that would be as clear and > simple. > > Chris Angelico Exclusive or: >>> if not (True and False and False and False) or (False and True and False and False) or (False and False and True and False) or (False and False and False and True): ... print(True) Maybe a little silly.