[Tutor] isbetween function chapter 5 How to Think Like
Computer Scientist
Lloyd Kvam
pythonTutor at venix.com
Tue Oct 19 15:57:49 CEST 2004
On Tue, 2004-10-19 at 08:45, Eri Mendz wrote:
> Hello all,
>
> I'm a newbie trying to learn Python at my own pace. I work in sales NOT
> programming so please excuse me of obvious things i may overlook in the
> course of my self-teaching.
>
> Here is the code i made trying to solve the exercise mentioned in the
> subject of my email. I made it like so as i think pure if-elif-else
> statement is unwieldy. Of course its just me and pros here got something
> to correct my statement:
>
> #!/usr/bin/env python
> # filename: isbetween.py
> # description: make function with 3 parameters & determine the median
> # Author: Eri Mendz
> # Tue Oct 19 15:07:22 AST 2004
> # CYGWIN_NT-5.0
>
> def test1(x,y,z):
> if x > y and x > z: # x is highest
> if y > z: # z-y-x
> print y, "is between", z, "and", x
> else: # y-z-x
> print z, "is between", y, "and", x
>
> def test2(x,y,z):
> if y > x and y > z: # y is highest
> if x > z: # z-x-y
> print x, "is between", z, "and", y
> else:
> print z, "is between", x, "and", y
>
> def test3(x,y,z):
> if z > x and z > y: # z is highest
> if x > y: # y-x-z
> print x, "is between", y, "and", z
> else:
> print y, "is between", x, "and", z
>
> def isbetween(x,y,z):
> test1()
> test2()
> test3()
>
> # test isbetween()
> isbetween(23,10,56)
>
> I get:
> TypeError: test1() takes exactly 3 arguments (0 given)
>
> Dumb me i didnt supplied arguments as required. But do i really have to
> do that? I like the 3 functions to act as dummy functions (sort of) and
> let the real work happen inside isbetween(). Kindly enlighten me how to
> do it right.
This is the best way (to my mind) to adjust your code:
def isbetween(x,y,z):
def test1():
# the values for x,y,z are picked up from the enclosing isbetween function
if x > y and x > z: # x is highest
if y > z: # z-y-x
print y, "is between", z, "and", x
else: # y-z-x
print z, "is between", y, "and", x
# repeat for test2 & test3
test1()
test2()
test3()
However, there are a couple of points to notice. Python supports
statements like:
if x > y > z: print "x is highest and y is between z and x"
This program really relates labels to values. There is not a lot of
benefit to using python variable names to match the labels. So if you
had a list of (value, label) pairs, you could simply sort the list. And
then display the labels in the correct order. Given:
value_label_list = [(23,'x'),(10,'y'),(56,'z')]
value_label_list.sort()
value_label_list.reverse()
print "Variables from largest to smallest:"
for value,label in value_label_list:
print " ", label
(This glosses over possible equalities, but so does the original code)
Now the problem changes to one of creating the list.
I took a look at the problem definition. It simply requests testing one
particular order of variables and returning a boolean - a true / false
value. I'm not sure where list handling comes in the book.
--
Lloyd Kvam
Venix Corp
More information about the Tutor
mailing list