4.5. It was pretty darn easy to work my way through. There were a few things I thought could be clearer. There's a semi-serious error in Chapter 9, in the Abstract Data Types section. The section describes pop and read as operating on the beginning of the array, but the code does the opposite — both methods operate on the end of the array. Specifically, .pop() with no argument removes the last item in Python, and [-1] accesses the last item. Since a stack's "top" is the end of the underlying array, the code is correct and honors the stack contract. The prose explanation just has the direction backwards, saying "beginning" and "first" when it should say "end" and "last."