[Edu-sig] problem with IF

John Zelle john.zelle at wartburg.edu
Sat Jul 24 02:42:21 CEST 2004


Maybe this isn't really the forum, but I can't resist a couple quick 
comments on this example.

Since this is a multiway decision (that is, 8 mutually exclusive 
outcomes based on a single decision value), elif is definitely 
appropriate but having two conditions on each clause is redundant and 
often leads to errors. In fact there is an error in the code below, 
since it can nver return 'N' (dirn can't be both >= 345 and < 22). Of 
course, North is a bit of a special case; one way to do that is to split 
"N" into its two cases:

if dirn < 22: return "N"
elif dirn < 77: return "NE"
elif dirn < 112: return "E"
elif dirn < 157: return "SE"
etc...
elif dirn < 345: return "NW"
else: return "N" # anything >= 345

Also, if one is getting an int as input, you may as well use the input 
function (save raw_input for strings), then you won't accidently use a 
string as an int.

dirn = input("Enter bearing in degrees: ")

Of course, if this were embedded in a GUI, chances are you would be 
forced to get a string and do the conversion.

--John

ps. I can't help thinking there may be a more elegant way of doing the 
bearing conversion.

Rick Holbert wrote:

>Ken,
>
>I think you should check to see if the bearing is between two values as 
>follows:
>
>#!/usr/bin/env python
>
>def dirnPoint(dirn):
>    if dirn >= 345 and dirn < 22:
>        return "N"
>    elif dirn >= 22 and dirn < 77:
>        return "NE"
>    elif dirn >= 77 and dirn < 112:
>        return "E"
>    elif dirn >= 112 and dirn < 157:
>        return "SE"
>    elif dirn >= 157 and dirn < 202:
>        return "S"
>    elif dirn >= 202 and dirn < 247:
>        return "SW"
>    elif dirn >= 247 and dirn < 292:
>        return "W"
>    elif dirn >= 292 and dirn < 345:
>        return "NW"
>
>inp = int(raw_input("Enter Bearing in degrees: "))
>
>dir = dirnPoint(inp)
>
>print "%d degrees is %s" % (inp, dir)
>
>On Thursday 22 July 2004 21:49, ken wrote:
>  
>
>>hello all,
>>I have been trying to write a program to display the reading from a
>>weather station.  I was trying to change the direction of the wind from
>>degrees to points of compass.  Have tried various if.. elif.. but it
>>seems to take the last option in the list regardless of the value of the
>>degrees.
>>    
>>
>_______________________________________________
>Edu-sig mailing list
>Edu-sig at python.org
>http://mail.python.org/mailman/listinfo/edu-sig
>
>
>  
>


More information about the Edu-sig mailing list