Assignment
ITI1120- Assignment 2 Due Saturday; April 10, 2021 @ 11:30 PM
Section A: Important Instructions
1. Read and follow the instructions below carefully.
2. This assignment is worth 7.5% of your grade.
3. Submit your assignment by 11:30 PM Saturday, April 10th, 2021 via Brightspace. Refer
to the course syllabus to understand the policy over late assignment submissions. You can
make multiple submissions, but only the last submission will be graded.
4. Before you can start this assignment, you need to know how to use google Colab or
Jupyter notebook to develop and test your code. Refer to lecture or lab material for help.
5. Assignments must be submitted in a notebook format (file extension .ipynb) using free
resources: either google Colab or Jupyter. The following information must be included at
the beginning of your assignment program:
# Course: IT1 1120
# Assignment number: 4
# Due Date: Sat April 10, 2021 11:30 PM
# Family name, Given name
# Student number
6. This is an individual assignment, NOT a group effort. Review and adhere to course
policies and the university Plagiarism and Academic Integrity policy presented during the
first lecture.
7. The assignment has 4 questions totalling 50 marks. Make sure you’ve written good
docstrings that include:
a. Type contract
b. Function description, including parameter names.
c. Preconditions (if any).
8. Make sure you use the provided master notebook file to document all answers to all
questions.
File name must be formatted a4_xxxxxx.ipynb (where xxxxxx is replaced with your
student number).
You must have minimum one code cell to answer each question. Your submission should
contain AT LEAST 4 cells.
Your program must run without syntax errors. In particular, when grading your
assignment, TAs will first open your file a4_xxxxxx.ipynb with either google Colab or
Jupyter notebook and press Run Module. If pressing Run Module causes any syntax error
for any cell, the grade for that question will be zero.
9. For each of the questions below, test example(s) are provided to test your solution. To
obtain a partial mark your solution may not necessarily give the correct answer on these
tests. But if your solution gives any kind of python error when run on the tests provided
below, that question will be marked with zero points.
10. To determine your grade, your solution will be tested both with examples provided in
each question and with extra examples.
Section B: Assignment Questions
Question 1: (10 marks)
Write a function called tally_scores that takes as a parameter the name of a file that contains a series
of student records and that prints a summary of each student record. A student record will begin with a
name followed by a sequence of integer test scores. The name is guaranteed to be one word and at the
beginning of the line. You may assume that each student has at least one test score. Your function should
produce two lines of output for each student: one showing the student's name and test scores and a second
line showing the average score.
For example, if a file called records.txt contains the following:
John 71 83 94
Sally 94 85
Fred 90 95 82 85
and the following call is made:
tally_scores(records)
the following output should be produced:
John: 71 83 94
average = 82.66666666666667
Sally: 94 85
average = 89.5
Fred: 90 95 82 85
average = 88.0
You are to exactly reproduce the format of this output. You may not construct any extra data structures to
solve this problem.
Question 2: (10 marks)
Write a function called underline that takes a file name as a parameter and that prints the words one per
line with certain words underlined. The words to be underlined all begin with a period. The period
should not be printed. You should print the text that follows the period on a line by itself followed by a
line of alternating dashes and commas equal in length to the text that follows the period.
Input stored in input.txt: Output from the call underline(input) Banana .avocado .peach PineApple-
pumpkin pie.
.Nectarines
GRAPES pomegranateS
Banana
avocado
-,-,-,-
peach
-,-,-
PineApple-pumpkin
pie.
Nectarines
-,-,-,-,-,
GRAPES
pomegranateS
Notice that input lines can be blank lines. You may not construct any extra data structures to solve this
problem other than strings.
Question 3: (15 marks)
Write a function called merge_dict that takes two dictionaries, merge them, and returns a new
dictionary. The returned dictionary should contain all the keys of the passed dictionaries. Moreover, the
values of the common keys will be merged together in one list. However, the values of the unique keys
should stay in the same format they have appeared in the input dictionaries.
For example if you had the following dictionaries:
d1 = {1:"Moh", 2:"Aseel", 3:"Batoul", 4:["Taylor", "Chan", "Laura"]} d2 = {1: "Nahid", 2:"Carter", 3:"John", 6:"Odak"}
Output:
{1: ['Nahid', 'Moh'], 2: ['Carter', 'Aseel'], 3: ['John', 'Batoul'], 6:
'Odak', 4: ['Taylor', 'Chan', 'Laura']}
Another Example:
d1 = {1:"Moh", 2:"Aseel", 3:"Batoul", 4:["Taylor", "Chan", "Laura"]}
d2 = {1: "Nahid", 2:"Carter", 5:"John", 4:"Odak"}
output:
{1: ['Nahid', 'Moh'], 2: ['Carter', 'Aseel'], 5: 'John', 4: ['Taylor',
'Chan', 'Laura', 'Odak'], 3: 'Batoul'}
Question 4: (15 marks)
Consider a simple school management system that consists of two classes. A Student class and a Section
class.
The Student class has the following attributes and behaviors:
Student
name: string id: string score: float
__init_( ): initialize the student’s attributes.
getStdName( ): returns the name of the student
getStdId( ): returns the id of the student
getStdScore( ): returns the score of the student.
__str__( ): displays all the student’s information
The Section class has the following attributes and behaviors:
Section
course_name: string
course_section: string
std_list: list
__init__( ): initializes the Section’s attributes.
add(): adds a new student. Pass the student object as a parameter.
remove(): removes a student from the list of the students. Pass the student object as a parameter
updateScore(): updates the score of a specific students. Pass the student object and the score.
displaySection(): displays all students’ information in the section.
averageScore(): calculates and displays the average score of the whole section.
Implement the two classes. Test your implementation by instantiating three objects of the Student class
and one object of the Section class. For example, if you write the code below in the main section of the
program and execute your code, you should get the below output:
s1= Student("Mohamad","600053",100)
s2= Student("Hoda","700060",200)
s3= Student("Hassan","800090",300)
sec= Section("ITI1120","Section E")
sec.add(s1)
sec.add(s2)
sec.add(s3)
sec.displaySection()
sec.updateScore(s1,500)
sec.displaySection()
sec.averageScore()
sec.remove(s3)
sec.displaySection()
sec.averageScore()
Output:
New student "Mohamad" was added successfully!
New student "Hoda" was added successfully!
New student "Hassan" was added successfully!
List of all students in section:
Mohamad 600053 100
Hoda 700060 200
Hassan 800090 300
Mohamad has updated his score!
List of all students in section:
Mohamad 600053 500
Hoda 700060 200
Hassan 800090 300
Average of entire section: 333.33
Removed Hassan from section list!
List of all students in section:
Mohamad 600053 500
Hoda 700060 200
Average of the entire section: 350.00
Good Luck