diff --git a/README.md b/README.md
index eeb64678a7..bb169dec27 100644
--- a/README.md
+++ b/README.md
@@ -54,3 +54,19 @@ There's a separate test file `test_stretch.py` for the stretch problem that you
| _Student can demonstrate applied knowledge of Object-Oriented Programming by completing `oop1.py` and `oop2.py`_ | OOP: (2 points per file, 4 max) | 0 points | 2 points | 4 points | |
| _Student can demonstrate applied research and language learning by completing `cityreader.py`_ | CSV: 6 points for `cityreader()`, 1 point for `cityreader_stretch()` | 0 points | 6 points | 7 points | |
| **FINAL SCORE** | | **0-13** | **14-18** | **19** | |
+
+
+
+
+
+
+
+
+---
+
+
+
+> # Questions for Anthony during my 1-on-1:
+> 1. Should I have used "quote_numeric" (https://docs.python.org/3/library/csv.html) instead of declaring variables to be floats in `cityreader.py` (line 33)?
+> 2. Should I be concerned about these "problems" in my `test_comp.py` file?
+
\ No newline at end of file
diff --git a/problems.png b/problems.png
new file mode 100644
index 0000000000..fc7658b25e
Binary files /dev/null and b/problems.png differ
diff --git a/src/cityreader/cityreader.py b/src/cityreader/cityreader.py
index 2bd8007ce7..12585e8c27 100644
--- a/src/cityreader/cityreader.py
+++ b/src/cityreader/cityreader.py
@@ -1,6 +1,11 @@
+import csv
# Create a class to hold a city location. Call the class "City". It should have
# fields for name, lat and lon (representing latitude and longitude).
-
+class City():
+ def __init__(self, name, lat, lon):
+ self.name = name
+ self.lat = lat
+ self.lon = lon
# We have a collection of US cities with population over 750,000 stored in the
# file "cities.csv". (CSV stands for "comma-separated values".)
@@ -21,8 +26,12 @@ def cityreader(cities=[]):
# Ensure that the lat and lon valuse are all floats
# For each city record, create a new City instance and add it to the
# `cities` list
-
- return cities
+ with open("./src/cityreader/cities.csv", newline="") as csvfile:
+ next(csvfile)
+ for line in csvfile:
+ city_info = line.split(",")
+ cities.append(City(city_info[0], float(city_info[3]), float(city_info[4])))
+ return cities
cityreader(cities)
diff --git a/src/comp/comp.py b/src/comp/comp.py
index 82f8821d63..7cb25d2533 100644
--- a/src/comp/comp.py
+++ b/src/comp/comp.py
@@ -1,3 +1,4 @@
+import math
# The following list comprehension exercises will make use of the
# defined Human class.
class Human:
@@ -24,48 +25,49 @@ def __repr__(self):
# Write a list comprehension that creates a list of names of everyone
# whose name starts with 'D':
print("Starts with D:")
-a = []
+a = [human.name for human in humans if human.name.startswith("D")]
print(a)
# Write a list comprehension that creates a list of names of everyone
# whose name ends in "e".
print("Ends with e:")
-b = []
+b = [human.name for human in humans if human.name.endswith("e")]
print(b)
# Write a list comprehension that creates a list of names of everyone
# whose name starts with any letter between 'C' and 'G' inclusive.
print("Starts between C and G, inclusive:")
-c = []
+letters = ("C", "D", "E", "F", "G")
+c = [human.name for human in humans if human.name.startswith(letters)]
print(c)
# Write a list comprehension that creates a list of all the ages plus 10.
print("Ages plus 10:")
-d = []
+d = [(human.age + 10) for human in humans ]
print(d)
# Write a list comprehension that creates a list of strings which are the name
# joined to the age with a hyphen, for example "David-31", for all humans.
print("Name hyphen age:")
-e = []
+e = [(f"{human.name}-{human.age}") for human in humans]
print(e)
# Write a list comprehension that creates a list of tuples containing name and
# age, for example ("David", 31), for everyone between the ages of 27 and 32,
# inclusive.
print("Names and ages between 27 and 32:")
-f = []
+f = [(human.name, human.age) for human in humans if (human.age >= 27 and human.age <= 32)]
print(f)
# Write a list comprehension that creates a list of new Humans like the old
# list, except with all the names uppercase and the ages with 5 added to them.
# The "humans" list should be unmodified.
print("All names uppercase:")
-g = []
+g = [Human(human.name.upper(), human.age + 5) for human in humans]
print(g)
# Write a list comprehension that contains the square root of all the ages.
print("Square root of ages:")
import math
-h = []
+h = [(math.sqrt(human.age)) for human in humans]
print(h)
diff --git a/src/oop/oop1.py b/src/oop/oop1.py
index b7268c5263..5636fdc3c0 100644
--- a/src/oop/oop1.py
+++ b/src/oop/oop1.py
@@ -17,3 +17,30 @@
# pass
#
# Put a comment noting which class is the base class
+
+class Vehicle(object): # This is the base class
+ pass
+
+
+class FlightVehicle(Vehicle): # FlightVehicle is a type of Vehicle
+ pass
+
+
+class Starship(FlightVehicle): # Satarship is a type of FlightVehicle
+ pass
+
+
+class Airplane(FlightVehicle): # Airplane is a type of FlightVehicle
+ pass
+
+
+class GroundVehicle(Vehicle): # GroundVehicle is a type of Vehicle
+ pass
+
+
+class Car(GroundVehicle): # Car is a type of GroundVehicle
+ pass
+
+
+class Motorcycle(GroundVehicle): # Motorcylce is a type of GroundVehicle
+ pass
diff --git a/src/oop/oop2.py b/src/oop/oop2.py
index 29d3e481fe..5109d71ad3 100644
--- a/src/oop/oop2.py
+++ b/src/oop/oop2.py
@@ -4,10 +4,12 @@
# object is constructed.
class GroundVehicle():
- def __init__(self, num_wheels):
+ def __init__(self, num_wheels=4):
self.num_wheels = num_wheels
# TODO
+ def drive(self):
+ return "vroooom"
# Subclass Motorcycle from GroundVehicle.
@@ -18,6 +20,12 @@ def __init__(self, num_wheels):
# Override the drive() method in Motorcycle so that it returns "BRAAAP!!"
# TODO
+class Motorcycle(GroundVehicle):
+ def __init__(self, num_wheels=2):
+ self.num_wheels = num_wheels
+
+ def drive(self):
+ return "BRAAAP!!"
vehicles = [
GroundVehicle(),
@@ -30,3 +38,5 @@ def __init__(self, num_wheels):
# Go through the vehicles list and print the result of calling drive() on each.
# TODO
+for vehicle in vehicles:
+ print(vehicle.drive())
\ No newline at end of file