\[ [Index](index.md) | [Exercise 2.6](ex2_6.md) | [Exercise 3.2](ex3_2.md) \] # Exercise 3.1 *Objectives:* - Define a simple class *Files Modified:* `stock.py` In [Exercise 1.5](ex1_5.md), you defined a simple class `Stock` for representing a holding of stock. In this exercise, we're simply going to add a few features to that class as well as write some utility functions. ## (a) Adding a new method Add a new method `sell(nshares)` to Stock that sells a certain number of shares by decrementing the share count. Have it work like this: ```python >>> s = Stock('GOOG',100,490.10) >>> s.shares 100 >>> s.sell(25) >>> s.shares 75 >>> ``` ## (b) Reading a portfolio Add a function `read_portfolio()` to your `stock.py` program that reads a file of portfolio data into a list of `Stock` objects. Here's how it should work: ```python >>> portfolio = read_portfolio('Data/portfolio.csv') >>> for s in portfolio: print(s) <__main__.Stock object at 0x3902f0> <__main__.Stock object at 0x390270> <__main__.Stock object at 0x390330> <__main__.Stock object at 0x390370> <__main__.Stock object at 0x3903b0> <__main__.Stock object at 0x3903f0> <__main__.Stock object at 0x390430> >>> ``` You already wrote a similar function as part of [Exercise 2.3](ex2_3.md). Design discussion: Should `read_portfolio()` be a separate function or part of the class definition? ## (c) Printing a Table Take the data read in part (b) and use it to make a nicely formatted table. For example: ```python >>> portfolio = read_portfolio('Data/portfolio.csv') >>> for s in portfolio: print('%10s %10d %10.2f' % (s.name, s.shares, s.price)) AA 100 32.20 IBM 50 91.10 CAT 150 83.44 MSFT 200 51.23 GE 95 40.37 MSFT 50 65.10 IBM 100 70.44 >>> ``` Take this code and put it in a function `print_portfolio()` that produces the same output, but additionally adds some table headers. For example: ```python >>> portfolio = read_portfolio('Data/portfolio.csv') >>> print_portfolio(portfolio) name shares price ---------- ---------- ---------- AA 100 32.20 IBM 50 91.10 CAT 150 83.44 MSFT 200 51.23 GE 95 40.37 MSFT 50 65.10 IBM 100 70.44 >>> ``` \[ [Solution](soln3_1.md) | [Index](index.md) | [Exercise 2.6](ex2_6.md) | [Exercise 3.2](ex3_2.md) \] ---- `>>>` Advanced Python Mastery `...` A course by [dabeaz](https://www.dabeaz.com) `...` Copyright 2007-2023 ![](https://i.creativecommons.org/l/by-sa/4.0/88x31.png). This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/)