class Donor(): name = String() donations = List() def __init__(self, name, donations=[]): self.name = name self.donations = [] for donation in donations: self.donations.append(donation) def new_donation(self, amount): self.donations.append(amount) def write_note(self, current_donation=0): note = [ "Dear {},\n".format(self.name), '\nThank you for your generous donations \ totaling ${:,}.'.format(self.total_donated), "\nThe money will be put to good use." "\n\nSincerely, \n -The Team" ] if current_donation > 0: curr = ("This donation of ${:,} " "really helps.".format(current_donation)) note.insert(2, curr) return "".join(note) @property def total_donated(self): return sum(self.donations) @property def number_of_donations(self): return len(self.donations) @property def average_donation(self): return sum(self.donations) / len(self.donations) def __str__(self): return "{:17} ${:14,.2f}{:13} ${:13,.2f}".format\ (self.name, self.total_donated, self.number_of_donations, self.average_donation) def __repr__(self): return "Donor(\'{}\', {})".format(self.name, self.donations) def __lt__(self, other): return self.total_donated < other.total_donated def __gt__(self, other): return self.total_donated > other.total_donated def __eq__(self, other): return self.total_donated == other.total_donated def __ne__(self, other): return self.total_donated != other.total_donated
class Donor(): name = String() donations = List() def __init__(self, name, donations=[]): self.name = name self.donations = [] for donation in donations: self.donations.append(donation) def new_donation(self, amount): self.donations.append(amount) def write_note(self, curr_donation=0): note = [ "Dear {},\n".format(self.name), "\nThank you for your generosity to our cause.\n", "You have now given a total of ${:,}.".format(self.tot_given), "\nWe greatly appreciate your contributions!" "\n\nThank you!\nAlex Laws" ] if curr_donation > 0: curr = ("Your recent gift of ${:,} " "is very helpful. ".format(curr_donation)) note.insert(2, curr) return "".join(note) @property def tot_given(self): return sum(self.donations) @property def num_donations(self): return len(self.donations) @property def avg_donation(self): return sum(self.donations) / len(self.donations) def __str__(self): return "{:17} ${:14,.2f} {:13} ${:13,.2f}".format( self.name, self.tot_given, self.num_donations, self.avg_donation) def __repr__(self): return "Donor(\'{}\', {})".format(self.name, self.donations) def __lt__(self, other): return self.tot_given < other.tot_given def __gt__(self, other): return self.tot_given > other.tot_given def __eq__(self, other): return self.tot_given == other.tot_given def __ne__(self, other): return self.tot_given != other.tot_given
class Donor: _name = String() _donations = List() _total_donations = Float() """ An individual donor, consisting of a name, a list of donations and a set of properties for commonly used attributes including total donations, average donations, and number of donations """ def __init__(self, name, donations=None): self._name = name if donations is None: self._donations = [] else: self._donations = donations self._total_donations = 0 for donation in self._donations: self._total_donations += donation @property def total_donations(self): return self._total_donations @property def name(self): return self._name @property def avg_donation(self): return self._total_donations / self.num_donations @property def num_donations(self): return len(self._donations) def add_donation(self, donation): """ Add a new donation entry for this donor :param donation: the new donation amount """ self._donations.append(donation) self._total_donations += donation def create_thank_you(self, donation): """ Prints a thank for you the given donor and amount :param donation: dictionary containing name of the donor to thank and the amount donated :returns: formatted thank you string """ return f"Dear {self.name},\nThank you for your very generous donation of ${donation:.2f}. It \nwill go very far in supporting the Human Fund, \"Money for \nPeople.\"\n{'Sincerely':>40}\n{'Art Vandelay':>50}" def __lt__(self, other): return self.total_donations < other.total_donations def __eq__(self, other): return self.name == other.name and self._donations == other._donations
class Donor: _name = String() _donations = List() _total_donations = Float() def __init__(self, name, donations=None): if ' ' in name: self._first, self._last = name.split(' ') else: self._first = '' self._last = name self._name = name if donations: self._donations = donations else: self._donations = [] @property def name(self): return self._name @property def first_name(self): return self._first @property def last_name(self): return self._last @property def donations(self): return self._donations @property def full_name(self): return f"{self._first} {self._last}" def __str__(self): return f"{self._first} {self._last} {self._donations}" def __repr__(self): return f'Donor(\'{str(self._name)}\', {self._donations})' def add_donations(self, amount): return self._donations.append(amount) @property def total_donations(self): return sum(self._donations) @property def len_donations(self): return len(self._donations) @property def avg_donations(self): try: return self.total_donations / self.len_donations except ValueError: return self._donations def letter(self, amount): txt = """\n To: {0:s} Subject: Your donation of ${1:,.2f} Dear {0:s},\n Thank you for your donation of ${1:,.2f}.\n """ print(txt.format(self._name, amount))
class Donor: _name = String() _donations = List() """ Defines a single donor with their individual donation information """ def __init__(self, name, donations=None): self._name = name if donations is None: self._donations = [] else: self._donations = donations @property def name(self): """ Get donor name """ return self._name def donate(self, amt): """ Record a new donation for this donor """ self._donations.append(amt) @property def donations(self): """ Return list the donations for this donor """ return self._donations @property def num_donations(self): """ Return the number of donations for this donor """ return len(self._donations) @property def total_donations(self): """ Return the total donations for this donor """ total = 0; for donation in self._donations: total += donation return total @property def avg_donation(self): """ Return the average donation for this donor """ return self.total_donations / self.num_donations def __lt__(self, other): """ Less-than comparator for this donor's total donations to anothers """ return self.total_donations < other.total_donations def __eq__(self, other): """ Equality comparator for this donor's total donations to another """ return self.total_donations == other.total_donations
class EachDonor: """ Individual donor field behaviors """ name = String() each_donation = List() def __init__(self, name, each_donation): """ Initialize instance objects :param name: name object for individual donors :param each_donation: individual donations (to be added to list) """ self.name = name self.each_donation = [] for new_donation in each_donation: self.each_donation.append(new_donation) def new_donation(self, amnt): """ Donation adder() function -- allows user to enter new donation amount(s) for a specific donor. :param amnt: donation amount (numeric) :return: N/A """ self.each_donation.append(amnt) def write_letter(self, *args): """ Pre-written text with donor info to be added on individual run :param args: :return: """ donor_container = { 'name': self.name, 'donation': self.each_donation[-1], 'num_donations': len(self.each_donation) } thankyou_file = (''' Dear {name}, Thank you for your continued support through your most recent contribution of ${donation:,.2f}. Your {num_donations} donation(s) over this year have been instrumental in moving towards our fundraising goal of $100,000.00 to benefit local charities. On behalf of all the members of the Foundation, we thank you for your generosity and look forward to working with you in the future to build a better world! Best wishes, Foundation Board of Directors\n'''.format(**donor_container)) return thankyou_file @property def sum_donations(self): """ Returns sum of donor's donations :return: """ return sum(self.each_donation) @property def num_donations(self): """ Returns number of donations for self.donor :return: """ return len(self.each_donation) @property def avg_donations(self): """ Returns average value of donations for self.donor :return: """ return sum(self.each_donation) / len(self.each_donation) def __str__(self): """ Formatting for report columns :return: """ return "{:<20}{:>15,.2f}{:^18}{:>10,.2f}".\ format(self.name, self.sum_donations, self.num_donations, self.avg_donations) def __repr__(self): """ :return: """ return "Donor(\'{}\', {})".format(self.name, self.each_donation) def __lt__(self, other): return self.sum_donations < other.sum_donations def __gt__(self, other): return self.sum_donations > other.sum_donations def __eq__(self, other): return self.sum_donations == other.sum_donations def __ne__(self, other): return self.sum_donations != other.sum_donations
class Donor(JsonSaveable): name = String() history = List() def __init__(self, title, gift): self.name = title self.history = [] if type(gift) == int or type(gift) == float: self.history.append(round(gift, 2)) elif type(gift) == list: for x in gift: self.history.append(round(x, 2)) def __len__(self): return len(self_history) @property def avg_gift(self): return sum(self.history) / len(self.history) @property def sum_gift(self): return sum(self.history) @property def info(self): return (self.name, len(self.history), self.avg_gift, self.sum_gift) def add_gift(self, value): self.history.append(round(value, 2)) def challenge(self, factor, min_gift=None, max_gift=None): if min_gift is None: min_gift = min(self.history) if max_gift is None: max_gift = max(self.history) filt_hist = list( filter(lambda x: x >= min_gift and x <= max_gift, self.history)) remain_hist = list( filter(lambda x: x < min_gift or x > max_gift, self.history)) filt_hist = list(map(lambda x: x * factor, filt_hist)) return Donor("*" + self.name, filt_hist + remain_hist) def thank_u_letter_str(self, new_gift=False): divider = "\n" + "*" * 50 + "\n" thank_u_letter = divider + f"Dearest {self.name},\n" if new_gift: thank_gift = self.history[len(self.history) - 1] thank_u_letter += "\tThank you for your most recent donation of" else: thank_gift = self.sum_gift thank_u_letter += "\tThank you for your lifetime total of " thank_u_letter += (f" ${thank_gift:.2f}!\n" "We will use your donation(s) to create real " "living Pokemon.\n" "You now have our eternal loyalty. Use it wisely.\n" "Sincerely,\n" f"We're a Pyramid Scheme & so is {self.name}" + divider) return thank_u_letter