PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

Similar documents
Question 1. Part (a) Part (b) December 2013 Final Examination Marking Scheme CSC 108 H1F. [13 marks] [4 marks] Consider this program:

CSC148 Fall 2017 Ramp Up Session Reference

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

UNIVERSITY OF TORONTO Faculty of Arts and Science APRIL 2014 EXAMINATIONS. CSC 108 H1S Instructors: Campbell and Papadopoulou.

Student Number: Comments are not required except where indicated, although they may help us mark your answers.

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

Do not turn this page until you have received the signal to start. In the meantime, please read the instructions below carefully.

UNIVERSITY OF TORONTO SCARBOROUGH. December 2017 EXAMINATIONS. CSCA20H3 Duration 3 hours. Examination Aids: Instructor: Bretscher

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

UTORid: Lecture Section: (circle one): L0101 (MWF10) L0201 (MWF11) Instructor: Jacqueline Smith Jen Campbell

Student Number: Instructor: Brian Harrington

UNIVERSITY OF TORONTO SCARBOROUGH. Wnter 2016 EXAMINATIONS. CSC A20H Duration 2 hours 45 mins. No Aids Allowed

Student Number: Comments are not required except where indicated, although they may help us mark your answers.

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

CSC A20H3 S 2011 Test 1 Duration 90 minutes Aids allowed: none. Student Number:

Do not turn this page until you have received the signal to start.

UNIVERSITY OF TORONTO Faculty of Arts and Science DECEMBER 2017 EXAMINATIONS. CSC 108 H1F Instructor(s): Campbell, Fairgrieve, and Smith

Question 1. December 2009 Final Examination Marking Scheme CSC 108 H1F

Question 1. Part (a) Part (b) Part (c) April 2015 Final Examination Solutions CSC 108 H1S. [16 marks] [3 marks]

Short Python function/method descriptions:

Do not turn this page until you have received the signal to start.

Do not turn this page until you have received the signal to start.

Good Luck! CSC207, Fall 2012: Quiz 1 Duration 25 minutes Aids allowed: none. Student Number:

Do not turn this page until you have received the signal to start.

Short Python function/method descriptions:

CSC 108H1 F 2009 Test 1 Duration 35 minutes Aids allowed: none. Student Number:

UNIVERSITY OF TORONTO SCARBOROUGH. Fall 2015 EXAMINATIONS. CSC A20H Duration 3 hours. No Aids Allowed

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

Strings are actually 'objects' Strings

Do not turn this page until you have received the signal to start. In the meantime, please read the instructions below carefully.

CIS192: Python Programming Data Types & Comprehensions Harry Smith University of Pennsylvania September 6, 2017 Harry Smith (University of Pennsylvani

CIS192 Python Programming

Chapter 1 Summary. Chapter 2 Summary. end of a string, in which case the string can span multiple lines.

CSC 108H1 F 2010 Test 1 Duration 45 minutes Aids allowed: none. Student Number:

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

Do not turn this page until you have received the signal to start. In the meantime, please read the instructions below carefully.

CIS192 Python Programming

CIS192 Python Programming

UNIVERSITY OF TORONTO Faculty of Arts and Science

You may not share any information or materials with classmates during the exam and you may not use any electronic devices.

\n is used in a string to indicate the newline character. An expression produces data. The simplest expression

Python Programming: Lecture 2 Data Types

Lecture no

CIS192 Python Programming

ICS 31 UC IRVINE. ############## YOUR UCINET #### K E Y #### ############## Second Midterm YOUR NAME YOUR STUDENT ID (8 DIGITS)

CSC148 Recipe for Designing Classes

Python: Short Overview and Recap

Question 1. CSC 120H1 F Midterm Test Solutions Fall 2017

CPD for GCSE Computing: Practical Sheet 6 February 14

Overview of List Syntax

CS 1301 Exam 1 Fall 2010

CS 1110 Prelim 2 April 26th, 2016

CIS192 Python Programming

Python review. 1 Python basics. References. CS 234 Naomi Nishimura

CS150 Sample Final. Name: Section: A / B

Variable and Data Type I

Python Mini Lessons last update: May 29, 2018

Babu Madhav Institute of Information Technology, UTU 2015

Final Exam(sample), Fall, 2014

Types, lists & functions

CS 1110 Prelim 2 April 21, 2015

Python allows variables to hold string values, just like any other type (Boolean, int, float). So, the following assignment statements are valid:

UNIVERSITY OF TORONTO Faculty of Arts and Science. Midterm Sample Solutions CSC324H1 Duration: 50 minutes Instructor(s): David Liu.

>>> print( X ) [0,1,2,3] def mystery(l):??

MULTIPLE CHOICE. Chapter Seven

Do not turn this page until you have received the signal to start.

18.1. CS 102 Unit 18. Python. Mark Redekopp

Module 3: Strings and Input/Output

CS 1110 Final, December 17th, Question Points Score Total: 100

LISTS WITH PYTHON. José M. Garrido Department of Computer Science. May College of Computing and Software Engineering Kennesaw State University

Multiple Choice (Questions 1 14) 28 Points Select all correct answers (multiple correct answers are possible)

CPE 112 Spring 2015 Exam II (100 pts) March 4, Definition Matching (8 Points)

Sequences and iteration in Python

School of Computer Science Introduction to Algorithms and Programming Winter Midterm Examination # 1 Wednesday, February 11, 2015

Using Objects and Images in Python

UNIVERSITY OF TORONTO Faculty of Arts and Science. Midterm 1 CSC148H1F L0201 (Liu)

You may not share any information or materials with classmates during the exam and you may not use any electronic devices.

Question 1. Part (a) Simple Syntax [1 mark] Circle add_ints(), because it is missing arguments to the function call. Part (b) Simple Syntax [1 mark]

Question 1. CSC A08 F Midterm Test Solutions Fall 2011

List Mutation (Module 4) Accumulative Recursion (Module 5) Efficiency (Module 7) Searching & Sorting (Module 8) Dictionaries (Module 9)

Last Name: First: Netid: Section. CS 1110 Final, December 17th, 2014

Introduction to programming using Python

Introduction to Python! Lecture 2

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

1. What is the minimum number of bits needed to store a single piece of data representing: a. An integer between 0 and 100?

Question 0. Do not turn this page until you have received the signal to start.

CS 1110 Prelim 1 October 15th, 2015

Strings. Upsorn Praphamontripong. Note: for reference when we practice loop. We ll discuss Strings in detail after Spring break

Structure and Interpretation of Computer Programs

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

Midterm I Practice Problems

Python I. Some material adapted from Upenn cmpe391 slides and other sources

CS 1110 Prelim 2 November 14th, 2013

Module 07: Efficiency

CS150 Sample Final Solution

Sequence types. str and bytes are sequence types Sequence types have several operations defined for them. Sequence Types. Python

Transcription:

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science DECEMBER 2013 EXAMINATIONS CSC 108 H1F Instructors: Craig and Gries Duration 3 hours PLEASE HAND IN Examination Aids: None Student Number: Family Name(s): Given Name(s): Do not turn this page until you have received the signal to start. In the meantime, please read the instructions below carefully. # 1: /13 This final examination paper consists of 8 questions on 20 pages (including this one). When you receive the signal to start, please make sure that your copy of the final examination is complete. Comments and docstrings are not required except where indicated, although they may help us mark your answers. They may also get you part marks if you can t figure out how to write the code. You may not use break or continue on this exam. If you use any space for rough work, indicate clearly what you want marked. # 2: / 8 # 3: / 3 # 4: / 9 # 5: /10 # 6: / 5 # 7: /10 # 8: /12 TOTAL: /70 Page 1 of 20 Good Luck! cont d...

Question 1. Part (a) [4 marks] Consider this program: [13 marks] def square(x): (number) -> number Write what this program prints, one line per box. There are more boxes than you need; leave unused ones blank. print( LINE A:, x) x = x * x print( LINE B:, x) return x if name == main : x = 5 print( LINE C:, x) square(x) print( LINE D:, x) square(x + 1) print( LINE E:, x) Part (b) [3 marks] Consider this program: Write what this program prints, one line per box. list1 = [ hat, glove, scarf ] list2 = list1[:] list2.append( mitt ) list3 = list2 list3[1] = boot print(list1) print(list2) print(list3) Page 2 of 20 cont d...

Part (c) [4 marks] Consider this function: def returns_what(x): (int) -> object if x ** 2 <= 100: if x % 4 == 2: return "six" elif not x + 5 > 2: return x - 34 else: if x < 0 and abs(x) > 3: return False else: return x / 10 In the table below are 4 calls to function returns_what. Beside each call, write the value returned by the call and that value s type. Call Return Value Return Type returns_what(20) returns_what(10) returns_what(3) returns_what(-100) Part (d) [2 marks] Consider this code: def f1(x, y): (int, int) -> int Write what this program prints, one line per box. There are more boxes than you need; leave unused ones blank. print( In f1, x, y) return x * y def f2(x, y): (int, int) -> int print( In f2, x, y) return x + y if name == main : print(f1(f2(1, 2), f1(3, 4))) Page 3 of 20 Student #: cont d...

Question 2. [8 marks] This question has you write the bodies of two functions. Complete each function according to its docstring. Part (a) [3 marks] Note: you will most likely not need all of the space on this page. def sum_squares(l): (list of list of number) -> list of number Return a list where each item is the sum of the squares of the items from the corresponding sublist of L. >>> sum_squares([[1, 2, 3], [7], [], [-8, 1]]) [14, 49, 0, 65] Page 4 of 20 cont d...

Part (b) [3 marks] def sum_squares_mutate(l): (list of list of number) -> NoneType Replace each sublist of L with a single integer that is the sum of the squares of the sublist s items. >>> L = [[1, 2, 3], [7], [], [-8, 1]] >>> sum_squares_mutate(l) >>> L [14, 49, 0, 65] Part (c) [2 marks] You almost certainly have duplicate code between your two functions. Write a helper function that you could have used to eliminate that duplicate code. Do not rewrite your functions for parts (a) and (b). Page 5 of 20 Student #: cont d...

Question 3. [3 marks] This str method may be helpful for answering this question: isalpha(...) S.isalpha() -> bool Return True if all characters in S are alphabetic and there is at least one character in S, False otherwise. Consider this code. The while expression is missing. Write it so that the function does what the docstring says it should. def get_valid_password(min): (int) -> str Precondition: min >= 1 Repeatedly ask a user to input a password until they enter one that is at least min characters long and that contains at least one non-alphabetic character. Return the resulting password. prompt = Enter a password at least + str(min) + characters long + \ with at least one non-alphabetic letter: password = input(prompt) while : # The password wasn t good enough. Ask again. password = input(prompt) return password Page 6 of 20 cont d...

Question 4. [9 marks] A permutation of a list is a list that has all the same items but possibly in a different order. Function is_permutation takes two lists and returns True iff its arguments are permutations of each other. Part (a) [4 marks] In the table below, we have outlined three test cases for is_permutation. Add four more test cases chosen to test the function as thoroughly as possible. Note: there are more than four good answers to choose from. Test Case Description list1 list2 Return Value empty lists [] [] True identical single item lists [ A ] [ A ] True different single item lists [1] [2] False Part (b) [5 marks] Write the function body. (You do not need to add examples to the docstring.) def is_permutation(list1, list2): (list, list) -> bool Return True iff list1 is a permutation of list2. Page 7 of 20 Student #: cont d...

Question 5. [10 marks] In Assignment 3, you worked with SQuEaL tables represented by dictionaries where each key is a string representing the name of a column and each value is a list of strings representing the items in that column from the top row to the bottom. Part (a) [2 marks] Complete function num_rows below according to its docstring. def num_rows(table): (dict of {str: list of str}) -> int Precondition: all table columns have the same number of rows. Return the number of rows in table. >>> t = { b.0 : [ g, i, k ], b.1 : [ h, j, l ]} >>> num_rows(t) 3 Part (b) [8 marks] Another way to represent the contents of a table would be to use a tuple of two lists. The first one is a list of lists where each inner list is the contents of a row, and the second one is a list of column names indicating the order in which the data is stored in each row in the first list. For example, the table shown below on the left is represented by both the dictionary and the tuple to the right. Notice that the column order in the tuple representation is unpredictable, because dictionaries are not ordered. { country : [ GB, FR, CA ], age : [ 34, 21, 19 ], country age brand brand : [ b1, b2, b3 ]} GB 34 b1 FR 21 b2 CA 19 b3 ( [[ GB, b1, 34 ], [ FR, b2, 21 ], [ CA, b3, 19 ]], [ country, brand, age ] ) On the next page, complete function convert_to_row_lists. It takes a SQuEaL table represented by a dictionary (as we did in A3) and returns the tuple of two lists representation. You may call function num_rows even if you were not able to correctly complete it. Page 8 of 20 cont d...

def convert_to_row_lists(table): (dict of {str: list of str}) -> tuple of (list of list of str, list of str) Return a tuple where the first item is a representation of table where each row is a list of strings. The second item in the tuple is the order in which the columns appear in the new representation. >>> t = { B : [ b1, b2 ], A : [ a1, a2 ]} >>> convert_to_row_lists(t) ([[ a1, b1 ], [ a2, b2 ]], [ A, B ]) Page 9 of 20 Student #: cont d...

Question 6. [5 marks] Part (a) [1 mark] The list below is shown after each pass of a sorting algorithm. [7, 1, 4, 5, 2, 6, 3] # intial list [1, 4, 5, 2, 6, 3, 7] # after one pass [1, 4, 2, 5, 3, 6, 7] # after two [1, 2, 4, 3, 5, 6, 7] # after three [1, 2, 3, 4, 5, 6, 7] # after four Which sorting algorithm is being executed? (circle one) (a) bubble sort (b) selection sort (c) insertion sort Part (b) [1 mark] The list below is shown after each pass of a sorting algorithm. [7, 1, 4, 5, 2, 6, 3] # initial list [1, 7, 4, 5, 2, 6, 3] # after one pass [1, 2, 4, 5, 7, 6, 3] # after two [1, 2, 3, 5, 7, 6, 4] # after three [1, 2, 3, 4, 7, 6, 5] # after four [1, 2, 3, 4, 5, 6, 7] # after five Which sorting algorithm is being executed? (circle one) (a) bubble sort (b) selection sort (c) insertion sort Part (c) [1 mark] List [6, 5, 2, 3, 7, 1, 4] is being sorted using insertion sort. Fill in the blanks to show the list after the next two passes. After one pass: [6, 5, 2, 3, 7, 1, 4] After two passes: [5, 6, 2, 3, 7, 1, 4] After three passes: After four passes: Part (d) [1 mark] Some number of iterations of selection sort have been performed on a list, resulting in this list: [1, 2, 4, 5, 3, 8, 7, 6, 9] What is the maximum number of passes that could have been performed so far? Part (e) [1 mark] What additional piece of information do you know about the sorted section during selection sort that you don t know during insertion sort? Page 10 of 20 cont d...

Question 7. [10 marks] Each code fragment in the table below operates on list L, which has length k where k is very large at least in the tens of thousands. For each fragment, give an expression in terms of k for how many times cheers! is printed, and circle whether the behaviour is constant, linear, quadratic or something else. Code How many times is cheers! printed? Complexity (circle one) for i in range(len(l)): print( cheers! ) for item in L: print( cheers! ) constant linear quadratic something else for item in L[10:]: print( cheers! ) constant linear quadratic something else i = 0 while i < len(l) print( cheers! ) i = i + len(l) // 10 constant linear quadratic something else for item in L[1000:2000]: print( cheers! ) constant linear quadratic something else for i in range(len(l)) for item in L[:i]: print( cheers! ) constant linear quadratic something else Page 11 of 20 Student #: cont d...

Question 8. [12 marks] Some people have wine cellars where they store bottles of wine. In this question, you will develop two classes to keep track of the kinds of wine in a cellar, how many bottles of each kind there are, and whether the person likes or dislikes each kind of wine. Here is the header and docstring for class Wine. class Wine: Information about a type of wine in our wine cellar, including the name, how many bottles there are, and whether the wine is liked. Part (a) [2 marks] Complete method init for class Wine. Note: you will most likely not need all of the space on this page. def init (self, name, num): (Wine, str, int) -> NoneType Record that there are num bottles of a wine named name. Assume that we like it. >>> w = Wine( Painter Bridge, 6) >>> w.name Painter Bridge >>> w.num_left 6 >>> w.like_it True Page 12 of 20 cont d...

Part (b) [2 marks] Here is the header, type contract, and description for method drink in class Wine. Add an example that creates a Wine object, drinks one of the bottles, and verifies that there is now one fewer bottle of that Wine. Also write the body of the method. def drink(self): (Wine) -> NoneType Precondition: there is at least 1 bottle left. Record that we drank one bottle of this Wine. Part (c) [3 marks] Write an eq method in class Wine that allows us to compare two Wine objects to see if a wine is already in a cellar. Consider two wines equal if they have the same name. Follow the function design recipe. Note: For the rest of this question, you should assume that there is a str method in class Wine that that returns strings of this form: Wine(Painter Bridge, 3, True) Page 13 of 20 Student #: cont d...

class WineCellar: Information about the bottles of wine in a wine cellar. Part (d) [1 mark] Complete method init in class WineCellar: def init (self): (WineCellar) -> NoneType Create a WineCellar with an empty wine list. >>> cellar = WineCellar() >>> cellar.wine_list [] Part (e) [3 marks] Complete method add in class WineCellar. Hints: value in lst evaluates to True when value is equal to an item in lst. Also, lst.index(value) returns the index of value in lst. If you need more space for this question, please use page 16 and note here that you have done so. def add(self, wine): (WineCellar) -> NoneType If wine is not already in this WineCellar, add it. Otherwise, increase the number of bottles in the equivalent Wine object that is already in the cellar. >>> cellar = WineCellar() >>> cellar.add(wine( Painter Bridge, 6)) >>> cellar.add(wine( Painter Bridge, 5)) >>> len(cellar.wine_list) 1 >>> str(cellar.wine_list[0]) Wine(Painter Bridge, 11, True) Page 14 of 20 cont d...

Part (f) [3 marks] Complete method get_wines_to_replace in class WineCellar: def get_wines_to_replace(self): (WineCellar) -> list of Wine Return a list of the wines that need replacing: the ones where there are 0 bottles left and that are liked. >>> cellar = WineCellar() >>> cellar.add(wine( Painter Bridge, 0)) >>> cellar.add(wine( Santa Alicia, 1)) >>> cellar.add(wine( Cesari Amarone, 0)) >>> w = Wine( Fuzion Shiraz Malbec, 0) >>> cellar.add(w) >>> w.like_it = False >>> res = cellar.get_wines_to_replace() >>> len(res) 2 >>> str(res[0]) == Wine(Painter Bridge, 0, True) True >>> str(res[1]) == Wine(Cesari Amarone, 0, True) True Total Marks = 70 Page 15 of 20 Student #: cont d...

[Use the space below for rough work. This page will not be marked, unless you clearly indicate the part of your work that you want us to mark.] Page 16 of 20 cont d...

[Use the space below for rough work. This page will not be marked, unless you clearly indicate the part of your work that you want us to mark.] Page 17 of 20 Student #: cont d...

[Use the space below for rough work. This page will not be marked, unless you clearly indicate the part of your work that you want us to mark.] Page 18 of 20 cont d...

Short Python function/method descriptions: builtins : input([prompt]) -> str Read a string from standard input. The trailing newline is stripped. The prompt string, if given, is printed without a trailing newline before reading. abs(x) -> number Return the absolute value of x. int(x) -> int Convert x to an integer, if possible. A floating point argument will be truncated towards zero. len(x) -> int Return the length of the list, tuple, dict, or string x. max(iterable) -> object max(a, b, c,...) -> object With a single iterable argument, return its largest item. With two or more arguments, return the largest argument. min(iterable) -> object min(a, b, c,...) -> object With a single iterable argument, return its smallest item. With two or more arguments, return the smallest argument. print(value,..., sep=, end= \n ) -> NoneType Prints the values. Optional keyword arguments: sep: string inserted between values, default a space. end: string appended after the last value, default a newline. open(name[, mode]) -> file open for reading, writing, or appending Open a file. Legal modes are "r" (read), "w" (write), and "a" (append). range([start], stop, [step]) -> list-like-object of int Return the integers starting with start and ending with stop - 1 with step specifying the amount to increment (or decrement). If start is not specified, the list starts at 0. If step is not specified, the values are incremented by 1. dict: D[k] --> object Produce the value associated with the key k in D. del D[k] Remove D[k] from D. k in d --> bool Produce True if k is a key in D and False otherwise. D.get(k) -> object Return D[k] if k in D, otherwise return None. D.keys() -> list-like-object of object Return the keys of D. D.values() -> list-like-object of object Return the values associated with the keys of D. D.items() -> list-like-object of tuple of (object, object) Return the (key, value) pairs of D, as 2-tuples. file open for reading: F.close() -> NoneType Close the file. F.read() -> str Read until EOF (End Of File) is reached, and return as a string. F.readline() -> str Read and return the next line from the file, as a string. Retain newline. Return an empty string at EOF (End Of File). Page 19 of 20 Student #: End of Final Examination

F.readlines() -> list of str Return a list of the lines from the file. Each string ends in a newline. list: x in L --> bool Produce True if x is in L and False otherwise. L.append(x) -> NoneType Append x to the end of the list L. L.index(value) -> int Return the lowest index of value in L. L.insert(index, x) -> NoneType Insert x at position index. L.pop() -> object Remove and return the last item from L. L.remove(value) -> NoneType Remove the first occurrence of value from L. L.reverse() -> NoneType Reverse *IN PLACE*. L.sort() -> NoneType Sort the list in ascending order. str: x in s --> bool Produce True if and only if x is in s. str(x) -> str Convert an object into its string representation, if possible. S.count(sub[, start[, end]]) -> int Return the number of non-overlapping occurrences of substring sub in string S[start:end]. Optional arguments start and end are interpreted as in slice notation. S.find(sub[, i]) -> int Return the lowest index in S (starting at S[i], if i is given) where the string sub is found or -1 if sub does not occur in S. S.index(sub) -> int Like find but raises an exception if sub does not occur in S. S.isdigit() -> bool Return True if all characters in S are digits and False otherwise. S.lower() -> str Return a copy of the string S converted to lowercase. S.lstrip([chars]) -> str Return a copy of the string S with leading whitespace removed. If chars is given and not None, remove characters in chars instead. S.replace(old, new) -> str Return a copy of string S with all occurrences of the string old replaced with the string new. S.rstrip([chars]) -> str Return a copy of the string S with trailing whitespace removed. If chars is given and not None, remove characters in chars instead. S.split([sep]) -> list of str Return a list of the words in S, using string sep as the separator and any whitespace string if sep is not specified. S.strip() -> str Return a copy of S with leading and trailing whitespace removed. S.upper() -> str Return a copy of the string S converted to uppercase. Page 20 of 20 End of Final Examination