Skip to content

finished with stretch #808

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 75 additions & 14 deletions src/cityreader/cityreader.py
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -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
Expand All @@ -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)
16 changes: 8 additions & 8 deletions src/comp/comp.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
18 changes: 18 additions & 0 deletions src/oop/oop1.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
13 changes: 12 additions & 1 deletion src/oop/oop2.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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(),
Expand All @@ -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())