CSC108H Assignment 1

Due Date: Tuesday, May 29, 2018 before 10:00:00 p.m.

A warning about academic offenses

All of the work you submit must be done by only you, and your work must not be submitted by someone else. Plagiarism is academic fraud and is taken very seriously. The department uses software that compares programs for evidence of similar code. Please read the Rules and Regulations from the U of T Governing Council (especially the Code of Behaviour on Academic Matters). Please also see the information for students from the Office of Student Academic Integrity.

Please don’t copy. We want you to succeed and are here to help. Here are a couple of general guidelines to help you avoid plagiarism:

How to start

  1. Read everything in this page thoroughly. Understanding the problem is a large part of this assignment.
  2. Download and unzip the starter code.
  3. Open admission_functions.py in Wing 101.
  4. Try running checker.py in Wing 101.
  5. Write the docstring for each function. You should be able to complete the assignment with materials from Weeks 1-3. You should be able to write the docstrings of all the functions at the end of Week 2.
  6. Write and test each function, using checker.py after writing each function. You can look at admission_program.py to see how the functions you are writing are called.
  7. You should be able to run admission_program.py after completing all functions.
  8. Before submitting on MarkUs, run the checker.py

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

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.

Files to download

All of the files that you need to download for the assignment are in this 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.

What to do

In the starter code file admission_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 in admission_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 provided admission_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 the is_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 examine admission_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. Return True 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. Return True 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 do not need 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

Your admission_functions.py file should contain the starter code, plus the function definitions specified above. Your admission_functions.py file must not include any calls to function print or input. Also, do not include 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 code before submitting to 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 submitted admission_functions.py file.

CSC108 A1 Checker

We are providing a checker module (checker.py) that tests two things:

To run the checker, open checker.py and run it. Note: the checker file should be in the same directory as your wordlock_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:

If the checker fails, carefully read the message provided:

Make sure the checker passes before submitting.

Going Further (optional, not for marks)

This assignment is designed to be doable with only the concepts we see in the first few weeks of the course. This means that there are a lot of choices we made in designing this system that could be improved on as we learn more concepts. You are encouraged to think about ways in which you could improve the entire system (both the functions and program files) with additional concepts.

You will notice that there is code in admissions_program.py that we have not yet talked about in class. If you are finding this assignment pretty straightforward, we encourage you to figure out how the program code works, and to then think about how to improve it. By the end of this course, you will be able to understand all of the code in admissions_program.py, and likely even be able to think of ways to improve it! You may also think of better ways to represent the data in the program.

Important: Your code will be evaluated on how it meets the function descriptions above. While we encourage you to think about how to improve the program, do NOT submit these improvements as part of your Assignment 1 submission.

Marking

These are the aspects of your work that will be marked for A1:

A Warning about Academic Offenses

To detect plagiarism, a software program will be used to compare all assignments submitted with all other submissions. As always, the work that you submit must be your own and you must not share your work with others.

While online resources can sometimes be helpful, we strongly caution you against searching online for assignment solutions. A large number of the academic offenses in CS are between students who have never met, and who just happened to find the same solution online. If you find it, someone else will too. Please consult the syllabus for more information about academic offences.

What to Hand In

The very last thing you do before submitting should be to run the type-check module one last time. Otherwise, you could make a small error in your final changes before submitting that causes your code to receive zero for correctness.

Submit your admission_functions.py file on MarkUs according to the instructions on the course website. Remember that spelling of filenames, including case, counts: your file must be named exactly as above.

MarkUs uses your Teaching Labs account. If you haven't set your password, please follow the instructions here.