To complete the Python assignment implementations of the functions described in problem 1, and the methods described in problem 2.
Each function and method must be explicitly tested, once or more, to demonstrate correct operation.
Problem 1
def map_pairs(f, g, pairs):
# parameters:
# - f is a function
# - g is a function
# - pairs is a list of pairs (2-tuples)
# returns:
# - the list of pairs (f(a),g(b)) for each pair (a,b)
return [(f(a), g(b)) for a,b in pairs]
def reject(test, items):
# parameters:
# - test, a function returning True or False
# - items, a list
# returns:
# - those items in the list, in the same order, that fail the test
return list(filter(lambda num: not test(num), items))
def majority(test, items):
# parameters:
# - test, a function returning True or False
# - items, a list
# returns:
# - True if the majority of values in the list pass the test, False otherwise
return len(list(filter(test, items))) > (len(items) // 2)
def count_if(test, items):
# parameters:
# - test, a function returning True or False
# - items, a list
# returns:
# - the number of items that pass the test
return len(list(filter(test, items)))
def map_values(f, d):
# parameters:
# - f, a function
# - d, a dictionary
# returns:
# - a new dictionary with, for each association k : v in the original dictionary, a new association k : f(v)
Problem 2
# Define a class Appt to represent appointments in an appointment book.
#
# The attributes of an Appt are the following items:
#
# - date, a string in 'YYYYMMDD’' format,
# - start_time, a string in 'HHMM' format (a 24-hour time, with 00 for midnight, 13 for 1pm, etc.),
# - duration, an integer number of minutes, and
# - descrip, a string describing the appointment
#
# You may make the following simplifying assumptions:
#
# Each appointment is assumed to take place entirely within one day; that is, appointments do not span multiple days.
that starts on Sept 17 2021 at noon; simply assume appointments like that are never created in the first place.
#
# Write the following methods for the class Appt:
#
# __init__(date, start_time, duration, descrip), a constructor
# - you need not check in __init__ that values given are reasonable and / or in the correct format(s)
#
# __repr__()
# - construct a string representing the current appointment in some easily readable way
#
# starts_at_same_time(other)
# - returns True if the other appointment starts on the same date and at the same time as the current object, False otherwise
#
# starts_before(other)
# - returns True if the current appointment starts before the other appointment, taking both date and time into account
#
# overlaps(other)
# - returns True if the two appointments overlap, that is if they share at least one minute in common. If two appointments merely "touch" -- that is, one appointment starts on Sept 17 2021 at noon and lasts 60 minutes, and the other starts on Sept 17 2021 at 1 pm, they do not overlap, as far as this method is concerned.
Solution:
Problem 1.
return dict(d.keys(), map(f, d.values()))
Problem 2:
from datetime import datetime, timedelta
def get_datetime(date, time):
year, month, day = int(date[0:4]), int(date[4:6]), int(date[6:8])
hour, minute = int(time[0:2]), int(time[2:4])
return datetime(year, month, day, hour, minute)
class Appt:
def __init__(self, date, start_time, duration, descrip):
self.date = date
self.start_time = start_time
self.duration = int(duration)
self.description = descrip
def __repr__(self):
date_obj = get_datetime(self.date, self.start_time)
date_string = 'Start Time: ' + date_obj.strftime("%A, %d %B %Y %I:%M%p")
duration_string = 'Duration: '
if self.duration // 60 != 0:
duration_string += str(self.duration // 60) + ' hour(s), '
duration_string += str(self.duration % 60) + ' minutes'
description_string = 'Description: ' + self.description
return '\n'.join((date_string, duration_string, description_string))
def starts_at_same_time(self, other):
return self.date == other.date and self.start_time == other.start_time
def starts_before(self, other):
curr_time = get_datetime(self.date, self.start_time)
other_time = get_datetime(other.date, other.start_time)
return curr_time < other_time
def overlaps(self, other):
curr_start = get_datetime(self.date, self.start_time)
other_start = get_datetime(other.date, other.start_time)
curr_end = curr_start + timedelta(minutes=self.duration)
other_end = other_start + timedelta(minutes=other.duration)
if curr_start > other_start and curr_start < other_end:
return True
if other_start > curr_start and other_start < curr_end:
return True
return False
Similar Samples
Explore our comprehensive samples at ProgrammingHomeworkHelp.com, showcasing expertly crafted solutions across a wide array of programming disciplines. From intricate algorithms in Python to optimized assembly language implementations, our samples exemplify proficiency and clarity, providing invaluable insights for students tackling their programming assignments.
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python
Python