This is not exactly the typical usage pattern for map().
Obviously it's working, but it's doing so because your defined function strip_lines() has a "side effect" of also adding a stripped line to the final_str list. It's a little unwieldy and "implicit" as to what's happening. map() is also returning a list, and in this case it's a list of [None, None, None, ...] which is memory-inefficient and not apparent from the program structure.
In Python, we prefer things to be "explicit" and readable and easy to understand. What is typically done is that map() takes a function and a list, that function runs on every item in the list, and then map() returns a list of the results. A pythonic bit of pseudocode would look something like this:
```
def strip_lines(line):
    return line_with_the_whitespace_stripped_off

final_str = map(...)
```
It would be great if you could understand the difference between the two approaches to get you writing really nice code that is easy to understand for you or anyone else who would visit it later. Your last several assignments have really been top notch and so I'm challenging you here to really think about program structure.
If this comment got too ramble-y shoot me an email and I'll see if I can explain better.