Web Images Videos Maps News Groups Gmail more »
Recently Visited Groups | Help | Sign in
Google Groups Home
ten small Python programs
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  Messages 1 - 25 of 44 - Collapse all  -  Translate all to Translated (View all originals)   Newer >
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Steve Howell  
View profile  
(3 users)  More options May 27 2007, 4:43 am
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sat, 26 May 2007 11:43:25 -0700 (PDT)
Local: Sun, May 27 2007 4:43 am
Subject: ten small Python programs
I've always thought that the best way to introduce new
programmers to Python is to show them small code
examples.  

When you go to the tutorial, though, you have to wade
through quite a bit of English before seeing any
Python examples.

Below is my attempt at generating ten fairly simple,
representative Python programs that expose new users
to most basic concepts, as well as the overall syntax.

It was an interesting exercise.  I constrained myself
to ten lines or less, and it was pretty easy to
incorporate loops, conditionals, print, open(), lists,
tuples, dictionaries, and imported modules.  

It was harder to show classes, and my ShoppingCart
class is nothing more than an encapsulation of a list,
which has dubious value (although it's the start of
something more useful).

Anyway, here goes:

    ------
    print 'hello world'

    ------
    for name in ('peter', 'paul', 'mary'):
        print name

    ------
    # This is a Python comment. \n is a newline
    name = raw_input('What is your name?\n')
    print 'Hi', name

    ------
    parentRabbits, babyRabbits = (1, 1)
    while babyRabbits < 100:
        print 'This generation has %d rabbits' %
babyRabbits
        parentRabbits, babyRabbits = (babyRabbits,
parentRabbits + babyRabbits)

    ------
    # def defines a method in Python
    def tax(itemCharge, taxRate = 0.05):
        return itemCharge * taxRate
    print '%.2f' % tax(11.35)
    print '%.2f' % tax(40.00, 0.08)

    ------
    import re
    for test_string in [ '555-1212', 'ILL-EGAL']:
        if re.match('\d\d\d-\d\d\d\d$', test_string):
            print test_string, 'is a valid US local
phone number'
        else:
            print test_string, 'rejected'

    ------
    prices = {'apple': 0.40, 'banana': 0.50}
    myPurchase = {
        'apple': 1,
        'banana': 6}
    groceryBill = sum([prices[fruit] *
myPurchase[fruit]
        for fruit in myPurchase])
    print 'I owe the grocer $%.2f' % groceryBill

    ------
    class ShoppingCart:
        def __init__(self): self.items = []
        def buy(self, item): self.items.append(item)
        def boughtItems(self): return self.items
    myCart = ShoppingCart()
    myCart.buy('apple')
    myCart.buy('banana')
    print myCart.boughtItems()

    ------
    # indent your Python code to put into an email
    import glob
    pythonFiles = glob.glob('*.py')
    pythonFiles.sort()
    for fn in pythonFiles:
        print '    ------'
        for line in open(fn):
            print '    ' + line.rstrip()
        print

    ------
    import time
    now = time.localtime()
    hour = now.tm_hour
    if hour < 8: print 'sleeping'
    elif hour < 9: print 'commuting'
    elif hour < 17: print 'working'
    elif hour < 18: print 'commuting'
    elif hour < 20: print 'eating'
    elif hour < 22: print 'resting'
    else: print 'sleeping'

___________________________________________________________________________ _________
Expecting? Get great news right away with email Auto-Check.
Try the Yahoo! Mail Beta.
http://advision.webevents.yahoo.com/mailbeta/newmail_tools.html


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
John K Masters  
View profile  
 More options May 27 2007, 5:15 am
Newsgroups: comp.lang.python
From: John K Masters <johnmast...@oxtedonline.net>
Date: Sat, 26 May 2007 20:15:16 +0100
Local: Sun, May 27 2007 5:15 am
Subject: Re: ten small Python programs
On 11:43 Sat 26 May     , Steve Howell wrote:

Many thanks for that. This is exactly what is missing in most introductory
books. Simple, relevant and concise examples.

Regards, John
--
War is God's way of teaching Americans geography
Ambrose Bierce (1842 - 1914)


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steven Bethard  
View profile  
 More options May 27 2007, 5:38 am
Newsgroups: comp.lang.python
From: Steven Bethard <steven.beth...@gmail.com>
Date: Sat, 26 May 2007 13:38:44 -0600
Local: Sun, May 27 2007 5:38 am
Subject: Re: ten small Python programs

Steve Howell wrote:
> I've always thought that the best way to introduce new
> programmers to Python is to show them small code
> examples.  

> When you go to the tutorial, though, you have to wade
> through quite a bit of English before seeing any
> Python examples.

> Below is my attempt at generating ten fairly simple,
> representative Python programs that expose new users
> to most basic concepts, as well as the overall syntax.

Very cool! Do you mind putting this up on the Wiki somewhere so that we
can link to it more easily? Maybe something like:

     http://wiki.python.org/moin/SimplePrograms

<nitpick>
Though the code should probably follow PEP 8 guidelines, e.g.
under_scores instead of camelCase for object and method names:

     http://www.python.org/dev/peps/pep-0008/
</nitpick>

>     class ShoppingCart:
>         def __init__(self): self.items = []
>         def buy(self, item): self.items.append(item)
>         def boughtItems(self): return self.items
>     myCart = ShoppingCart()
>     myCart.buy('apple')
>     myCart.buy('banana')
>     print myCart.boughtItems()

I think boughtItems() is probably not a good example of Python code
since in this case, you should probably just write ``my_cart.items``.
Maybe it should define ``__len__`` instead? Or maybe something like::

     def select_items(self, prefix):
         return [item for item in self.items if item.startswith(prefix)]

STeVe


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 27 2007, 6:05 am
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sat, 26 May 2007 13:05:02 -0700 (PDT)
Local: Sun, May 27 2007 6:05 am
Subject: Re: ten small Python programs

--- Steven Bethard <steven.beth...@gmail.com> wrote:

> Very cool! Do you mind putting this up on the Wiki
> somewhere so that we
> can link to it more easily? Maybe something like:

>      http://wiki.python.org/moin/SimplePrograms

Done.

> <nitpick>
> Though the code should probably follow PEP 8
> guidelines, e.g.
> under_scores instead of camelCase for object and
> method names:

>      http://www.python.org/dev/peps/pep-0008/
> </nitpick>

I think I fixed them, please see Wiki to verify.

I think the problem here is that it's hard to write a
useful class in less than 10 lines of code.  Can
somebody else give it a try?

Although I didn't call it out in the email, I tried to
make each program progressively one line longer, so if
somebody wants to write, say, an 11-line class
example, then I will try fill in the gap with another
8-liner.

Did I miss any basic concepts in the first 10
programs?  Maybe an 8-liner could demonstrate command
line arguments?

___________________________________________________________________________ _________Yahoo! oneSearch: Finally, mobile search
that gives answers, not web links.
http://mobile.yahoo.com/mobileweb/onesearch?refer=1ONXIC


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Paul McGuire  
View profile  
 More options May 27 2007, 11:23 am
Newsgroups: comp.lang.python
From: Paul McGuire <pt...@austin.rr.com>
Date: 26 May 2007 18:23:39 -0700
Local: Sun, May 27 2007 11:23 am
Subject: Re: ten small Python programs
I ***love*** this "10 Little Programs" idea!  As soon as I get a
breathing space, I'm going to add a "10 Little Parsers" page to the
pyparsing wiki!

On May 26, 2:38 pm, Steven Bethard <steven.beth...@gmail.com> wrote:

> <nitpick>
> Though the code should probably follow PEP 8 guidelines, e.g.
> under_scores instead of camelCase for object and method names:

>      http://www.python.org/dev/peps/pep-0008/
> </nitpick>

Really?  Underscore-separated words preferred over camel case?  What
is the rationale for this?  This style is so retro/80's/C-ish.  It
seems more like a Java backlash to me than anything else.  If we (or
Guido) don't like changing case to indicate word breaks, why are class
names to be UpperCamelCase, and not Capitalized_with_underscores?  If
there is a casing convention nit to pick, I'd focus on UpperCamelCase
for class names, lower case (either with underscores or mixed case)
for attributes and method names, and UNDERSCORE_SEPARATED_ALL_CAPS for
constants.

If we want to just say "well, PEP-8 says such and such," I think this
is an area where the thinking has possibly evolved since 2001.  Also,
I think the PEP would benefit from explicitly discouraging some
practices, such as Hungarian notation.

> >     class ShoppingCart:
> >         def __init__(self): self.items = []
> >         def buy(self, item): self.items.append(item)
> >         def boughtItems(self): return self.items
> >     myCart = ShoppingCart()
> >     myCart.buy('apple')
> >     myCart.buy('banana')
> >     print myCart.boughtItems()

If you want to nitpick, I'd rather go after the one-liner methods with
the body on the same line as the def statement.

How's this for a better non-trivial method example:

    MAX_ITEMS_FOR_EXPRESS_LANE = 10
    def canUseExpressLane(self):
        return (len(self.items) <= MAX_ITEMS_FOR_EXPRESS_LANE)

or call it "can_use_express_lane" if you must.

I guess pyparsing with its mixedCase functions and attributes is
doomed for the Dunce Corner.  Too bad for BeautifulSoup, cElementTree,
and wxPython that are also at variance with this canon of Python
coding style. ("Modules should have short, all-lowercase names. ...
Python packages should also have short, all-lowercase names, although
the use of underscores is discouraged.")

-- Paul


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Holden  
View profile  
 More options May 27 2007, 11:35 am
Newsgroups: comp.lang.python
From: Steve Holden <st...@holdenweb.com>
Date: Sat, 26 May 2007 21:35:54 -0400
Local: Sun, May 27 2007 11:35 am
Subject: Re: ten small Python programs
Paul McGuire wrote:

[...].

> I guess pyparsing with its mixedCase functions and attributes is
> doomed for the Dunce Corner.  Too bad for BeautifulSoup, cElementTree,
> and wxPython that are also at variance with this canon of Python
> coding style. ("Modules should have short, all-lowercase names. ...
> Python packages should also have short, all-lowercase names, although
> the use of underscores is discouraged.")

Although the names in wxPython are indeed contrary to PEP 8 (because
they are the same as the names used in wxWidgets) I should point out
that nowadays the name you import is "wx".

regards
  Steve
--
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC/Ltd           http://www.holdenweb.com
Skype: holdenweb      http://del.icio.us/steve.holden
------------------ Asciimercial ---------------------
Get on the web: Blog, lens and tag your way to fame!!
holdenweb.blogspot.com        squidoo.com/pythonology
tagged items:         del.icio.us/steve.holden/python
All these services currently offer free registration!
-------------- Thank You for Reading ----------------


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 27 2007, 11:48 am
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sat, 26 May 2007 18:48:45 -0700 (PDT)
Local: Sun, May 27 2007 11:48 am
Subject: Re: ten small Python programs

--- Paul McGuire <pt...@austin.rr.com> wrote:

> I ***love*** this "10 Little Programs" idea!  As
> soon as I get a
> breathing space, I'm going to add a "10 Little
> Parsers" page to the
> pyparsing wiki!

Thanks. :)

I'm thinking you could actually have a progression
from a 1 line program up to a 50-line program.  The
number 50 is kind of arbitrary, but my gut says that
by a 50-line program, you will have demonstrated
almost every useful concept.

Agreed.  I didn't like that either.

> How's this for a better non-trivial method example:

>     MAX_ITEMS_FOR_EXPRESS_LANE = 10
>     def canUseExpressLane(self):
>         return (len(self.items) <=
> MAX_ITEMS_FOR_EXPRESS_LANE)

> or call it "can_use_express_lane" if you must.

Yep, that sounds more in the ballpark of what I'd want
to show, versus a weakish class that just encapulates
a list.

Here's my challenge to whoever wants to take it--write
(or find) a program with 20 or fewer lines that
sufficiently motivates the need for classes, has
decent Python style, and is newbie friendly.

The tutorial has this example, which is useful for
demonstrating the syntax of classes, but it doesn't
actually do anything interesting:

class MyClass:
    "A simple example class"
    i = 12345
    def f(self):
        return 'hello world'

It also has a ComplexNumber class, but I don't want to
scare away mathphobes.

It does have this idiom, which I think is worth
putting somewhere into the progression.

class Employee:
    pass

john = Employee() # Create an empty employee record

# Fill the fields of the record
john.name = 'John Doe'
john.dept = 'computer lab'
john.salary = 1000

___________________________________________________________________________ _________Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more.
http://mobile.yahoo.com/go?refer=1GNXIC


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Paul McGuire  
View profile  
 More options May 27 2007, 12:13 pm
Newsgroups: comp.lang.python
From: Paul McGuire <pt...@austin.rr.com>
Date: 26 May 2007 19:13:46 -0700
Local: Sun, May 27 2007 12:13 pm
Subject: Re: ten small Python programs
On May 26, 8:48 pm, Steve Howell <showel...@yahoo.com> wrote:

> I'm thinking you could actually have a progression
> from a 1 line program up to a 50-line program.  The
> number 50 is kind of arbitrary, but my gut says that
> by a 50-line program, you will have demonstrated
> almost every useful concept.

If there is anything arbitrary here, I'd say it is your "increment
each example by one source line" constraint.  This can force you to
use some bad coding practices to meet your target line count for a
given example.

Maybe try this approach:  pick your top 10/20/50 language features and
develop concise examples. Then order the examples by length as a first
cut (longer examples probably *are* more complex), and then reorder a
bit to handle pre-requisites (introduce a minimum of new features,
preferably 1, per example).  Overall, I'd have a tough time picking
just 10 language features to illustrate, but there are probably 10-20
basic features that will get new people onto fairly productive
ground.  Pick 20 as your example count (50 sounds a bit long), and
stick to it, and then later add "20 More Little Programs" for the next
wave of examples in increasing complexity.

One other nit to pick: have your example classes inherit from object,
to get new people using new-style classes from the get-go.

-- Paul


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steven Bethard  
View profile  
(1 user)  More options May 27 2007, 12:33 pm
Newsgroups: comp.lang.python
From: Steven Bethard <steven.beth...@gmail.com>
Date: Sat, 26 May 2007 20:33:04 -0600
Local: Sun, May 27 2007 12:33 pm
Subject: Re: ten small Python programs

Paul McGuire wrote:
> I ***love*** this "10 Little Programs" idea!  As soon as I get a
> breathing space, I'm going to add a "10 Little Parsers" page to the
> pyparsing wiki!

> On May 26, 2:38 pm, Steven Bethard <steven.beth...@gmail.com> wrote:
>> <nitpick>
>> Though the code should probably follow PEP 8 guidelines, e.g.
>> under_scores instead of camelCase for object and method names:

>>      http://www.python.org/dev/peps/pep-0008/
>> </nitpick>

> Really?  Underscore-separated words preferred over camel case?  What
> is the rationale for this?

Rationale?  It's a style guide.  There is no rationale. ;-)

> If we want to just say "well, PEP-8 says such and such," I think this
> is an area where the thinking has possibly evolved since 2001.

I really don't think so. If anything, it's gotten more strict. PEP 8
used to allow either camelCase or under_scores. Now it only allows the
latter.

> I guess pyparsing with its mixedCase functions and attributes is
> doomed for the Dunce Corner.  Too bad for BeautifulSoup, cElementTree,
> and wxPython that are also at variance with this canon of Python
> coding style.

Many (if not all) of these modules were written before the most recent
incarnation of PEP 8. Thus, they fall under the second good reason "to
break a particular rule":

     (2) To be consistent with surrounding code that also breaks it

Of course, for new code, such as that in this thread, there's no reason
to break from the PEP 8 guidelines.

STeVe


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 27 2007, 12:58 pm
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sat, 26 May 2007 19:58:10 -0700 (PDT)
Local: Sun, May 27 2007 12:58 pm
Subject: Re: ten small Python programs

--- Paul McGuire <pt...@austin.rr.com> wrote:

I understand your point, but I'm sticking to the
concept for now.  My intent with the progression isn't
so much for each example to thoroughly teach a concept
(although I could certainly hyperlink to a more
in-depth treatment), but really more to give a bird's
eye view of the language very quickly.

I recently helped teach a Java programmer to program
in Python, and he learned a lot just by seeing simple
examples.  So I guess my target audience isn't so much
people learning how to program; it's more for
programmers getting their first exposure to Python.

On the other side of the fence, I recently tried to
relearn a bit of Ruby, and I remember being frustrated
by their tutorials, as really, I just wanted to see a
bunch of simple programs, and I can figure out mostly
what they're doing.  Instead, I had to wade through
verbose descriptions of what a variable is, rules for
how you construct identifiers, etc.

My only reluctance with that approach is that it
sounds like a little more work than I'm ready to take
on right away.  But it's on the Wiki now, so maybe
other folks can help me grow it.

> One other nit to pick: have your example classes
> inherit from object,
> to get new people using new-style classes from the
> get-go.

My only fear here is that when old classes go away
(Py3K? I don't know), that practice may become
obsolete.

But on a more general note, I welcome folks to just
clean up my examples on the Wiki if I accidentally
introduce some bad practices...but preserving line
counts. :)

___________________________________________________________________________ _________
Never miss an email again!
Yahoo! Toolbar alerts you the instant new Mail arrives.
http://tools.search.yahoo.com/toolbar/features/mail/


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Paul McGuire  
View profile  
 More options May 27 2007, 12:58 pm
Newsgroups: comp.lang.python
From: Paul McGuire <pt...@austin.rr.com>
Date: 26 May 2007 19:58:59 -0700
Local: Sun, May 27 2007 12:58 pm
Subject: Re: ten small Python programs
Out of curiosity, how does this style jibe with the latest embracing
of Unicode identifiers?  Ever tried to type an underscore on a non-US
keyboard?  I have a heck of a time finding/typing the '_' character
when I visit our clients in Germany, but this may just be my own
personal Amerocentric issue (I also get messed up by the transposition
of Y and Z on German keyboards, but my German colleagues
understandably are not bothered by it).  For someone already familiar
with that keyboard layout, is typing an underscore any more difficult
than my pressing Shift-_ on my US keyboard?

-- Paul


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Paul McGuire  
View profile  
 More options May 27 2007, 1:37 pm
Newsgroups: comp.lang.python
From: Paul McGuire <pt...@austin.rr.com>
Date: 26 May 2007 20:37:51 -0700
Local: Sun, May 27 2007 1:37 pm
Subject: Re: ten small Python programs
On May 26, 9:58 pm, Paul McGuire <p...@austin.rr.com> wrote:

> Out of curiosity, how does this style jibe with the latest embracing
> of Unicode identifiers?  Ever tried to type an underscore on a non-US
> keyboard?  I have a heck of a time finding/typing the '_' character
> when I visit our clients in Germany, but this may just be my own
> personal Amerocentric issue (I also get messed up by the transposition
> of Y and Z on German keyboards, but my German colleagues
> understandably are not bothered by it).  For someone already familiar
> with that keyboard layout, is typing an underscore any more difficult
> than my pressing Shift-_ on my US keyboard?

> -- Paul

Steve, sorry for going so far off-topic.  I've started a new thread on
my questions about this aspect of PEP-8, and if there's more to say
about this, people should post it there.

-- Paul


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steven D'Aprano  
View profile  
 More options May 27 2007, 4:09 pm
Newsgroups: comp.lang.python
From: Steven D'Aprano <st...@REMOVE.THIS.cybersource.com.au>
Date: Sun, 27 May 2007 16:09:59 +1000
Local: Sun, May 27 2007 4:09 pm
Subject: Re: ten small Python programs

On Sat, 26 May 2007 18:48:45 -0700, Steve Howell wrote:
> It also has a ComplexNumber class, but I don't want to
> scare away mathphobes.

Is it as short as this one-liner?

ComplexNumber = complex

--
Steven.


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 27 2007, 4:30 pm
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sat, 26 May 2007 23:30:37 -0700 (PDT)
Local: Sun, May 27 2007 4:30 pm
Subject: Re: ten small Python programs

--- Steven D'Aprano

<st...@REMOVE.THIS.cybersource.com.au> wrote:
> On Sat, 26 May 2007 18:48:45 -0700, Steve Howell
> wrote:

> > It also has a ComplexNumber class, but I don't
> want to
> > scare away mathphobes.

> Is it as short as this one-liner?

> ComplexNumber = complex

The "It" above refers to *the* Python Tutorial,
written by Guido van Rossum.  Here is an excerpt:

>>> class Complex:

...     def __init__(self, realpart, imagpart):
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i

(3.0, -4.5)

Obviously, it's not surprising that a useful class in
a tutorial would have a corresponding implementation
in the standard library, but I'm not sure newbies
would learn much about classes from this statement:

    ComplexNumber = complex

___________________________________________________________________________ _________
Need Mail bonding?
Go to the Yahoo! Mail Q&A for great tips from Yahoo! Answers users.
http://answers.yahoo.com/dir/?link=list&sid=396546091


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 27 2007, 4:51 pm
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sat, 26 May 2007 23:51:29 -0700 (PDT)
Local: Sun, May 27 2007 4:51 pm
Subject: Re: ten small Python programs

--- Steven D'Aprano wrote:
> On Sat, 26 May 2007 18:48:45 -0700, Steve Howell
> wrote:

> > It also has a ComplexNumber class, but I don't
> want to
> > scare away mathphobes.

> Is it as short as this one-liner?

> ComplexNumber = complex

Along the idea of not reinventing a class from the
standard library in the list of ten small Python
programs (which has since grown), I went with the
classic BankAccount example for the first program to
introduce the "class" statement.

You can see the code here:

http://wiki.python.org/moin/SimplePrograms

___________________________________________________________________________ _________Be a better Globetrotter. Get better travel answers from someone who knows. Yahoo! Answers - Check it out.
http://answers.yahoo.com/dir/?link=list&sid=396545469


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
BartlebyScrivener  
View profile  
 More options May 27 2007, 10:45 pm
Newsgroups: comp.lang.python
From: BartlebyScrivener <bscrivene...@gmail.com>
Date: 27 May 2007 05:45:44 -0700
Local: Sun, May 27 2007 10:45 pm
Subject: Re: ten small Python programs
On May 26, 1:43 pm, Steve Howell <showel...@yahoo.com> wrote:

>     ------
>     parentRabbits, babyRabbits = (1, 1)
>     while babyRabbits < 100:
>         print 'This generation has %d rabbits' %
> babyRabbits
>         parentRabbits, babyRabbits = (babyRabbits,
> parentRabbits + babyRabbits)

>     ------
>     # def defines a method in Python
>     def tax(itemCharge, taxRate = 0.05):
>         return itemCharge * taxRate
>     print '%.2f' % tax(11.35)
>     print '%.2f' % tax(40.00, 0.08)

For the person new to programming (doesn't come from C or other
languages), I think you need to add a separate explanation of string
formatting and how it works, or at least add a comment that tells them
you are using string formatting so that they can search and find out
how it works. If your aim is to teach simple programming concepts, why
confuse them so early on with fancy interpolation?

Something like

# uses Python string formatting
# http://docs.python.org/lib/typesseq-strings.html

but really I think it will just be a distraction

rd


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 28 2007, 1:23 am
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sun, 27 May 2007 08:23:26 -0700 (PDT)
Local: Mon, May 28 2007 1:23 am
Subject: Re: ten small Python programs

--- BartlebyScrivener <bscrivene...@gmail.com> wrote:
> On May 26, 1:43 pm, Steve Howell
> <showel...@yahoo.com> wrote:
> >     ------
> >     # def defines a method in Python
> >     def tax(itemCharge, taxRate = 0.05):
> >         return itemCharge * taxRate
> >     print '%.2f' % tax(11.35)
> >     print '%.2f' % tax(40.00, 0.08)

I decided to go with a simpler example up front.

    ------
    # def defines a method in Python
    def say_hello(name):
        print 'hello', name
    say_hello('Jack')
    say_hello('Jill')

More here:

http://wiki.python.org/moin/SimplePrograms

Somebody also fixed a few style things in my other
examples, changing a tuple to a list, catching a more
specific exception.  Whoever you are, thanks, I agree.

___________________________________________________________________________ _________Sick sense of humor? Visit Yahoo! TV's
Comedy with an Edge to see what's on, when.
http://tv.yahoo.com/collections/222


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 28 2007, 1:36 am
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sun, 27 May 2007 08:36:28 -0700 (PDT)
Local: Mon, May 28 2007 1:36 am
Subject: Re: ten small Python programs

--- BartlebyScrivener <bscrivene...@gmail.com> wrote:

> For the person new to programming (doesn't come from
> C or other
> languages), I think you need to add a separate
> explanation of string
> formatting and how it works, or at least add a
> comment that tells them
> you are using string formatting so that they can
> search and find out
> how it works. If your aim is to teach simple
> programming concepts, why
> confuse them so early on with fancy interpolation?

It's a thought provoking question, and I think my aim
here is not exactly to teach simple programming
concepts, but more to expose people to what Python
looks like.  I'm not really intending this page to be
a tutorial, as several good tutorials already exist.

I'm really targeting a particular niche of people.
There are folks that know how to program, but don't
know anything about Python, and they really just want
to see a bunch of small examples all in one place,
without a lot of explanation cluttering their
presentation.

That may sound like I'm narrowing my audience too
much, but I do think it's a niche group that's not
adequately addressed.

I do hope, though, that folks more in a teaching role
can reuse the examples, add better explanation, etc.,
as needed.

Also, I wouldn't mind at all to add a little link
called "Read more..." after each example.

___________________________________________________________________________ _________Ready for the edge of your seat?
Check out tonight's top picks on Yahoo! TV.
http://tv.yahoo.com/


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Wildemar Wildenburger  
View profile  
 More options May 28 2007, 1:45 am
Newsgroups: comp.lang.python
From: Wildemar Wildenburger <wilde...@freakmail.de>
Date: Sun, 27 May 2007 17:45:52 +0200
Local: Mon, May 28 2007 1:45 am
Subject: Re: ten small Python programs
Steve Howell wrote:
>     # def defines a method in Python
>     def say_hello(name):
>         print 'hello', name
>     say_hello('Jack')
>     say_hello('Jill')

Doesn't def define methods *xor* functions, depending on the context?
And in this example, say_hello (*yuck*, underscores ...) is certainly a
function. Or is it that functions are considered "module-methods"?

W


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 28 2007, 2:48 am
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sun, 27 May 2007 09:48:43 -0700 (PDT)
Local: Mon, May 28 2007 2:48 am
Subject: Re: ten small Python programs

--- Wildemar Wildenburger <wilde...@freakmail.de>
wrote:

> Steve Howell wrote:
> >     # def defines a method in Python
> >     def say_hello(name):
> >         print 'hello', name
> >     say_hello('Jack')
> >     say_hello('Jill')

> Doesn't def define methods *xor* functions,
> depending on the context?
> And in this example, say_hello (*yuck*, underscores
> ...) is certainly a
> function. Or is it that functions are considered
> "module-methods"?

Goodness, I didn't expect such a simple example to be
so controversial.  But please see the new version
here:

http://wiki.python.org/moin/SimplePrograms

I changed the method name to "greet" and removed the
comment, as hopefully the intent of the program will
be pretty obvious to anyone that reads it.

___________________________________________________________________________ _________Luggage? GPS? Comic books?
Check out fitting gifts for grads at Yahoo! Search
http://search.yahoo.com/search?fr=oni_on_mail&p=graduation+gifts&cs=bz


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steven Bethard  
View profile  
 More options May 28 2007, 3:08 am
Newsgroups: comp.lang.python
From: Steven Bethard <steven.beth...@gmail.com>
Date: Sun, 27 May 2007 11:08:43 -0600
Local: Mon, May 28 2007 3:08 am
Subject: Re: ten small Python programs

Steve Howell wrote:
> --- Steven Bethard <steven.beth...@gmail.com> wrote:
>> Very cool! Do you mind putting this up on the Wiki
>> somewhere so that we
>> can link to it more easily? Maybe something like:

>>      http://wiki.python.org/moin/SimplePrograms

> Done.

I think I would rewrite the current unit-testing example to use the
standard library unittest module::

     # Let's write reusable code, and unit test it.
     def add_money(amounts):
         # do arithmetic in pennies so as not to accumulate float errors
         pennies = sum([round(int(amount * 100)) for amount in amounts])
         return float(pennies / 100.0)
     import unittest
     class TestAddMoney(unittest.TestCase):
         def test_float_errors(self):
             self.failUnlessEqual(add_money([0.13, 0.02]), 0.15)
             self.failUnlessEqual(add_money([100.01, 99.99]), 200)
             self.failUnlessEqual(add_money([0, -13.00, 13.00]), 0)
     if __name__ == '__main__':
         unittest.main()

I believe I've still kept it to 13 lines.

STeVe

P.S. The "right" way to add money is using the decimal module, but I
couldn't think of a better example.


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 28 2007, 4:08 am
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sun, 27 May 2007 11:08:38 -0700 (PDT)
Local: Mon, May 28 2007 4:08 am
Subject: Re: ten small Python programs

--- Steven Bethard <steven.beth...@gmail.com> wrote:

I approve this change, although in a sense, it's
harder for a Python newbie, because it introduces
inheritance a little earlier than I would have liked.

FWIW I'm in the minority (I think) of people that
prefer roll-your-own testing, but I don't want to
argue that, because I think it mostly comes down to
personal preference.

I'll only defend my position by posting this link,
which suggests that roll-your-own even has validity in
an educational setting:

http://www.elkner.net/jeff/testFirst/index.html

> P.S. The "right" way to add money is using the
> decimal module, but I
> couldn't think of a better example.

Agreed.  Maybe somebody else will come up with
something more creative, but I'm happy enough with our
current version.

___________________________________________________________________________ _________Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more.
http://mobile.yahoo.com/go?refer=1GNXIC


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Howell  
View profile  
 More options May 28 2007, 4:10 am
Newsgroups: comp.lang.python
From: Steve Howell <showel...@yahoo.com>
Date: Sun, 27 May 2007 11:10:52 -0700 (PDT)
Local: Mon, May 28 2007 4:10 am
Subject: Re: ten small Python programs

--- Steven Bethard <steven.beth...@gmail.com> wrote:

Just a minor quibble, but wouldn't you want the import
and test class to only get executed in the ___main__
context?

___________________________________________________________________________ _________Got a little couch potato?
Check out fun summer activities for kids.
http://search.yahoo.com/search?fr=oni_on_mail&p=summer+activities+for...


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steven Bethard  
View profile  
 More options May 28 2007, 4:39 am
Newsgroups: comp.lang.python
From: Steven Bethard <steven.beth...@gmail.com>
Date: Sun, 27 May 2007 12:39:27 -0600
Local: Mon, May 28 2007 4:39 am
Subject: Re: ten small Python programs

That would be fine too. In the real world, I'd put the tests in a
different module.

STeVe


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steven Bethard  
View profile  
 More options May 28 2007, 4:59 am
Newsgroups: comp.lang.python
From: Steven Bethard <steven.beth...@gmail.com>
Date: Sun, 27 May 2007 12:59:01 -0600
Local: Mon, May 28 2007 4:59 am
Subject: Re: ten small Python programs

Have you tried py.test?

     http://codespeak.net/py/dist/test.html

I've heard good things about it, but haven't gotten around to trying it
yet. Here's a two-line test suite from the page above:

     def test_answer():
         assert 42 == 43

STeVe


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Messages 1 - 25 of 44   Newer >
« Back to Discussions « Newer topic     Older topic »

Google Groups - Google Home - Terms of Service - Privacy Policy
©2009 Google