diff --git a/README.md b/README.md index eeb64678a7..9ae69f82f2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # Sprint Challenge: Intro to Python +Initial commit + + In this week's Sprint you explored the Python programming language as well as object-oriented design principles. This Sprint Challenge aims to assess your comfort in both of these areas through exercises similar to the ones you worked on at the beginning of this week in Intro to Python. ## Instructions diff --git a/src/cityreader/cityreader.py b/src/cityreader/cityreader.py index 2bd8007ce7..77fe5dfddd 100644 --- a/src/cityreader/cityreader.py +++ b/src/cityreader/cityreader.py @@ -1,6 +1,14 @@ +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 = float(lat) + self.lon = float(lon) + + def __str__(self): + return f'{self.name} {self.lat} {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".) @@ -18,10 +26,14 @@ def cityreader(cities=[]): # TODO Implement the functionality to read from the 'cities.csv' file - # Ensure that the lat and lon valuse are all floats + # Ensure that the lat and lon values are all floats # For each city record, create a new City instance and add it to the # `cities` list - + with open('src/cityreader/cities.csv') as f: + read_obj = csv.reader(f) + next(read_obj) + for row in read_obj: + cities.append(City(row[0], row[3], row[4])) return cities cityreader(cities) @@ -60,12 +72,31 @@ def cityreader(cities=[]): # Salt Lake City: (40.7774,-111.9301) # TODO Get latitude and longitude values from the user +coord1 = input('Enter lat1, lon1\n[Make sure to separate with a comma]: ').strip().split(",") +coord2 = input('Enter lat2, lon2\n[Make sure to separate with a comma]: ').strip().split(',') + +lat1 = float(coord1[0]) +lon1 = float(coord1[1]) +lat2 = float(coord2[0]) +lon2 = float(coord2[1]) def cityreader_stretch(lat1, lon1, lat2, lon2, cities=[]): # within will hold the cities that fall within the specified region within = [] + minlat = min([lat1, lat2]) + maxlat = max([lat1, lat2]) + minlon = min([lon1, lon2]) + maxlon = max([lon1, lon2]) - # Go through each city and check to see if it falls within - # the specified coordinates. + # Go through each city and check to see if it falls within the specified coordinates. + for city in cities: + if city.lat >= minlat and city.lat <= maxlat: + if city.lon >= minlon and city.lon <= maxlon: + within.append(city) return within + +city_area = cityreader_stretch(lat1, lon1, lat2, lon2, cities) + +for city in city_area: + print(city) \ No newline at end of file diff --git a/src/comp/comp.py b/src/comp/comp.py index 82f8821d63..c5b3f04d6c 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 = [human.name for human in humans if human.name[0] == '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[-1] == '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 ['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 = [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(newHumans.name.upper(),newHumans.age + 5) for newHumans 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..5272c6772a 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: # Class for all Vehicle + pass # Base Class + + +class GroundVehicle(Vehicle): # Class for GroundVehicles + pass + + +class Motorcycle(GroundVehicle): + pass + + +class FlightVehicle(Vehicle): # Class for FlightVehicles + pass # Body Class + + +class Starship(FlightVehicle): # Class for Space Vehicles + pass diff --git a/src/oop/oop2.py b/src/oop/oop2.py index 29d3e481fe..d2f6dc4d7b 100644 --- a/src/oop/oop2.py +++ b/src/oop/oop2.py @@ -4,11 +4,13 @@ # object is constructed. class GroundVehicle(): - def __init__(self, num_wheels): + def __init__(self, num_wheels = 4, sound = 'vroooom'): self.num_wheels = num_wheels + self.sound = sound # TODO - + def drive(self): + return f'{self.sound}' # Subclass Motorcycle from GroundVehicle. # @@ -18,6 +20,9 @@ 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, sound = 'BRAAAP!!'): + super().__init__(num_wheels, sound) vehicles = [ GroundVehicle(), @@ -30,3 +35,4 @@ 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()) \ No newline at end of file