[+] Add prep4

This commit is contained in:
Hykilpikonna
2021-09-29 12:37:03 -04:00
parent 16be56625c
commit 56db5e0f8d
+119
View File
@@ -0,0 +1,119 @@
"""CSC110 Fall 2020 Prep 4: Programming Exercises
Instructions (READ THIS FIRST!)
===============================
This Python module contains several function headers and descriptions.
Your task is to complete this module by doing the following for EACH function below:
1. Implement the function so that it does what its description claims.
You do *not* need to add new doctests or preconditions (and in fact
you should *not* add any preconditions!).
We have marked each place you need to write code with the word "TODO".
As you complete your work in this file, delete each TODO comment---this is a
good habit to get into early!
Copyright and Usage Information
===============================
This file is provided solely for the personal and private use of students
taking CSC110 at the University of Toronto St. George campus. All forms of
distribution of this code, whether as given or with any changes, are
expressly prohibited. For more information on copyright for CSC110 materials,
please consult our Course Syllabus.
This file is Copyright (c) 2020 David Liu and Mario Badr.
"""
from dataclasses import dataclass
@dataclass
class Person:
"""A person with some basic demographic information.
"""
given_name: str
family_name: str
age: int
address: str
def greet_person(person: Person) -> str:
"""Return a greeting message for the given person.
The message should have the form 'Hello, <given_name> <family_name>!'
>>> david = Person('David', 'Liu', 110, '110 St. George Street')
>>> greet_person(david)
'Hello, David Liu!'
"""
# TODO: complete this function body
def older_name(p1: Person, p2: Person) -> str:
"""Return the first name of the person who is older among p1 and p2.
If p1 and p2 have the same age, return the name of p1.
>>> david = Person('David', 'Liu', 110, '110 St. George Street')
>>> mario = Person('Mario', 'Badr', 111, '111 St. George Street')
>>> older_name(david, mario)
'Mario'
"""
# TODO: complete this function body
def average_age(people: list[Person]) -> float:
"""Return the average age of the people in people.
Preconditions:
- people != []
>>> david = Person('David', 'Liu', 110, '110 St. George Street')
>>> mario = Person('Mario', 'Badr', 111, '111 St. George Street')
>>> example_people = [david, mario]
>>> average_age(example_people)
110.5
"""
# TODO: complete this function body
@dataclass
class Group:
"""A class representing a group of people.
Its attributes are the group name and a list of the people in the group.
"""
name: str
members: list[Person]
def member_names(group: Group) -> list[str]:
"""Return the given names of the members of the given group.
The names appear in the same order of the members in the group.
>>> david = Person('David', 'Liu', 110, '110 St. George Street')
>>> mario = Person('Mario', 'Badr', 111, '111 St. George Street')
>>> cool_profs = Group('Cool Profs', [david, mario])
>>> member_names(cool_profs)
['David', 'Mario']
"""
# TODO: complete this function body
if __name__ == '__main__':
import python_ta.contracts
python_ta.contracts.DEBUG_CONTRACTS = False
python_ta.contracts.check_all_contracts()
import doctest
doctest.testmod(verbose=True)
import python_ta
python_ta.check_all(config={
'extra-imports': ['python_ta.contracts', 'dataclasses'],
'max-line-length': 100,
'disable': ['R1705']
})