Admissions System
In this assignment, you will write functions that might appear in a system used by post-secondary institutions to determine which students to admit. Some functions are required to manage a special situation that affects some students.
Goals of this Assignment
- Use the Function Design Recipe to plan, implement, and test functions.
- Write function bodies using variables, numeric types, strings, and conditional statements. (You can do this whole assignment with only the concepts from Weeks 1, 2, and 3 of CSC108.)
- Learn to use Python 3, Wing101, provided starter code, a type-check module, and other tools.
Background Information
In this section, we describe a scenario to help explain what the program you will be writing does. Since we assume you have only been programming for a few weeks, we have made some adjustments to the code you will implement that are unrealistic but that make the problem easier to solve. We encourage you to pay attention to details and requirements you find unrealistic, and consider what you would need to be able to do to improve your program. You can read more about this in the "Going Further" section.
Most post-secondary institutions use some kind of computer system to help manage admissions. Often, these programs are used to handle straightforward admissions cases, freeing up human time to work on the more complex ones. The purpose of the system you are working on is to determine if students meet cutoffs for admission to degree programs and for consideration for scholarships.
Admission to degrees is based on marks in high school courses a student has taken. In our admission program, we are given two marks for every course in a student's application. The first mark is their grade on coursework, and the second is their grade on the final exam. Their final mark in the course is the average of those two marks.
In the 2017-2018 academic year, post-secondary institutions in Alberta needed to update their admissions systems to handle a special group of incoming students. In April 2017, a strike by the Alberta Teacher's Association (the union that represents Alberta teachers) caused many disturbances in the province's schools. Although most schools went back to normal operations after the one-month strike, the schools in Fort McMurray, a city in northern Alberta, were not able to recollect themselves quick enough because of the resources being used on recovering from the Fort McMurray forest fires of the previous year. This included students who were in their final year of high school, preparing to write final exams. Due to all of these factors, most students were not able to write their exams.
To accommodate students in this special situation, post-secondary institutions in Alberta changed the admission criteria for these students; they would be admitted based on their coursework marks up to the evacuation, and not on the coursework plus exam mark typically used. These special criteria were only applied to students who came from particular schools in the affected year, and only if they were unable to write the exam.
Our Admission Process
This section describes the process our admission system will use.
Admission to a degree is based on the average of a student's final mark in up to three high school courses. The admission program contains a set of courses that can be used; not every course a student submits can necessarily be used for admission. Courses that cannot be used for admission are not included in the computed average.
Each degree has its own cutoff for admission. Additionally, students whose average is 5% or more above the admission cutoff receive a scholarship. For example, if a degree has an admission cutoff of 80% then students with averages of 85% or more receive a scholarship.
Each student application is a record consisting of the name of the student, the high school they attended, their graduation year, the three courses they wish to use for admission, and the degree they are applying to.
The admission system reports, for each student, the admission decision for their application to a particular degree. If a student applies for more than one degree, the system will have more than one record for them.
Terminology and Data
In this section, we define some of the information used in the admission system, and describe how the information is represented in the program.
student record: A student record consists of the student's name, the high school they attended, their graduation year, a course record for each of the three courses they wish to use for admission, and the name of the degree they are applying to. In the Assignment 1 program, a student record is represented by a string, with each piece of information separated by a comma. You will see examples of student records in the provided code. You may assume that student records will only contain commas to separate information, and that you do not need to handle the case where a record is not properly formatted. The following is an example of a student record:
'Jacqueline Smith,Some High School,2016,MAT,90,94,ENG,92,NE,CHM,80,85,BArts'
course record: A course record consists of a course code, a coursework mark, and an exam mark. In the Assignment 1 program, a course record is represented by a string, with each piece of information separated by a comma. For this assignment, you can assume that each mark is exactly two characters; for example,9
and100
are not possible marks. A course record with a missing exam mark will contain'NE'
in place of the exam mark. (NE stands for No Exam.)'MAT,90,94'
and'ENG,92,NE'
are examples of course records.
transcript: A transcript consists of three course records. In the Assignment 1 program, a transcript is represented by a string, with each course record separated by a comma.'MAT,90,94,ENG,92,NE,CHM,80,85'
is an example of a transcript.
course code: A course code is a string of three characters that represents a course. Any string of three characters (other than a comma) is a valid course code.'MAT'
and'ABC'
are examples of course codes.
degree: To avoid confusion between a computer program and an academic program of study, we use the word "degree" when referring to an academic program of study. In the rest of this handout, the word "program" refers to a computer program. For this assignment, the degree a student applied to is the last part of information in their student record: all of the characters after the last comma. The characters representing a degree may appear elsewhere in a student record. For example, a student may be named'Arthur'
even if'Art'
represents a possible degree.'BArts'
and'BSci'
are examples of degrees.
Files to download
All of the files that you need to download for the assignment are inthis zip file. These files must be unzipped, and folder structure not changed. Download the files by right-clicking on the link and using your web-browser's "Save as" option. Do not use "cut and paste" as sometimes this can cause undesirable formating characters to be added to Python code.
- Starter code is code that we provide for you to revise and turn into a complete assignment solution. The starter code for this assignment is in a file named
admission_functions.py
. Complete it by following the instructions in theWhat to dosection of this handout (see below).
- The main admissions program is in a file named
admission_program.py
. It is complete and must not be changed. More details on this code are given below.
- The A1 checker code is in a file named
checker.py
. Download and save this file. It is complete and must not be changed. More details on this code are given below.
What to do
In the starter code fileadmission_functions.py
, complete the function definitions for the functions listed in the table below. Use the Function Design Recipe that you have been learning. We have included the type contracts in the table; please read through the table to understand how the functions will be used. You can also take a look at the code inadmission_program.py
to see how the functions are used.
We will be marking your docstrings in addition to your code. Please include two examples in your docstrings. You will need to paraphrase the full descriptions of the functions to get an appropriate docstring decscription.
Examination of the providedadmission_functions.py
starter code file will show that it starts with the definition of some named constant variables which refer to the two schools and the year to which the special criteria apply, and a complete docstring for theis_special_case
function. In your Assignment 1 solution, do not change the code that we have provided. You are to add your Python statements to this starter code file and fulfill the requirements listed in the table below.
If you examineadmission_program.py
, you will notice that only five of the six functions below are called in that file. The sixth function will be called by one of the functions you write, and there will be some marks allocated for correctly determining the usage.
Function name: (Parameter types) -> Return type |
Full Description (paraphrase to get a proper docstring description) |
---|
is_special_case:
(str) -> bool
|
The parameter represents a student record. ReturnTrue if and only if the student should be handled using the special case rules. Recall that for our admission system, a special case is a student who graduated from one of the specified high schools in the affected year. Use the constants representing these values included in the starter code. The constants must match the school and year values exactly. That is, the entire school name must match with no additional or missing characters. You can assume there are only two possible special case schools, and only one possible special case year. |
get_final_mark:
(str, str, str) -> float
|
The first parameter represents a student record. The second parameter represents the mark that student got on their coursework for a particular course, and the third parameter represents the mark that student got on their exam for the same course. Return the student's final mark in the course. A missing exam mark counts as a zero, unless the student is a special case. |
get_both_marks:
(str, str) -> str
|
The first parameter represents a record for a course, and the second parameter represents a course code to find marks for. If the course record matches the desired course, return a string containing the coursework mark and the exam mark separated by a single space. Otherwise, return the empty string. |
extract_course:
(str, int) -> str
|
The first parameter represents a student transcript, consisting of one or more course records. The second parameter represents the course to extract from the transcript, with the first course in the transcript being course 1, the second being course 2, etc. For example, extracting course 2 from the transcript'MAT,90,94,ENG,92,NE,CHM,80,85' should produce'ENG,92,NE' . You may assume that the second parameter has a value of at least 1. |
applied_to_degree:
(str, str) -> bool
|
The first parameter represents a student record, and the second parameter represents a degree. ReturnTrue if and only if the student represented by the first parameter applied to the degree represented by the second parameter. |
decide_admission:
(number, number) -> str
|
The first parameter represents a students' average in courses that can be considered for admission. The second parameter represents a cutoff for a degree. Return'accept' if the average is at least the cutoff but below the threshold for a scholarship,'accept with scholarship' if the average is at or above the threshold for a scholarship, and'reject' if the average is below the cutoff. NOTE: Copy and paste the strings to return carefully. Spelling, spacing, and case all matter here! Be sure to use the checker to make sure your strings match! |
Using Constants
Your code should make use of the provided constants. If the value of one of those constants were changed, and your program rerun, your functions should work with those new values. We will test your code using different special case schools and year by updating the values of the constants - your code should still work with this updated special case!
Your docstring examples can reflect the values of the constants in the provided starter code, and donotneed to change if we change the values of the constants.
You should also create your own constants and use those in place of literal strings like'NE'
or'accept'
in your code.
What NOT to do
Youradmission_functions.py
file should contain the starter code, plus the function definitions specified above. Youradmission_functions.py
file mustnotinclude any calls to functionprint
orinput
. Also, donotinclude any extra code outside of the function definitions, and do not import any modules.
Want to earn a good mark? Test your work!
You should carefully verify your codebefore submittingto determine whether it works: the Test step of the Function Design Recipe is particularly important for assignments. Once the deadline has passed, we will run our own set of tests on your submission.
To test your work, you should call on each function with a variety of different arguments and check that the function returns the correct value in each case. This can be done in the shell or using another.py
file, but must not be done in your submittedadmission_functions.py
file.
CSC108 A1 Checker
We are providing a checker module (checker.py
) that tests two things:
- whether your functions have the correct parameter and return types, and
- whether your code follows the Python and CSC108style guidelines.
To run the checker, openchecker.py
and run it. Note: the checker file should be in thesamedirectory as youradmission_functions.py
, as provided in the starter code zip file. You can find a demo of the checker being run in the Week 3 Prepare exercises on PCRS.
If the checker passes:
- Your function parameters and return types match the assignment specification.This does not mean that your code works correctly in all situations.We will run additional tests on your code once you hand it in, so be sure to thoroughly test your code yourself before submitting.
- Your code follows the style guidelines.
If the checker fails, carefully read the message provided:
- It may have failed because one or more of your parameter or return types does not match the assignment specification, or because a function is misnamed. Read the error message to identify the problematic function, review the function specification in the handout, and fix your code.
- It may have failed because your code did not follow the style guidelines. Review the error description(s) and fix the code style. Please see thePyTA documentationfor more information about errors.
Make sure the checker passes before submitting.