Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify...

27
Major Lab 4 Teaching Assistants: Alice and Bob

Transcript of Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify...

Page 1: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Major Lab 4Teaching Assistants: Alice and Bob

Page 2: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

The problem

Daisy is working on an app to help students decide what courses they need to take. She’s scraped some data off the UTM Academic Calendar, but is finding it hard to analyze it.

We’ll be helping her out with our file reading anddictionary parsing skills! 😎

2

Page 3: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Note: this lab is a bit long, but don’t get overwhelmed with the length!

We’ll divide this up together, and use hints to get this done soon

3

Page 4: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Part 1: File I/O

4

Page 5: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Task 1: Open CSV

Complete the function open_csv so it opens a file, reads past the 3 line header, and returns the opened file!

Yes, this is as simple as it seems

5

Page 6: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Estimated Time

5 minutes!

6

Page 7: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Task 2: Read Program Requirements

We are given a CSV formatted like the following:

Program, Dept., Year X, n, course-1, …, course-n, Year Y, m, …

And we return a dictionary formatted as follows:

7

{<Program>: {‘Department’: <Dept>,

<Year X>: [<course-1>, …, <course-n>]

<Year Y>: [...]

}

Page 8: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

That looks overwhelming...

It does. It’s different from what you’ve done before, so we’ll recommend some steps (provided as comments in the py file!):

1. Parse one line at a time. Each line has one program’s information

2. Split the line into a list. Remember: this file is a CSV3. Record the program name and department. They’re the

easiest values to extract4. Now loop over the *remaining* list.

8

Page 9: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Looping over remaining List

1. Use a while loop - it will make things easier!2. Each time you see a value like “Year X” in the list, the next value will be the

slice of the list you need to take from this point to get courses. For example:

[‘Year 1’, ‘3’, ‘CSC108’, ‘CSC148’, ‘MAT137, ‘Year 2’, …]

Note that slicing the list to get the next 3 elements after index 1 gets you the courses required in Year 1

3. Add the information you get from this slice to a dictionary, and now only loop over the remaining part of the list! Skip everything you needed for Year X, because you’re done (you’re need something like: lst = lst[ index of last course + 1: ]

9

Page 10: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Pseudocode hints:

Note: these hints are suggestions - you can take a different approach!

10

Page 11: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Examples

11

Program requirements:

{'Specialist Program ERSPE1038': {'Department': 'Information Security (Science)', 'Year 1': ['CSC108H5', ‘CSC148H5’]}})

File:

Specialist Program ERSPE1038, Information Security (Science), Year 1, 2, CSC108H5, CSC148H5\n

Page 12: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

More examples in major.py!

12

Page 13: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Estimated time with pseudocode

30-45 minutes!

Suggestion: if you feel like this task is overwhelming you, start it, and then debug/test later in the week

You can also move on to the next functions, and see this again later

13

Page 14: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

And you’re done :)

The loop in this function is probably the hardest part of this lab. Once you get this done, you’ve really won half the battle

14

Page 15: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Task 3: Course Requirements

This function is a lot easier than task 2. Ideally, you just need to:

1) Loop over each line2) Split to get [<course>, <prereqs>]3) Split to divide <prereqs>4) Add information to a dictionary

Note: watch out for extra space!

15

Page 16: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Examples

16

Program requirements:

{‘CSC108H5’: [], ‘CSC148H5’: [‘CSC108H5’], ‘CSC209H5’: [‘CSC207H5’, ‘MAT102H5’]

File:

CSC108H5:\nCSC148H5: CSC108H5\nCSC209H5: CSC207H5, MAT102H5\n

Page 17: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

More examples in major.py!

17

Page 18: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Estimated Time

< 10-15 minutes

18

Page 19: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

19

Part 2: Dictionaries

Page 20: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Task 4: Qualify for Program

A student, for the purposes of this lab, will qualify for a program if they've taken all the 1st year courses required for the program, and satisfy the minimum gpa requirement.

We have 3 parameters:1. Program_name: string which gives you program name (a key in

program info)2. Student record: dictionary with keys gpa (mapped to a float) and list of

courses (mapped to strings, course codes match courses in program_info)

3. Gpa: required gpa for the program4. Program_info: dictionary (like the one you generate in task 2)

20

Page 21: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Task 4: Qualify for Program

Our job is to:1. Check <program>’s information in program_info to make sure that

the student has taken all the first year courses required by the program and that their gpa meets the minimum gpa requirement.

If the student has taken all required 1st year courses and meets the minimum gpa requirement, then return True

21

Page 22: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Examples >>> program_info = {'Major Program ERMAJ2511': { \

'Department': 'Mathematical Sciences (Science)', \

'Year 1': ['MAT102H5', 'CSC108H5'] \

}}

>>> gpa = 3.0

>>> program_name = 'Major Program ERMAJ2511'

>>> student_info = {'gpa': '3.5', 'courses_taken': ['MAT102H5',

'MAT135H5']}

>>> qualify_for_program(program_name, student_info, gpa, program_info)

???

>>> student_info = {'gpa': '3.5', 'courses_taken': ['MAT102H5', 'CSC108H5'}

>>> qualify_for_program(program_name, student_info, gpa, program_info)

???

22

Page 23: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Examples >>> program_info = {'Major Program ERMAJ2511': { \

'Department': 'Mathematical Sciences (Science)', \

'Year 1': ['MAT102H5', 'CSC108H5'] \

}}

>>> gpa = 3.0

>>> program_name = 'Major Program ERMAJ2511'

>>> student_info = {'gpa': '3.5', 'courses_taken': ['MAT102H5',

'MAT135H5']}

>>> qualify_for_program(program_name, student_info, gpa, program_info)

False

>>> student_info = {'gpa': '3.5', 'courses_taken': ['MAT102H5', 'CSC108H5'}

>>> qualify_for_program(program_name, student_info, gpa, program_info)

???

23

Page 24: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Examples >>> program_info = {'Major Program ERMAJ2511': { \

'Department': 'Mathematical Sciences (Science)', \

'Year 1': ['MAT102H5', 'CSC108H5'] \

}}

>>> gpa = 3.0

>>> program_name = 'Major Program ERMAJ2511'

>>> student_info = {'gpa': '3.5', 'courses_taken': ['MAT102H5',

'MAT135H5']}

>>> qualify_for_program(program_name, student_info, gpa, program_info)

False

>>> student_info = {'gpa': '3.5', 'courses_taken': ['MAT102H5', 'CSC108H5'}

>>> qualify_for_program(program_name, student_info, gpa, program_info)

True

24

Page 25: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Task 5: Filter By Prereqs

Given the following parameters:

1. Students: dictionary that maps each <student> to the list of courses that they’ve taken

2. Courses_info: dictionary that maps courses to prerequisites (what Task 3 returns)

3. Course_name: the name of the course that we are checking prerequisites for

*modify* students so that it only contains students who have all the prerequisites required to take course_name

25

Page 26: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Examples >>> courses_info = {'CCT110H5': ['CCT109H5']}

>>> students = {'Naaz': ['CSC108H5', 'MAT102H5'], \

'Haocheng': ['CSC108H5', 'CCT109H5']}

>>> filter_by_prereqs(students, courses_info, 'CCT110H5')

>>> students

???

26

Page 27: Major Lab 4 - University of Toronto108/lectures/MajorLab4... · 2020. 11. 9. · Task 4: Qualify for Program A student, for the purposes of this lab, will qualify for a program if

Examples >>> courses_info = {'CCT110H5': ['CCT109H5']}

>>> students = {'Naaz': ['CSC108H5', 'MAT102H5'], \

'Haocheng': ['CSC108H5', 'CCT109H5']}

>>> filter_by_prereqs(students, courses_info, 'CCT110H5')

>>> students

{'Haocheng': ['CSC108H5', 'CCT109H5']}

27