[Tutor] Tutor Digest, Vol 143, Issue 17

yehudak . katye2007 at gmail.com
Wed Jan 6 16:07:52 EST 2016


Alan, Tahir & friends,
My post was not a question, merely an observation.
I hope there's no objection to my mail.

Yehuda

On Wed, Jan 6, 2016 at 10:59 PM, <tutor-request at python.org> wrote:

> Send Tutor mailing list submissions to
>         tutor at python.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         https://mail.python.org/mailman/listinfo/tutor
> or, via email, send a message with subject or body 'help' to
>         tutor-request at python.org
>
> You can reach the person managing the list at
>         tutor-owner at python.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Tutor digest..."
>
>
> Today's Topics:
>
>    1. Teaching Python (yehudak .)
>    2. Re: method, type? (Alan Gauld)
>    3. Re: Teaching Python (Alan Gauld)
>    4. Re: Teaching Python (Peter Otten)
>    5. Re: Teaching Python (Danny Yoo)
>    6. Re: Teaching Python (Tahir Hafiz)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Wed, 6 Jan 2016 20:23:59 +0200
> From: "yehudak ." <katye2007 at gmail.com>
> To: Tutor at python.org
> Subject: [Tutor] Teaching Python
> Message-ID:
>         <
> CAE3ie43GPx6uD5H8CQFsj-L1TfRwwHLCAs0jbaq02wV-c+V1Lw at mail.gmail.com>
> Content-Type: text/plain; charset=UTF-8
>
> My grandson Guy (8th grader) is learning Python at school. That's what made
> me teach myself Python programming as well.
> Yesterday he asked my help in his homework:
>
> Write a FOR-loop that prints all numbers up to 1000000
>
> Thank you, the gods of Ctrl+C
>
> Yehuda
>
>
> ------------------------------
>
> Message: 2
> Date: Wed, 6 Jan 2016 18:57:31 +0000
> From: Alan Gauld <alan.gauld at btinternet.com>
> To: tutor at python.org
> Subject: Re: [Tutor] method, type?
> Message-ID: <n6jo2r$9op$1 at ger.gmane.org>
> Content-Type: text/plain; charset=utf-8
>
> Second attempt, my PC crashed just as I was sending the first
> one. You might see two similar posts, if so apologies...
>
> On 06/01/16 14:46, Steven D'Aprano wrote:
> > I don't understand what you mean by "Python doesn't support named
> > constructors". It seems to me that this is the *only* sort of
> > constructor that Python supports.
>
> No, Python constructors have names(new/init) but they are not
> used explicitly (ie. by the client code)to create objects. By
> contrast languages like Delphi, Smalltalk, Objective C,
> some Lisps and, I think, Eiffel (and others?) all require an
> explicit call of a constructor method and there may be
> multiple constructors per class each with different names
> (usually describing how the construction occurs or the
> nature of the object constructed).
>
> For example in Smalltalk:
>
> obj := MyClass new.  # new is the normal choice of name
> obj2 := Date today.
> obj3 := Date new.
> obj4 := Time now.
>
> All of these methods (new, today, now) are constructors(*) but
> with explicit names that tells you something about the kind
> of instance created.
>
> (*)As I understand it, Smalltalk constructors are just class
> methods allocated to a constructor category. But the category
> is just an organisational device used by the IDE/library
> it doesn't actually change the code in any way.
>
> > As I understand it, "named constructor" comes from the C++ world, where
> > functions are matched not just by name, but by parameters as well.
>
> That's overloading which uses the same name but with different
> numbers/types of parameters and/or return type. The problem with
> that is that in C++ constructors must have the name of the class.
> So if you want multiple constructors that all take a single
> string as their paramater then it gets tricky.
>
> > two integers representing the position relative to the entire screen, or
> > two integers representing the position relative to the current window.
> > The C++ compiler cannot distinguish those two cases, and would give an
> > error.
>
> Exactly so.
>
> > The solution is to use constructors with different names, which C++
> > calls "named constructors".
>
> I stopped using C++ around v2 and it didn't have such a feature.
> Maybe its been added since. If so that's good to know. (Time
> for some googling methinks...)
>
> > So the only way to have two different constructors is to give them
> > different names.
> >
> > Hence all constructors in Python are "named constructors".
>
> But they are not native constructors such as those used in
> Smalltalk etc. They have to be factory methods that call new/init
> under the covers. And that's how most OOP languages that don't
> support named constructors get round it. (Although interestingly,
> Objective C refers to all constructors as 'factory methods', even
> the 'default' ones.)
>
> > It would be reasonable to make this a factory function declared in the
> > global module level. But I think making it a classmethod is better.
>
> I won't put up much of an argument here. In C++ or Java I'd
> definitely say use a class method. But it seems to me that I've
> seen more factory functions in modules than class method factories.
> But that's not been a detailed analysis just a gut feel for what
> seems idiomatic in Python. It also seems easier for beginners
> to grasp than the more esoteric notion of class methods.
>
> > ... ensures that if you subclass the class, you automatically
> > get a valid constructor as well.
>
> Wouldn't it return an instance of the superclass rather than
> the sub class? You'd need to override it wouldn't you?
>
>
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
> http://www.amazon.com/author/alan_gauld
> Follow my photo-blog on Flickr at:
> http://www.flickr.com/photos/alangauldphotos
>
>
>
>
> ------------------------------
>
> Message: 3
> Date: Wed, 6 Jan 2016 19:04:24 +0000
> From: Alan Gauld <alan.gauld at btinternet.com>
> To: tutor at python.org
> Subject: Re: [Tutor] Teaching Python
> Message-ID: <n6jofo$g4a$1 at ger.gmane.org>
> Content-Type: text/plain; charset=utf-8
>
> On 06/01/16 18:23, yehudak . wrote:
> > My grandson Guy (8th grader) is learning Python at school. That's what
> made
> > me teach myself Python programming as well.
> > Yesterday he asked my help in his homework:
> >
> > Write a FOR-loop that prints all numbers up to 1000000
>
> And the question is?
> Python has a for loop and a print function.
> It can easily handle numbers up to 1000000.
> You probably need to look at the range() function too.
>
> If you are having difficulty with any of those concepts
> let us know and ideally show us the code that fails.
>
> Alternatively if you are asking about what we think of
> the homework question itself, then I'd say it seems
> reasonable for a beginner. The only thing I'd gripe
> about is the use of uppercase FOR.  That's because
> Python is case sensitive and its for loop is
> lowercase so the FOR could confuse some students.
>
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
> http://www.amazon.com/author/alan_gauld
> Follow my photo-blog on Flickr at:
> http://www.flickr.com/photos/alangauldphotos
>
>
>
>
> ------------------------------
>
> Message: 4
> Date: Wed, 06 Jan 2016 21:40:26 +0100
> From: Peter Otten <__peter__ at web.de>
> To: tutor at python.org
> Subject: Re: [Tutor] Teaching Python
> Message-ID: <n6ju3r$e38$1 at ger.gmane.org>
> Content-Type: text/plain; charset="ISO-8859-1"
>
> yehudak . wrote:
>
> > My grandson Guy (8th grader) is learning Python at school. That's what
> > made me teach myself Python programming as well.
> > Yesterday he asked my help in his homework:
> >
> > Write a FOR-loop that prints all numbers up to 1000000
> >
> > Thank you, the gods of Ctrl+C
>
> Did you mean to imply that it took too long?
>
> It is likely that the terminal (emulation) is to blame, and not the python
> interpreter:
>
> $ time python3 -c 'for i in range(10**6): print(i)' > /dev/null
>
> real    0m1.562s
> user    0m1.525s
> sys     0m0.033s
>
> Under 2 seconds on quite old hardware. Without redirection in Konsole
> (KDE's
> terminal emulator):
>
> $ time python3 -c 'for i in range(10**6): print(i)'
> [...]
> 999997
> 999998
> 999999
>
> real    0m16.167s
> user    0m5.258s
> sys     0m5.512s
>
> But wait -- you ran the code in IDLE, right?
> Then book it under lessons learned ;)
>
>
>
> ------------------------------
>
> Message: 5
> Date: Wed, 6 Jan 2016 12:42:52 -0800
> From: Danny Yoo <dyoo at hashcollision.org>
> To: "yehudak ." <katye2007 at gmail.com>
> Cc: Python Tutor Mailing List <Tutor at python.org>
> Subject: Re: [Tutor] Teaching Python
> Message-ID:
>         <CAGZAPF5yHAqqXsDDXg3OtKtuV=EUqtDo_rhOv=7g45=
> V_h2ZMg at mail.gmail.com>
> Content-Type: text/plain; charset=UTF-8
>
> On Wed, Jan 6, 2016 at 10:23 AM, yehudak . <katye2007 at gmail.com> wrote:
> > My grandson Guy (8th grader) is learning Python at school. That's what
> made
> > me teach myself Python programming as well.
> > Yesterday he asked my help in his homework:
> >
> > Write a FOR-loop that prints all numbers up to 1000000
>
> Try to say explicitly where you think you're getting stuck. There are a few
> general problem-solving strategies that you can try to apply, in the spirit
> of Polya's How To Solve It:
> http://www.amazon.com/How-Solve-It-Mathematical-Princeton/dp/069111966X.
>
> * Do you understand the question being asked? Do you understand all the
> technical "terms" that the question is using? This is actually a really
> important one: if you don't understand the terms, there's very little hope
> to get anything useful out of the experience.
>
> - Do you know what a for loop is? Have you seen any examples of for loops?
> - Do you know what it means to print a number? Have you seen any examples
> of this?
>
> * Do you know what the expected output is supposed to look like?
>
> * Have you tackled problems that are similar to this one before?
>
> * Do you know how to solve a simpler version of the problem? Say, from
> changing "1000000" to "10"?
>
>
> ------------------------------
>
> Message: 6
> Date: Wed, 6 Jan 2016 20:59:34 +0000
> From: Tahir Hafiz <tahir.hafiz at gmail.com>
> To: "yehudak ." <katye2007 at gmail.com>
> Cc: tutor <Tutor at python.org>
> Subject: Re: [Tutor] Teaching Python
> Message-ID:
>         <CALmb6fvk+hd7ShHts2Qf6zOP1RzNwQo4zU6nVs390Z1ze=
> jSeA at mail.gmail.com>
> Content-Type: text/plain; charset=UTF-8
>
> Yes that is a huge for loop.
> I can do it like this but I won't try:
> >>> for num in list(range(1000000)):
> >>>   print(num)
>
> Sort of strange that the school wanted so much looping for your grandson,
> they could have picked a lower number to demonstrate a for loop.
>
> By the way there is the tqdm module which will show the time of a for loop
> in a nice way:
> https://github.com/noamraph/tqdm
>
>
> Cheers,
> Tahir
>
>
>
>
>
>
>
> On Wed, Jan 6, 2016 at 6:23 PM, yehudak . <katye2007 at gmail.com> wrote:
>
> > My grandson Guy (8th grader) is learning Python at school. That's what
> made
> > me teach myself Python programming as well.
> > Yesterday he asked my help in his homework:
> >
> > Write a FOR-loop that prints all numbers up to 1000000
> >
> > Thank you, the gods of Ctrl+C
> >
> > Yehuda
> > _______________________________________________
> > Tutor maillist  -  Tutor at python.org
> > To unsubscribe or change subscription options:
> > https://mail.python.org/mailman/listinfo/tutor
> >
>
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> https://mail.python.org/mailman/listinfo/tutor
>
>
> ------------------------------
>
> End of Tutor Digest, Vol 143, Issue 17
> **************************************
>


More information about the Tutor mailing list