[Tutor] What is wrong my code?
Hoffmann
oasf2004 at yahoo.com
Sat Mar 25 00:19:50 CET 2006
--- Danny Yoo <dyoo at hkn.eecs.berkeley.edu> wrote:
> > #!/usr/bin/python
> >
> > import math
> >
> > print '''This program calculates the lenght of the
> > hypotenuse of a right triangle
> > given the lenghts of the two legs as
> > parameters.\n'''
> >
> > leg1 = input('Enter the first leg of the triangle:
> ')
> > leg2 = input('Enter the second leg of the
> triangle: ')
>
>
> Hi Hoffmann,
>
> Although this works, the use of input() is a little
> less safe than using
> raw_input(), and input gives slightly unhappy error
> messages on certain
> kinds of input. For example:
>
> ######
> >>> input("number? ")
> number? four
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "<string>", line 1, in <module>
> NameError: name 'four' is not defined
> ######
>
> That is, certain kinds of input will give us things
> like NameError.
>
>
> But here's another example where input() can do
> funny things:
>
> ######
> >>> def test():
> ... x = input("x?: ")
> ... y = input("y?: ")
> ... print x, y
> ...
> >>> test()
> x?: 3
> y?: x
> 3 3
> ######
>
> Although this is "cute", it shows that it's also
> terribly hard to figure
> out what's going on with input() sometimes. *grin*
>
> So because of this, I'd recommend using raw_input()
> instead: even though
> you have to do a little more work to get numbers out
> of it, it's
> ultimately a bit saner and more reliable to use than
> input().
>
>
>
> > def hypotenuse(x, y):
> > result = math.sqrt(x**2 + y**2)
> > return result
>
> There's no need to do the assignment to 'result'
> here. We can return the
> value straightaway:
>
> #################################
> def hypotenuse(x, y):
> return math.sqrt(x**2 + y**2)
> #################################
>
>
>
> Although it's "obvious", it might also help to add
> some kind of
> documentation string explaining hypotenuse, and what
> it takes in
> and returns. Something like:
>
>
###################################################################
> def hypotenuse(x, y):
> """hypotenuse: number number -> number
> hypotenuse() returns the length of the
> hypotenuse of a right
> triangle with legs of length x and y."""
> # ... rest of function body
>
###################################################################
>
> might seem like overkill for such a simple function,
> but the habit is a
> good one.
>
>
> In an ideal world, all functions would have some
> kind of comment like
> that, to communicate the human intent to the reader.
> I admit that I often
> just hack functions up without saying what they
> mean... but I do feel
> guilty afterwards. *grin*
>
>
> I hope this helps!
>
Hi Danny,
I did like your comments about input and raw_input.
What about if I use on my program:
leg1 = int( raw_input('Enter the first leg of the
triangle: ') )
leg2= int( raw_input('Enter the second leg of the
triangle: ') )
What do you think? This is better/safer, right?
Thanks,
Hoffmann
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the Tutor
mailing list