4 ms·
It's an example for beginners, presumingly to illustrate the range function, so that's probably why it's done that way. To continue to be nit picky with that e
by The-Toon 6y ago
It's an example for beginners, presumingly to illustrate the range function, so that's probably why it's done that way.
To continue to be nit picky with that example, the range function produces an iterable object, which is different from a list.
- travisjungroth 6y agoThis seems to be non-standard, but I make a serious effort to never teach the wrong way to do something. Primacy is just so strong. It makes teaching harder. You really have to work to come up with great examples. But it makes learning easier and there's less correcting to do later.
- cgriswald 6y agoIn general, I agree, and I think it’s especially important in text. A teacher is in a position of authoritative trust. As a student, after I learn an example is flawed, I often wonder if I’m just missing some context because I trust the teacher to have gotten it right. In a setting where communication is already established (e.g., a class room) this can be cleared up quickly with a question. In other settings (e.g., reading a text), it can leave me wondering until I reach a much higher level of competence.
- alexmojaki 6y agoWhen the course reaches the point that students are ready to learn about enumerate (see my reply above) the course will definitely cover it and emphatically point out that it is the better way.
- travisjungroth 6y agoTake it for what it's worth, but that's exactly what I think is a bad idea. It violates the principle of primacy in learning[1]. It also erodes trust in the lessons. (Is this the real way to do it?) There's a similar strategy of building things up and then refactoring when they get bad (this ifelse is getting too big. We could use a dict). But the difference is every step along the way is valid or immediately corrected. [1] https://psychology.wikia.org/wiki/Principles_of_learning#Primacy https://psychology.wikia.org/wiki/Principles_of_learning#Pri...
- alexmojaki 6y agoWhat would you do in this case? The student has never seen a tuple, or iterable unpacking of any form. Would you just show them `for index, word in enumerate(words)` and tell them not to worry about what that means? Quite shortly after this, I ask them to essentially do `zip_longest`. Given two string variables: string1 = "Goodbye" string2 = "World" output: G W o o o r d l b d y e Here's what I expect their solution to look like: length1 = len(string1) length2 = len(string2) if length1 > length2: # one could use max, but I don't expect them to length = length1 else: length = length2 for i in range(length): if i < len(string1): char1 = string1[i] else: char1 = ' ' if i < len(string2): char2 = string2[i] else: char2 = ' ' print(char1 + ' ' + char2) That's not something that can nicely be solved with enumerate. Do you think this exercise is bad because they should just use zip_longest instead?
- travisjungroth 6y agoI'd split the problem into two. You're talking about these problems like they're fixed, but they're not. This is your project. I'd teach index access and number generation separately, with small incrementing variations. Then I'd show iteration, then enumeration (maybe after tuple unpacking). When you combine two concepts it doesn't create just a combination. It creates one or more new concepts. Those new concepts have their own idioms and they should be taught properly. Combining looping over numbers and index access creates two new concepts: looping over items and looping over items with their index. Both of those things have their own idiom in Python and your solution shows neither. I think telling someone not to worry about the details of how something works because you'll get back to it later is way better than showing them the wrong thing and then correcting it. One is a promise kept, the other a promise broken. In my opinion, nailing this kind of stuff is like half of the value of the project you're doing. You need to lean way in on it and get it right. My take is right now you're thinking backwards from the position of someone who knows how to code. You need to think forward like someone who doesn't, at least more often. A student isn't going to be motivated to learn a, b = c by learning return a, b first because they won't know that second concept exists! In short, if your students aren't ready to use enumerate or zip_longest, don't hand them problems that call for enumerate or zip_longest.
- alexmojaki 6y agoWhich is why it specifically says "is similar to the list". But you may be surprised how many list-like operations `range` supports. Subscripting, `len`, `in`, `.count`, `.index`. It might as well be a tuple. And if you want to nitpick more, range isn't a function.