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

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

******************** YOUR UCINET ID TIME MWF AT: 8A P ****** K E Y ****** TA S NAME ******************** Second Midterm

Second Midterm. Good luck! ICS 31 UC IRVINE YOUR NAME YOUR STUDENT ID (8 DIGITS) YOUR UCINET

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

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

Please write your answers clearly and neatly we can t give you credit if we can t decipher what you ve written.

Please write your answers clearly and neatly we can t give you credit if we can t decipher what you ve written.

Please write your answers clearly and neatly we can t give you credit if we can t decipher what you ve written.

Please write your answers clearly and neatly we can t give you credit if we can t decipher what you ve written.

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

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

def function1(l: 'list of numbers') -> None: ''' Print, one per line, double the value of each item in the parameter '''

CS150 Sample Final. Name: Section: A / B

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

Topic: List processing (with application to files)

CS150 Sample Final Solution

CS 111X - Fall Test 1

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

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

CS 111X - Fall Test 1 - KEY KEY KEY KEY KEY KEY KEY

Student Number: Instructor: Brian Harrington

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

CS 303E Fall 2011 Exam 2 Solutions and Criteria November 2, Good Luck!

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

EXAMINATION INSTRUCTIONS

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

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

CS150 - Sample Final

CS 1301 Exam 1 Fall 2010

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

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

CS 1301 Exam 1 Fall 2010

EXAMINATION INSTRUCTIONS

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

CSC148, Lab #4. General rules. Overview. Tracing recursion. Greatest Common Denominator GCD

Spring 2017 CS 1110/1111 Exam 1

Multiple Choice (Questions 1 13) 26 Points Select all correct answers (multiple correct answers are possible)

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

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

NOTE: All references to Python on this exam mean Python 3, so you should answer accordingly.

Intro. Scheme Basics. scm> 5 5. scm>

CS 1301 Exam 2 Fall 2010

CS 2316 Exam 1 Spring 2014

PREPARING FOR PRELIM 1

Programming with Python

Spring Semester 11 Exam #1 Dr. Dillon. (02/15)

CIS 110 Introduction to Computer Programming 8 October 2013 Midterm

CS 1110 Prelim 2 Solutions April 2018

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

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

CS 170 Exam 2. Version: A Fall Name (as in OPUS) (print): Instructions:

Duration: 90 minutes. Page 1 of 14 Q2: /13 Q3: /13 TOTAL: /38. Bonus /1

CS1114 Spring 2015 Test ONE ANSWER KEY. page 1 of 8 pages (counting the cover sheet)

(the bubble footer is automatically inserted into this space)

CS 1301 Exam 1 Fall 2014

CSC148 Recipe for Designing Classes

CS Prelim 2 Review Fall 2018

Overview of List Syntax

7. (2 pts) str( str( b ) ) str '4' will not compile (single, double, or triple quotes

Lecture Transcript While and Do While Statements in C++

Structure and Interpretation of Computer Programs

Strings in Python 1 Midterm#1 Exam Review CS 8: Introduction to Computer Science Lecture #6

Structure and Interpretation of Computer Programs

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]

CS 111X - Spring Final Exam - KEY

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

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

Department of Electrical Engineering and Computer Sciences Spring 2007 Instructor: Dr. Dan Garcia

Collections. Lists, Tuples, Sets, Dictionaries

CS 1301 Exam 1 Spring 2014

61A Lecture 3. Friday, September 5

Introduction to: Computers & Programming: Review prior to 1 st Midterm

CS 115 Lecture 8. Selection: the if statement. Neil Moore

CIS 110 Introduction to Computer Programming. February 29, 2012 Midterm

CPE Summer 2015 Exam I (150 pts) June 18, 2015

CS 1110 Prelim 2 November 14th, 2013

CS Exam 2 Name: Your Grading TA: This exam has 7 pages including the title page. Please check to make sure all pages are included.

C++ Reference NYU Digital Electronics Lab Fall 2016

PLEASE HAND IN UNIVERSITY OF TORONTO Faculty of Arts and Science

CS 3512, Spring Instructor: Doug Dunham. Textbook: James L. Hein, Discrete Structures, Logic, and Computability, 3rd Ed. Jones and Barlett, 2010

CMSC 201 Fall 2018 Lab 04 While Loops

CIS 110 Introduction to Computer Programming Summer 2018 Midterm. Recitation ROOM :

CS 1301 Exam 1 Fall 2014

CSC148: Week 1

CSC148 Fall 2017 Ramp Up Session Reference

1 Inheritance (8 minutes, 9 points)

Text Input and Conditionals

CS 455 Final Exam Fall 2015 [Bono] Dec. 15, 2015

CIS 110 Introduction to Computer Programming Summer 2016 Midterm. Recitation # (e.g., 201):

Multiple Choice (Questions 1 13) 26 Points Select all correct answers (multiple correct answers are possible)

CSE 142, Autumn 2008 Midterm Exam, Friday, October 31, 2008

Midterm I - Solution CS164, Spring 2014

PRACTICE MIDTERM EXAM #2

Basic Data Types and Operators CS 8: Introduction to Computer Science, Winter 2019 Lecture #2

Q1: Multiple choice / 20 Q2: C input/output; operators / 40 Q3: Conditional statements / 40 TOTAL SCORE / 100 EXTRA CREDIT / 10

5/3/2006. Today! HelloWorld in BlueJ. HelloWorld in BlueJ, Cont. HelloWorld in BlueJ, Cont. HelloWorld in BlueJ, Cont. HelloWorld in BlueJ, Cont.

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

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

Data Structures. Lists, Tuples, Sets, Dictionaries

Transcription:

ICS 31 UC IRVINE SPRING 2017 DAVID G. KAY YOUR NAME YOUR STUDENT ID (8 DIGITS) ############## YOUR UCINET ID @UCI.EDU #### K E Y #### ############## Second Midterm You have 75 minutes (until the end of the class period) to complete this exam. There are 61 points possible, so allow approximately one minute per point and you ll have plenty of time left over. Please read all the problems carefully. If you have a question on what a problem means or what it calls for, ask us. Unless a problem specifically asks about errors, you should assume that each problem is correct and solvable; ask us if you believe otherwise. In answering these questions, you may use any Python 3 features we have covered in class, in the text, in the lab assignments, or earlier on the exam, unless a problem says otherwise. Use more advanced features at your own risk; you must use them correctly. If a question asks for a single item (e.g., one word, identifier, or constant), supplying more than one will probably not receive credit. Remember, stay cool! If you run into trouble on a problem, go on to the next one. Later on, you can go back if you have time. Don t let yourself get stuck on any one problem. You may not share with or receive from anyone besides the instructor or TAs any information or materials during the exam. You may not use any electronic devices. Please write your answers clearly and neatly we can t give you credit if we can t decipher what you ve written. We ll give partial credit for partially correct answers, so writing something is better than writing nothing. But be sure to answer just what the question asks. Good luck! YOUR LAB SECTION (CIRCLE ONE): 1. 8:00 Ashwin Achar 2. 9:30 Ashwin Achar 3. 11:00 Nathaniel Baer 4. 12:30 Nathaniel Baer 5. 2:00 Yadhu Prakash 6. 3:30 Yadhu Prakash 7. 5:00 Shreyaan Kaushal 8. 6:30 Shreyaan Kaushal Problem 1 (15 points) Problem 2 (18 points) Problem 3 (5 points) Problem 4 (20 points) Problem 5 (3 points) Total (61 points)

ICS 31 SPRING 2017 DAVID G. KAY UC IRVINE SECOND MIDTERM PAGE 2 Problem 1 (15 points) Topic: String processing U.S. telephone numbers can appear in many forms: 949-824-5072 (949)824-5072 9498245072 1-949-824-5072 1(949)824-5072 +1(949)824-5072 To process a collection of phone numbers, it's helpful if we store every number in the same form. Below is the outline of a function to perform this task; it shows three steps labeled (i), (ii), and (iii). def phone_number_to_10_digits(original: str) -> str: Convert the parameter to a string of exactly 10 digits # (i) Change all punctuation to blanks # (ii) Remove all blanks # (iii) Remove extra 1 at beginning if necessary assert phone_number_to_10_digits('+1(999)888-7777') == '9998887777' assert phone_number_to_10_digits('1-999-888-7777') == '9998887777' assert phone_number_to_10_digits('1(999)888-7777') == '9998887777' assert phone_number_to_10_digits('19998887777') == '9998887777' assert phone_number_to_10_digits('9998887777') == '9998887777' assert phone_number_to_10_digits('(999)888-7777') == '9998887777' assert phone_number_to_10_digits('999-888-7777') == '9998887777' The following excerpt from help(str) may be useful for this problem. find(...) S.find(sub) -> int Return the lowest index in S where substring sub is found. Return -1 on failure. replace(...) S.replace(old, new) -> str Return a copy of S with all occurrences of substring old replaced by new. maketrans(...) str.maketrans(x, y) -> dict (static method) Return a translation table usable for translate(). The arguments must be strings of equal length, and in the resulting dictionary, each character in x will be mapped to the character at the same position in y. translate(...) S.translate(table) -> str Return a copy of the string S, where all characters have been mapped through the given translation table. Unmapped characters are left untouched. upper(...) S.upper() -> str Return a copy of S converted to uppercase. (a) Which of the following code segments correctly implements step (i) above? Circle one or more of A, B, C, D, or E; more than one may be correct. A. result = original.replace("()-+", " ") B. table = str.maketrans("()+-", " ") # THIS (2 lines) result = original.translate(table) C. result = translate("()+-", " ") D. result = original.find("()+-").replace(" ") E. result = original.translate(str.maketrans("()+-", " ")) # THIS SCORING: Start w/ 3; deduct 1pt for each wrongly circled letter and each wrongly un-circled letter. No negative scores.

ICS 31 S'17 D. G. KAY UC IRVINE UCINET ID: @UCI.EDU SECOND MIDTERM PAGE 3 (b) Which of the following code segments also correctly implements step (i) above? Circle one or more of A, B, C, or D; more than one may be correct. A. result = '' # THIS for c in original: if c in "()-+": result += " " else: result += c B. result = '' if c in original: for c in "()-+": result += " " else: result += c C. result = '' for c in original: if c not in "()-+": result += c D. result = original # THIS for c in "()-+": result = result.replace(c, " ") (c) Which of the following code segments correctly implements step (ii) above? Circle one or more of A, B, C, or D; more than one may be correct. A. result = result.strip() B. result.replace(" ", None) C. result = result.lstrip().rstrip() D. result = result.replace(" ", "") # THIS (d) Which of the following code segments correctly implements both steps (i) and (ii) above? Your choices are the same code segments (A, B, C, and D) as in part (b) above, but the correct answer(s) may be different. Circle one or more of A, B, C, or D; more than one may be correct. A. B. C. D. # The one with IF and no ELSE (C) (e) Which of the following code segments correctly implements step (iii) above? Circle one or more of A, B, C, or D; more than one may be correct. A. if len(result) > 10 and result[0] == '1': # THIS result = result[1:] B. if len(result) > 10 and result[0] == '1': result = result - 1 C. if len(result) > 10 and result[0] == '1': del result[0] D. if len(result) > 10 and result[0] == '1': result = result - '1'

ICS 31 SPRING 2017 DAVID G. KAY UC IRVINE SECOND MIDTERM PAGE 4 Problem 2 (18 points) Topic: Processing lists of namedtuples A government agency has asked your help in building a system for analyzing telephone call records. You represent a single phone call as follows: Call = namedtuple('call', 'num_from num_to date time seconds') where num_from and num_to are strings representing 10-digit US phone numbers (the number of the caller the person who dialed the phone is num_from; the number dialed the number of the person who says "Hello?" is num_to), date is a string representing the date, time represents the time the call was made, and second represents how long the call lasted, in seconds. c1 = Call('7142220000', '9494440000', '01/23/2014', '12:32', 240) c2 = Call('7142220000', '8189990000', '01/23/2014', '12:37', 200) c3 = Call('3132221111', '2121112222', '01/24/2014', '08:25', 1600) all_calls = [c1, c2, c3] (a) (5 points) Complete the definition of the function below, consistent with its header, docstring comment, and assertions, by filling each blank with exactly one identifier, operator, or constant. (Remember that [Call] as a type annotation is the same as 'list of Call'.) def calls_from(call_list: [Call], phone_number: str) -> [Call]: Return a list of all calls made from the specified number result = [ ] for c in : for c in call_list: # SCORING: 1 point per blank if c. == :.append( ) assert calls_from(all_calls, '7142220000') == [c1, c2] assert calls_from(all_calls, '3132221111') == [c3] assert calls_from([ ], '3132221111') == [ ] assert calls_from(all_calls, '9999999999') == [ ] if c.num_from == phone_number: result.append(c) (b) (2 points) Next, define a similar function named calls_to() that returns calls made to a specified number, as described below. The body of calls_to() could be identical to the body of calls_from() above, except for one identifier in one place. Fill in the changed identifier below and leave the other places blank. def calls_to(call_list: [Call], phone_number: str) -> [Call]: Return a list of all calls made to the specified number result = [ ] for c in : if c. == : # ANSWER: c.num_to instead of c.num_from. 1 point..append( ) # 1 pt for no new mistakes in the other blanks. assert calls_to(all_calls, '7142220000') == [ ] assert calls_to(all_calls, '2121112222') == [c3] assert calls_to([ ], '3132221111') == [ ]

ICS 31 S'17 D. G. KAY UC IRVINE UCINET ID: @UCI.EDU SECOND MIDTERM PAGE 5 (c) (4 points) We plan to use this software to identify people who call the numbers of known terrorists (or receive calls from terrorists' numbers). Next we'll write a version of calls_from() that selects calls from any phone number on a list of numbers (rather than from just a single number). Complete the definition of the function below, consistent with its header, docstring comment, and assertions, by filling each blank with exactly one identifier, operator, or constant. def calls_from_any(call_list: [Call], suspected_numbers: [str]) -> [Call]: Return a list of all calls made from a number on the suspected_numbers list. result = [ ] SCORING: 1/2 for call_list below, 1/2 for num_from in line after that. for c in : for c in call_list: SCORING: 1 pt for in, 1 pt for suspected_nums if c. : if c.num_from in suspected_numbers:.append( ) result.append( c ) SCORING 1/2 pt. each assert calls_from_any(all_calls, ['7142220000', '3132221111', '7778881111']) == [c1, c2, c3] (d) (2 points) Next, define a function named calls_to_any() that returns a list of all calls made to a number on the suspected-number list. The body of calls_to_any() could be identical to the body of calls_from_any(), except for one identifier in one place. Fill in the changed identifier below and leave the other places blank. def calls_to_any(call_list: [Call], suspected_numbers: [str]) -> [Call]: Return a list of all calls made to a number on the suspected_numbers list. result = [ ] for c in : # ANSWER (next line): c.num_to instead of c.num_from. 1 point if c. :.append( ) # 1 pt for no new mistakes in the other blanks. assert calls_to_any(all_calls, ['7142220000', '8189990000', '2121112222']) == [c2, c3] (e) (5 points) Complete the definition of the function below, consistent with its header, docstring comment, and assertions, by filling in each blank with exactly one identifier, operator, or constant. def total_call_time(call_list: [Call]) -> int: Return the total duration of all calls on list (in seconds) result = result = 0 SCORING: 1 point for c in : for c in call_list: SCORING: 1/2 point +=. result += c.seconds SCORING: 1 pt each return SCORING: 1/2 point assert total_call_time(all_calls) == 2040 assert total_call_time([c1]) == 240 assert total_call_time([ ]) == 0

ICS 31 SPRING 2017 DAVID G. KAY UC IRVINE SECOND MIDTERM PAGE 6 Problem 3 (5 points) Topic: String formatting (a) (3 points) The function below prints all the calls from a given number in a formatted table: From To Date Time Seconds Minutes 7142220000 9494440000 01/23/2014 12:32 240 4.000 7142220000 8189990000 01/23/2014 12:37 200 3.333 def print_calls_from(whole_call_list: [Call], phone_number: str) -> None: Print all the calls from the specified number in table form. selected_calls = calls_from(whole_call_list, phone_number) print('from To Date Time Seconds Minutes') print() FORMAT_STRING = Choose the correct value from A E below for c in selected_calls: print(format_string.format(c.num_from, c.num_to, c.date, c.time, c.seconds, c.seconds/60)) Choose which one of these five values could go in the code above to produce the correct formatting. Circle one of A, B, C, D, or E; only one is correct. A. "{:15s} {:15s} {:15s} {:5s} {:7d} {:8.3f}" B. "{:10s} {:10s} {:15s} {:5s} {:1d} {:2.3f}" C. "{:10s} {:10s} {:10s} {:5s} {:1d} {:8.3f}" D. "{:10s} {:10s} {:10s} {:5s} {:7d} {:8.3f}" THIS ONE E. "{:10s} {:10s} {:10s} {:5s} {:7d} {:2.3f}" (b) (2 points) Which of the following is the correct output from this print statement: print("call time is {:2d} seconds.".format(185)) Circle one of A, B, C, D, or E; only one is correct. A. Call time is 18 seconds. B. Call time is 85 seconds. C. Call time is185 seconds. D. Call time is 185 seconds. # THIS ONE E. Call time is 185 seconds.

ICS 31 S'17 D. G. KAY UC IRVINE UCINET ID: @UCI.EDU SECOND MIDTERM PAGE 7 Problem 4 (20 points) Topic: Processing lists of namedtuples The previous problems dealt with a list containing every call. It will be convenient to organize those calls by customer (i.e., by the person who "owns" each phone number), with a record (namedtuple) for each person. Each record starts out as follows: Customer = namedtuple('customer', 'name address phone outgoing incoming') p1 = Customer('Jones, John', '12 Elm St.', '9494440000', [ ], [ ]) p2 = Customer('Smith, Sally', '24 Oak St.', '7142220000', [ ], [ ]) p3 = Customer('Roberts, Dan', '36 Ash St.', '2137770000', [ ], [ ]) p4 = Customer('Brown, Mary', '48 Fir St.', '8189990000', [ ], [ ]) where the name, address, and phone are strings. The last two fields are lists: a list of all the (outgoing) Calls made from the customer's number and a list of all the (incoming) Calls made to the customer's number. (a) (5 points) First we write a function that completes the outgoing and incoming call lists for a single customer. Complete the definition of the function below, consistent with its header, docstring comment, and assertions, by filling each blank with exactly one identifier, operator, or constant. As always, for full credit you should use previously defined functions wherever appropriate. def fill_customer_record(rwc: Customer, all_calls: [Call]) -> Customer: "RWC" stands for "record without calls": It's quicker to write on the exam. Return a customer record with that customer's outgoing and incoming calls filled in. SCORING: 1pt for calls_from, 1pt for calls_to, 1pt for both all_calls, 1pt for name+addr, 1 for RWC.ph outgoing_call_list = (, RWC.phone) calls_from all_calls incoming_call_list = (, RWC.phone) calls_to all_calls return Customer(RWC., RWC.,., outgoing_call_list, incoming_call_list) name address RWC phone assert fill_customer_record(p2, all_calls) == Customer(p2.name, p2.address, p2.phone, [c1, c2], [ ]) (b) (6 points) Suppose we have (i) the functions and namedtuples described above in this exam, (ii) the variable all_calls that contains a list of Calls containing every call made in the last year, and (iii) the variable terrorist_phones that contains ['7778889999', '6667778888', '5556667777'], representing three phone numbers of known terrorists. Which of the following is an accurate statement? Circle one or more of A, B, C, D, E, or F; more than one may be correct. A. Each Call in all_calls occurs twice in the list of Customers constructed from all_calls: once on the caller's outgoing list and once on the recipient's incoming list. YES B. On a given Customer's outgoing call list, every Call's num_from field is the same. YES C. On a given Customer's incoming call list, every Call's num_from field is the same. NO D. We can use calls_to_any(all_calls, terrorist_phones) to get a list of all the calls made to the terrorists' phone numbers. YES E. The expression total_call_time(all_calls, '7778889999') gives us the number of seconds the suspected terrorist has spent on the phone. NO F. The expression total_call_time(calls_to(all_calls, '8189990000')) gives us the number of seconds Mary Brown has spent on the phone with people who called her. YES

ICS 31 SPRING 2017 DAVID G. KAY UC IRVINE SECOND MIDTERM PAGE 8 (c) (5 points) Complete the definition of the function below, consistent with its header, docstring comment, and assertions, by filling each blank with exactly one identifier, operator, or constant. def terrorist_talk_time(c: Customer, bad_phones: [str]) -> int: Return the number of seconds this customer spent talking to terrorists on the specified list of phone numbers. SCORE lines 1, 2: 1 pt for the two total_call_times;1 pt for to_any and outgoing on same line; 1/from_, incoming seconds_outgoing = ( (c., bad_phones)) total_call_time calls_to_any outgoing seconds_incoming = ( (c., bad_phones)) total_call_time calls_from_any incoming return + secs_outgoing secs_incoming SCORE 1 pt each, either order assert terrorist_talk_time(p2, ['8189990000']) == 200 (d) (4 points) Suppose we complete our customer list as shown below. SCORING: 1/2 point each. p1 = fill_customer_record(p1, all_calls) p2 = fill_customer_record(p2, all_calls) p3 = fill_customer_record(p3, all_calls) p4 = fill_customer_record(p4, all_calls) customer_list = [p1, p2, p3, p4] Indicate the data type of each of the following expressions by selecting one item from the provided list. A. int float bool str list of str Call Customer list of Call list of Customer customer_list # List of Customer. Value not required B. int float bool str list of str Call Customer list of Call list of Customer customer_list[1] # Customer C. int float bool str list of str Call Customer list of Call list of Customer customer_list[1].name # str D. int float bool str list of str Call Customer list of Call list of Customer customer_list[1].outgoing # list of Call E. int float bool str list of str Call Customer list of Call list of Customer customer_list[1].outgoing[1] # Call F. int float bool str list of str Call Customer list of Call list of Customer customer_list[1].outgoing[1].num_to # str G. int float bool str list of str Call Customer list of Call list of Customer customer_list[1].outgoing[1].seconds # int H. int float bool str list of str Call Customer list of Call list of Customer len(customer_list[1].outgoing) # int

ICS 31 S'17 D. G. KAY UC IRVINE UCINET ID: @UCI.EDU SECOND MIDTERM PAGE 9 Problem 5 (3 points) Topic: Coding with boolean expressions Each of the three code segments below could be rewritten to have the same meaning in less code. Rewrite each segment, primarily by removing unnecessary code as discussed on the lab assignments, while preserving the meaning. Just make your changes on the code below. (a) def is_negative(num: int) -> bool: Return True if the parameter is a negative number and False otherwise if num < 0: return True else: return False return num < 0 # In this problem, don't deduct for minor transcription errors. (b) if is_negative(-23) == True: print('negative') else: print('positive (or zero)') if is_negative(-23): print('negative') else: print('positive (or zero)') (c) assert is_negative(-18) == True assert is_negative(-18) Problem 6 (0 points) When you're done with the exam, follow these steps (so you don't disturb your classmates and so your exam gets turned in properly): Write your UCInet ID in the blanks at the top of the odd-numbered pages. Also check for your name on the front page. Gather up all your stuff. Take your stuff and your exam down to the front of the room. Turn in your exam; show your ID if asked. Exit by the doors at the front of the room. Don't go back to your seat or disturb students who are still working.