Path: csiph.com!usenet.pasdenom.info!dedibox.gegeweb.org!gegeweb.eu!nntpfeed.proxad.net!proxad.net!feeder1-2.proxad.net!usenet-fr.net!nerim.net!novso.com!news2.euro.net!newsgate.cistron.nl!newsgate.news.xs4all.nl!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.001 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'else:': 0.03; 'elif': 0.04; 'arg,': 0.09; 'branches': 0.09; 'check.': 0.09; 'deemed': 0.09; 'okay': 0.09; 'def': 0.10; "wouldn't": 0.11; 'bounds': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'inclined': 0.16; 'instance:': 0.16; 'less,': 0.16; 'nans': 0.16; "range'": 0.16; 'time"': 0.16; "time'": 0.16; 'uncommon': 0.16; 'work.)': 0.16; 'wrote:': 0.17; 'instance,': 0.17; 'integer': 0.17; '(or': 0.18; 'not,': 0.21; "i'd": 0.22; 'script': 0.24; 'pass': 0.25; 'least': 0.25; 'header:In-Reply-To:1': 0.25; 'am,': 0.27; 'guess': 0.27; 'start,': 0.27; 'message-id:@mail.gmail.com': 0.27; 'there.': 0.28; 'arrival': 0.29; 'equality': 0.29; 'kumar': 0.29; 'subject:other': 0.29; 'subject:some': 0.29; 'though.': 0.29; 'time:': 0.29; 'definition': 0.29; 'objects': 0.29; 'probably': 0.29; 'point': 0.31; 'to:addr:python-list': 0.33; 'code:': 0.33; 'received:google.com': 0.34; 'fail': 0.35; 'so,': 0.35; 'expected': 0.35; 'subject:?': 0.35; 'but': 0.36; 'compare': 0.36; 'should': 0.36; 'too': 0.36; 'skip:p 20': 0.36; 'drop': 0.37; 'late': 0.37; 'data': 0.37; 'subject:: ': 0.38; 'to:addr:python.org': 0.39; 'your': 0.60; 'matter': 0.61; 'first': 0.61; 'side': 0.61; 'necessarily': 0.63; 'here': 0.65; 'late.': 0.65; 'hours': 0.66; 'subject:this': 0.84; '2013': 0.84; 'toy': 0.84; 'transport,': 0.91 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:content-type; bh=tyODHHi8eF56mc2MfBv4W1AxFh904iq884Fs7MEnmm8=; b=JLhryjCanIZsH40HclfHe5ATo4HXdT1PDbTpRl2k+oCReVk9LahdKzs3kn0L+VcOk1 D1BuzBJbL6LwmzzO+68+O+2wE2Uhj+L0v04iDFN7gKlXg4dxYMas96ez4BL8qAsOHC0A HNX0GMmny7u2osj2Z4F0L+rB2T+mFbXxQveNi8aG0jD/iCBxLbaOEWyKnID4dz0753yS m62UVLdbxSbHHPefygZ7n0hM2YVS2fcn1Itu3sXQHw1xEp3j1FMHb7cq2RDAJf6uQ35x hYAs2hZZ5JLVnGHy7a90GOIJV4GvEwoPRzKyg1rXUCBSaOYHHzVrSiyhUydWHdIKLRRV /a7w== MIME-Version: 1.0 X-Received: by 10.58.253.161 with SMTP id ab1mr19998470ved.55.1363616179159; Mon, 18 Mar 2013 07:16:19 -0700 (PDT) In-Reply-To: References: Date: Tue, 19 Mar 2013 01:16:19 +1100 Subject: Re: What are some other way to rewrite this if block? From: Chris Angelico To: python-list@python.org Content-Type: text/plain; charset=ISO-8859-1 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 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: 55 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1363616201 news.xs4all.nl 6863 [2001:888:2000:d::a6]:59916 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:41423 On Tue, Mar 19, 2013 at 12:56 AM, Santosh Kumar wrote: > This simple script is about a public transport, here is the code: > > def report_status(should_be_on, came_on): > if should_be_on < 0.0 or should_be_on > 24.0 or came_on < 0.0 or > came_on > 24.0: > return 'time not in range' > elif should_be_on == came_on: > return 'on time' > elif should_be_on > came_on: > return 'early' > elif should_be_on < came_on: > return 'delayed' > else: > return 'something might be wrong' > > print(report_status(123, 12.0)) Well, for a start, I wouldn't compare for equality there. What's your definition of "on time"? In Melbourne, for instance, a service is deemed "on time" if it's less than 1 minute early and less than 5 minutes late. This is probably too broad, but I would guess that up to 1 minute (or at least half a minute) either side should be considered on time. Are you catering here for custom objects or NaNs that might not be equal, less, or greater? If not, drop the else and just have three branches - for instance: if should_be_on >= came_on + 0.5: # Up to half a minute early is okay return 'early' elif should_be_on <= came_on - 1.0: # Up to one minute late is okay return 'delayed' else: return 'on time' As a matter of readability, incidentally, I'd be inclined to invert the conditions and check the time of arrival against the expected time: if came_on < should_be_on - 0.5: # Up to half a minute early is okay return 'early' elif came_on > should_be_on + 1.0: # Up to one minute late is okay return 'delayed' else: return 'on time' I don't understand your bounds check, though. Are you working with floating point hours in the day? (If so, it's still not necessarily right - it's not uncommon to refer to the hours post-midnight as 24:00, 25:00, etc. But for a toy and a PoC, that would work.) But you then pass the integer 123 as the first arg, which will fail that check. What _is_ your data type? ChrisA