Chris Angelico <ros...@gmail.com> writes: > On Tue, Aug 10, 2021 at 7:25 AM Hope Rouselle <hrouselle@jevedi.xotimo> wrote: >> I came up with the following question. Using strings of length 5 >> (always), write a procedure histogram(s) that consumes a string and >> produces a dictionary whose keys are each substrings (of the string) of >> length 1 and their corresponding values are the number of times each >> such substrings appear. For example, histogram("aaaaa") = {"a": 5}. >> Students can "loop through" the string by writing out s[0], s[1], s[2], >> s[3], s[4]. > > In other words, recreate collections.Counter? Seems decent, but you'll > need to decide whether you want them to use defaultdict, use > __missing__, or do it all manually.
Yes, the course introduces very little so there is a lot of recreation going on. Hm, I don't know defaultdict and I don't know how to use __missing__. The course does introduce dict.get(), though. If students use dict.get(), then the procedure could essentially be: def histogram(s): d = {} d[s[0]] = d.get(s[0], 0) + 1 d[s[1]] = d.get(s[1], 0) + 1 d[s[2]] = d.get(s[2], 0) + 1 d[s[3]] = d.get(s[3], 0) + 1 d[s[4]] = d.get(s[4], 0) + 1 return d >> I think you get the idea. I hope you can provide me with creativity. I >> have been looking at books, but every one I look at they introduce loops >> very quickly and off they go. Thank you! > > Probably because loops are kinda important? :) Totally important. But each course author thinks they know better. Sometimes a college professor can do very little to help her students. I am actually fond of functional programming as a first course using a language with as little syntax as possible. Python is very nice but it's not a small language. It's easy to see courses spending an entire semester on introducing syntax and this one is no different. I think it's more interesting to see all the syntax in a few minutes and spend the semester on strategies. -- https://mail.python.org/mailman/listinfo/python-list