diff --git a/src/cityreader/cityreader.py b/src/cityreader/cityreader.py index 2bd8007ce7..20453ad700 100644 --- a/src/cityreader/cityreader.py +++ b/src/cityreader/cityreader.py @@ -1,11 +1,23 @@ # 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). +import csv + + +class City: + def __init__(self, name, lat, lon): + self.name = name + self.lat = lat + self.lon = lon + + def __repr__(self): + return f"Name: {self.name}, Lat: {self.lat} Lon: {self.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,27 +28,38 @@ # should not be loaded into a City object. cities = [] + def cityreader(cities=[]): - # TODO Implement the functionality to read from the 'cities.csv' file - # 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 - + # TODO Implement the functionality to read from the 'cities.csv' file + # 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 + + # ./src/cityreader/cities.csv + + with open('./src/cityreader/cities.csv', 'r') as csvFile: + reader = csv.DictReader(csvFile) + for row in reader: + cities.append(City(row['city'], float( + row['lat']), float(row['lng']))) + return cities + cityreader(cities) # Print the list of cities (name, lat, lon), 1 record per line. + for c in cities: print(c) # 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 @@ -61,11 +84,49 @@ def cityreader(cities=[]): # TODO Get latitude and longitude values from the user +lat1 = input('Enter lat1: ') +lon1 = input('Enter lon1: ') + +lat2 = input('Enter lat2: ') +lon2 = input('Enter lon2: ') + + def cityreader_stretch(lat1, lon1, lat2, lon2, cities=[]): - # within will hold the cities that fall within the specified region - within = [] - - # Go through each city and check to see if it falls within - # the specified coordinates. + lat1 = float(lat1) + lon1 = float(lon1) + lat2 = float(lat2) + lon2 = float(lon2) + + latVal1 = float(0) + latVal2 = float(0) + lonVal1 = float(0) + lonVal2 = float(0) + + if lat1 > lat2: + latVal2 = lat1 + latVal1 = lat2 + else: + latVal1 = lat1 + latVal2 = lat2 + + if lon1 > lon2: + lonVal2 = lon1 + lonVal1 = lon2 + else: + lonVal1 = lon1 + lonVal2 = lon2 + + # within will hold the cities that fall within the specified region + # within = [] + + # Go through each city and check to see if it falls within + # the specified coordinates. + + within = [city for city in cities if latVal1 <= + city.lat <= latVal2 and lonVal1 <= city.lon <= lonVal2] + + return within + - return within +for city in cityreader_stretch(lat1, lon1, lat2, lon2, cities): + print(city) diff --git a/src/comp/comp.py b/src/comp/comp.py index 82f8821d63..4751eed62d 100644 --- a/src/comp/comp.py +++ b/src/comp/comp.py @@ -24,48 +24,48 @@ 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 = [a.name for a in humans if a.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 = [b.name for b in humans if b.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 = [c.name for c in humans if c.name.startswith(('C','D', 'E', 'F', 'G'))] print(c) # Write a list comprehension that creates a list of all the ages plus 10. print("Ages plus 10:") -d = [] +d = [d.age+10 for d 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"{e.name}-{e.age}" for e 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 = [(f.name, f.age) for f in humans if 27 <= f.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(g.name.upper(), g.age+5) for g 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(h.age) for h in humans] print(h) diff --git a/src/oop/oop1.py b/src/oop/oop1.py index b7268c5263..5505aecaeb 100644 --- a/src/oop/oop1.py +++ b/src/oop/oop1.py @@ -17,3 +17,21 @@ # pass # # Put a comment noting which class is the base class + +class Vehicle: # Base class + pass + +class FlightVehicle(Vehicle): #base class for Flightvehicle which is sub-class of vehicle + pass +class GroundVehicle(Vehicle): # base class for ground vehicle sub class of vehicle + pass + +class Starship(FlightVehicle): + pass +class Airplane(FlightVehicle): + pass + +class Car(GroundVehicle): + pass +class Motorcycle(GroundVehicle): + pass \ No newline at end of file diff --git a/src/oop/oop2.py b/src/oop/oop2.py index 29d3e481fe..ce3d322647 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. @@ -19,6 +21,12 @@ def __init__(self, num_wheels): # TODO +class Motorcycle(GroundVehicle): + def __init__(self, num_wheels=2): + super().__init__(num_wheels) + def drive(self): + return 'BRAAAP!!' + vehicles = [ GroundVehicle(), GroundVehicle(), @@ -30,3 +38,6 @@ def __init__(self, num_wheels): # Go through the vehicles list and print the result of calling drive() on each. # TODO + +for v in vehicles: + print(v.drive())