[Tutor] Tutor Digest, Vol 143, Issue 17
Tahir Hafiz
tahir.hafiz at gmail.com
Wed Jan 6 16:15:26 EST 2016
On Wed, Jan 6, 2016 at 9:07 PM, yehudak . <katye2007 at gmail.com> wrote:
> 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
> > **************************************
> >
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
That is okay, everyone is very friendly here. No worries.
More information about the Tutor
mailing list