MCS 260 Fall 2021
Emily Dumas
All of this is Python-specific. Some other languages use the term interface for a similar concept, though the details differ quite a bit.
In Python, a sequence is an ordered container supporting access to its items by 0-based index.
Things you can do with a sequence seq:
len(seq)seq[3]seq[3] = val (only available if mutable)for item in seq:If you create a class with the following methods, it can be used as a sequence:
__len__()len(obj)__getitem__(idx) obj[idx]These methods form the sequence protocol.
To make a sequence mutable, add one more method:
__setitem__(idx,val)obj[idx]=val is executed| code | becomes |
|---|---|
obj[1] | obj.__getitem__(1) |
obj[1]=60 | obj.__setitem__(1,60) |
len(obj) | obj.__len__() |
for x in obj: | for i in range(len(obj)): |
A geometric sequence (or geometric progression) is a sequence of numbers where the ratio between neighboring terms is constant.
Infinite example: $1,2,4,8,16,32,64,\ldots$
Finite example: $5,15,45,135,405$
Non-example: $6,8,10,12,14$
Let's make a class FGS to represent a finite geometric sequence.
We'll keep track of start, ratio, and length.
Indexing will be used to request an item from the sequence, which will be computed when needed but not stored.
Let's support item assignment with __setitem__.
Adopt these conventions:
startstart the same but adjusts ratioStill more can be found in the collections.abc module, which contains classes you can subclass when implementing the protocols.