diff --git a/src/cityreader/__pycache__/cityreader.cpython-37.pyc b/src/cityreader/__pycache__/cityreader.cpython-37.pyc new file mode 100644 index 0000000000..f4717eb8c0 Binary files /dev/null and b/src/cityreader/__pycache__/cityreader.cpython-37.pyc differ diff --git a/src/cityreader/cityreader.py b/src/cityreader/cityreader.py index 7d0566a028..d345e045f4 100644 --- a/src/cityreader/cityreader.py +++ b/src/cityreader/cityreader.py @@ -1,11 +1,19 @@ +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".) # -# In the body of the `cityreader` function, use Python's built-in "csv" module +# In the body of the `cityreader` function, use Python's built-in "csv" module # to read this file so that each record is imported into a City instance. Then # return the list with all the City instances from the function. # Google "python 3 csv" for references and use your Google-fu for other examples. @@ -16,26 +24,30 @@ # should not be loaded into a City object. cities = [] + def cityreader(cities=[]): - # TODO Implement the functionality to read from the 'cities.csv' file - # For each city record, create a new City instance and add it to the - # `cities` list - + with open("cities.csv", newline="") as csvfile: + citylist = csv.reader(csvfile, delimiter=",", quotechar="|") + for row in citylist: + if "city" not in row[0]: + new_city = City(row[0], float(row[3]), float(row[4])) + cities.append(new_city) return cities + cityreader(cities) # Print the list of cities (name, lat, lon), 1 record per line. for c in cities: - print(c) + print(c.name, c.lat, c.lon) # STRETCH GOAL! # # Allow the user to input two points, each specified by latitude and longitude. -# These points form the corners of a lat/lon square. Pass these latitude and +# These points form the corners of a lat/lon square. Pass these latitude and # longitude values as parameters to the `cityreader_stretch` function, along # with the `cities` list that holds all the City instances from the `cityreader` -# function. This function should output all the cities that fall within the +# function. This function should output all the cities that fall within the # coordinate square. # # Be aware that the user could specify either a lower-left/upper-right pair of @@ -60,12 +72,13 @@ def cityreader(cities=[]): # TODO Get latitude and longitude values from the user + def cityreader_stretch(lat1, lon1, lat2, lon2, cities=[]): - # within will hold the cities that fall within the specified region - within = [] + # within will hold the cities that fall within the specified region + within = [] - # TODO Ensure that the lat and lon valuse are all floats - # Go through each city and check to see if it falls within - # the specified coordinates. + # TODO Ensure that the lat and lon valuse are all floats + # Go through each city and check to see if it falls within + # the specified coordinates. - return within + return within diff --git a/src/comp/__pycache__/comp.cpython-37.pyc b/src/comp/__pycache__/comp.cpython-37.pyc new file mode 100644 index 0000000000..b6aee9e346 Binary files /dev/null and b/src/comp/__pycache__/comp.cpython-37.pyc differ diff --git a/src/comp/comp.py b/src/comp/comp.py index 82f8821d63..9e414df056 100644 --- a/src/comp/comp.py +++ b/src/comp/comp.py @@ -1,5 +1,8 @@ -# The following list comprehension exercises will make use of the -# defined Human class. +# The following list comprehension exercises will make use of the +# defined Human class. +import math + + class Human: def __init__(self, name, age): self.name = name @@ -8,6 +11,7 @@ def __init__(self, name, age): def __repr__(self): return f"" + humans = [ Human("Alice", 29), Human("Bob", 32), @@ -24,48 +28,47 @@ 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 = [] +c = [human.name for human in humans if human.name[0] in "CDEFG"] 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 27 <= 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/__pycache__/oop1.cpython-37.pyc b/src/oop/__pycache__/oop1.cpython-37.pyc new file mode 100644 index 0000000000..3ca907cc99 Binary files /dev/null and b/src/oop/__pycache__/oop1.cpython-37.pyc differ diff --git a/src/oop/__pycache__/oop2.cpython-37.pyc b/src/oop/__pycache__/oop2.cpython-37.pyc new file mode 100644 index 0000000000..e2df9d2810 Binary files /dev/null and b/src/oop/__pycache__/oop2.cpython-37.pyc differ diff --git a/src/oop/oop1.py b/src/oop/oop1.py index b7268c5263..74d71242d0 100644 --- a/src/oop/oop1.py +++ b/src/oop/oop1.py @@ -17,3 +17,32 @@ # pass # # Put a comment noting which class is the base class + + +class Vehicle: + # base + pass + + +class FlightVehicle(Vehicle): + pass + + +class Starship(FlightVehicle): + pass + + +class GroundVehicle(Vehicle): + pass + + +class Car(GroundVehicle): + pass + + +class Motorcycle(GroundVehicle): + pass + + +class Airplane(FlightVehicle): + pass diff --git a/src/oop/oop2.py b/src/oop/oop2.py index 29d3e481fe..9689c0df14 100644 --- a/src/oop/oop2.py +++ b/src/oop/oop2.py @@ -3,10 +3,14 @@ # Also change it so the num_wheels defaults to 4 if not specified when the # object is constructed. + class GroundVehicle(): - def __init__(self, num_wheels): + def __init__(self, num_wheels=4): self.num_wheels = num_wheels + def drive(self): + return "vroooom" + # TODO @@ -18,6 +22,13 @@ 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): + super().__init__(num_wheels) + + def drive(self): + return "BRAAAP!!" + vehicles = [ GroundVehicle(), @@ -30,3 +41,6 @@ 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())